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 |