2011-03-22 2 views
5

이것은 현재 가지고있는 코드이지만 여전히 모든 앱 목록을 가져올 수는 없습니다. 누구든지 내가 뭘 잘못하고 있는지 알아?안드로이드 폰에 설치된 모든 앱을 얻는 방법

public class GetAppList extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     try { 
      List<PackageInfo> appListInfo1 = this.getPackageManager() 
      .getInstalledPackages(0); 
      JSONArray ja = new JSONArray(); 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       Object sendDataUrl = null; 
       HttpPost request = new HttpPost(sendDataUrl.toString()); 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       ContextWrapper context = null; 
       PackageManager pm = context.getPackageManager(); 
       List<PackageInfo> appListInfo = pm.getInstalledPackages(0); 
       for (PackageInfo p : appListInfo) { 
        if (p.applicationInfo.uid > 10000) { 
         JSONObject jo = new JSONObject(); 
         jo.put("label", p.applicationInfo.loadLabel(pm).toString()); 
         jo.put("packageName", p.applicationInfo.packageName); 
         ja.put(jo); 
        } 
        System.out.print(ja); 
       }   
     } catch (Exception e) { 
      // TODO: handle exception 
     } 
     finally { 
      // ... cleanup that will execute whether or not an error occurred ... 
     } 



}catch (Exception e) { 
    // TODO: handle exception 
} 
finally { 
    // ... cleanup that will execute whether or not an error occurred ... 
} 
    }} 

죄송합니다. 코드를 올바르게 포맷 할 수 없습니다. 나는 목록 응용 프로그램에 사용하는 코드

답변

3

이됩니다 : 당신이 나중에 응용 프로그램을 실행하려면

PackageManager pm = this.getPackageManager(); 
Intent intent = new Intent(Intent.ACTION_MAIN, null); 

String activityName = rInfo.activityInfo.name; 
List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED); 

for (ResolveInfo rInfo : list) { 
    pkg = rInfo.activityInfo.applicationInfo.packageName; 
    if (pm.getLaunchIntentForPackage(pkg) == null) { 
     continue; 
    } 
    String label = rInfo.activityInfo.applicationInfo.loadLabel(pm).toString(); 
    arrayList.add(new AppEntry(label, activityName, pkg, null)); 
} 

는 PKG 및 activityName을 아는 당신은 할 수 있습니다 :

Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setClassName(pkg, activityname); 
ctx.startActivity(intent); 
+1

이 코드는 잘라내어 붙여 넣기하지 않습니다. 올바른 (문자열 activityName 및 pkg 주변의 오류) ... 참고하시기 바랍니다. – easycheese

5

이 코드는 이름을 기록하고 설치된 모든 응용 프로그램의 패키지 이름 LogCat을 사용하여 로그를 쉽게 확인할 수 있습니다 (Eclipse를 사용하는 경우).

패키지 이름 - 앱 패키지의 이름입니다.

- 응용 프로그램과 관련된 텍스트 레이블. null을 반환하므로 appInfo.name만을 사용할 수 없습니다. appInfo.loadLabel(packageManager)을 사용하면 패키지 이름 com.android.speechrecorder 대신 음성 녹음기과 같은 실제 앱의 이름을 얻을 수 있습니다.

final PackageManager packageManager = getPackageManager(); 
List<ApplicationInfo> installedApplications = 
    packageManager.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo appInfo : installedApplications) 
{ 
    Log.d("OUTPUT", "Package name : " + appInfo.packageName); 
    Log.d("OUTPUT", "Name: " + appInfo.loadLabel(packageManager)); 
} 
관련 문제