< 개발 환경 > |
안드로이드/Android 현재 단말에 설치된 실행가능한 앱 얻어오기(패키지명 구분)
단말에서 설치된 APP 들 중에 현재 실행가능한 앱 중에 동일한 패키지를 사용하는 APP들을 구분 하려면 어떻게 해야 할까요!! 안드로이드 프로젝트를 진행하게 되면, 실행가능한 APP 들중에 같은 패키지를 사용하는 APP들을 구별해야 할 경우가 생깁니다.
자 그럼!! 실제 구분하는 코드를 살펴 보겠습니다.!!
package arabiannight.tistroy.com.queryintentactivities; import java.util.List; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.util.Log; public class TestQueryIntentActivitiesActivity extends Activity { private static final String PKG_PREFIX = "arabiannight.tistory.com"; private PackageManager manager; private CharSequence csDesc; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); manager = getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); ListgroupApps = manager.queryIntentActivities(intent, 0); for(int i=groupApps.size()-1; i>=0; i--) { ResolveInfo resolveInfo = groupApps.get(i); if(!resolveInfo.activityInfo.applicationInfo.packageName.startsWith(PKG_PREFIX)) { csDesc = resolveInfo.activityInfo.applicationInfo.loadDescription(manager); if(csDesc == null || (!csDesc.toString().startsWith("SAVE_APP"))){ groupApps.remove(i); } } } for(ResolveInfo r : groupApps){ Log.d("GROUP", r.activityInfo.packageName); } } } //
우선 단말에서 실행가능한 APP 목록을 가져오는 부분 입니다. packageManager의 queryIntentActivities 라는 메서드는 해당 intent의 action과 category에 해당하는 모든 APP 목록을 얻어 옵니다.
Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); ListgroupApps = manager.queryIntentActivities(intent, 0); //
얻어온 APP 목록중에 "arabiannight.tistory.com" 가 아닌 APP들을 remove 시켜 줍니다. 또한 Description을 얻어와서 Description이 null 이거나 "SAVE_APP" 이 아닌 경우 삭제 시켜 줍니다. Description은 APP 단위로 설정할 수 있는 ID 정도로 생각하시면 되는데요!! 자세한 내용은 이전 포스팅인 [안드로이드/Android 어플리케이션(패키지) 마다 APP_ID(description) 부여 하기] 를 참고 하시면 됩니다.
if(!resolveInfo.activityInfo.applicationInfo.packageName.startsWith(PKG_PREFIX)) { csDesc = resolveInfo.activityInfo.applicationInfo.loadDescription(manager); if(csDesc == null || (!csDesc.toString().startsWith("SAVE_APP"))){ groupApps.remove(i); } }
06-04 01:58:11.510: D/GROUP(18901): arabiannight.tistory.com.intentfilter 06-04 01:58:11.510: D/GROUP(18901): arabiannight.tistory.com.provider 06-04 01:58:11.510: D/GROUP(18901): arabiannight.tistory.com.intentreceiver 06-04 01:58:11.510: D/GROUP(18901): arabiannight.tistory.com.resolveinfo 06-04 01:58:11.510: D/GROUP(18901): arabiannight.tistory.com.installpackage
'Android > Package' 카테고리의 다른 글
안드로이드/Android 패키지 설치유무와 APP ID 확인 하기~! (0) | 2012.06.26 |
---|---|
안드로이드/Android 어플리케이션(패키지) 마다 APP_ID(description) 부여 하기 (3) | 2012.04.05 |
안드로이드/Android packagemanager를 이용한 설치된 package명 확인 하기 (48) | 2012.04.03 |