본문 바로가기

Android/Package

안드로이드/Android 현재 단말에 설치된 실행가능한 앱 얻어오기(패키지명 구분)


 < 개발 환경 > 
   SDK 버전 : 안드로이드 SDK 2.2  
   API LEVEL : 8 
   이클립스 버젼 : Indigo
   테스트단말 : 삼성갤럭시 S2




안드로이드/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);
List groupApps = 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);
    }
}



결과화면 :
현재 설치된 실행가능한 APP 목록이 보이시나요?ㅎ


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




파일첨부 :