Android

LauncherApp 만들기 -java

Wootaeng 2021. 9. 7. 15:00
728x90

Launcher App 이라는 것이 있다. 

런처 앱을 간략하게 말하면 디바이스 or 서버에서 어플리케이션의 정보를 가져와서 

화면에 보여주는 앱이다. 

거기에 어플리케이션을 보여주는 정렬 방식, 테마 등을 설정 할 수 있게 하는 기능이 있는 것.

 

ㅡ시중에 나와있는 런처앱은 많으니 한번 검색해보길 바랍니다.

 

그럼 안드로이드 디바이스에서 런처앱을 사용하려면 어느 것이 필요한가?

 

디바이스의 앱 정보를 가져오기 위해서는

PackageManager 기능이 필요하다

 

PackageManager 는 말 그대로 디바이스의 패키지와 어플리케이션의 정보를 가져오는 기능이다

PcakageManager 의 자세한 사항은 PackageManager 를 참고하시길 바랍니다.

 

public class MainActivity extends Activity {

    PackageManager myPackageManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myPackageManager = getPackageManager();

        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> intentList = getPackageManager().queryIntentActivities(intent, 0);

        GridView gridview = (GridView) findViewById(R.id.gridView);
        gridview.setAdapter(new launcherAdapter(this, intentList, myPackageManager));

        gridview.setOnItemClickListener(myOnItemClickListener);
    }

 

PackageManager 를 선언해주고 

getPackageManager().queryIntentActivities 해당 Api 를 이용해서 intent 와 관련된 결과를 ResolveInfo 타입으로 리스트를 받아오게된다. 

 

List View를 이용해서 어플리케이션의 아이콘, 이름, 경로를 가져오는 Adapter 구현

public class launcherAdapter extends BaseAdapter {


    //필드
    Context myContext;
    List<ResolveInfo> MyAppList;
    PackageManager myPackageManager;

    //생성자
    public launcherAdapter(Context myContext,List<ResolveInfo> MyAppList, PackageManager myPackageManager){
        //생성자의 인자로전달된 값을 필드에 저장
        this.myContext = myContext;
        this.MyAppList = MyAppList;
        this.myPackageManager = myPackageManager;
    }


    //모델의 아이템 갯수를 리턴
    @Override
    public int getCount() {
        return MyAppList.size();
    }

    //인자로 전달된 position 에 인덱스에 해당하는 아이템 리턴
    @Override
    public Object getItem(int position) {
        return MyAppList.get(position);
    }

    //인자로 전달된 position 인덱스에 아이템 아이디가 있다면 리턴 없으면 position 리턴
    @Override
    public long getItemId(int position) {
        return position;
    }


    //view 를 만들어서 리턴하거나 이미 존재하는 view 를 리턴
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView = convertView.findViewById(R.id.image);
        ResolveInfo resolveInfo = MyAppList.get(position);
        imageView.setImageDrawable(resolveInfo.loadIcon(myPackageManager));

        return imageView;
    }
}

 

 

그다음 GridView 를 이용해서 가져온 리스트 아이템을 View 에 뿌려주는 코드를 작성했다.

 

AdapterView.OnItemClickListener myOnItemClickListener =
            new AdapterView.OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    ResolveInfo cleckedResolveInfo =
                            (ResolveInfo)parent.getItemAtPosition(position);
                    ActivityInfo clickedActivityInfo =
                            cleckedResolveInfo.activityInfo;

                    Intent intent = new Intent(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
                    intent.setClassName(
                            clickedActivityInfo.applicationInfo.packageName,
                            clickedActivityInfo.name);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                            Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                    startActivity(intent);

                }

            };

 

가져온 아이템을 클릭하면 해당 아이템이 실행되는 코드를 만들어 봤다. 

 

이렇게 하면 간단한 런처 앱이 완성된다. 

 

특정 앱들은 자체 서버에서 앱들을 뿌려주게도 설정할 수 있는데 

그건 서버와 연결하는 코드 ,  JSON 또는 GSON 을 이용해서 정보들을 가져와서 뿌려주면 된다. 

 

728x90
반응형

'Android' 카테고리의 다른 글

[Android]Splash Screen 구현 Java  (0) 2021.09.20
[Android]그라데이션 적용 -JAVA  (0) 2021.09.18
[코틀린] Actiivty 전환하기  (0) 2021.09.14
안드로이드 4대 컴포넌트  (0) 2021.09.13
BirthdayCard App  (0) 2021.04.23