2011-03-22 119 views
5

这是我目前的代码,但我仍无法获取手机上所有应用程序的列表。有没有人看到我在做什么错了?如何获取安装在Android手机上的所有应用程序

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

此代码不会剪切和粘贴为正确的(String activityName和pkg周围的错误)...只是FYI – easycheese 2012-05-06 16:02:02

5

此代码登录名和所有已安装应用程序的软件包名称。您可以使用LogCat轻松检查日志(如果您使用的是Eclipse)。

程序包名称 - 应用程序包的名称。

名称 - 与应用程序关联的文本标签。您只能使用appInfo.name,因为它将返回null。使用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)); 
} 
相关问题