< 개발 환경 > |
안드로이드/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);
List groupApps = 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 |
TestQueryIntentActivities.zip