Akh*_* Sk 4 android activity-manager
我正在开发一个应用程序,我希望获得所有非系统应用程序的列表.这是我的代码部分:
TextView tv = new TextView(this);
this.setContentView(tv);
ActivityManager actvityManager = (ActivityManager)
this.getSystemService( ACTIVITY_SERVICE );
PackageManager pm = this.getPackageManager();
List<PackageInfo> list =pm.getInstalledPackages(0);
for(int i=0;i<list.size();i++)
{
System.out.println("list"+i+" "+list.get(i));
}
for(PackageInfo pi : list)
{
try
{
ApplicationInfo ai=pm.getApplicationInfo(pi.packageName, 0);
if (ai.sourceDir.startsWith("/data/app/"))
{
tv.setText(ai.className);// non system apps
}
else
{
System.out.println("system apps");// system apps
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但它显示,所有的应用程序作为系统应用程序
Dar*_*tel 14
如果应用程序是非系统应用程序,则它必须具有启动Intent才能启动它.如果启动意图为null,那么它是一个系统App.
系统应用程序示例:"com.android.browser.provider","com.google.android.voicesearch".
对于上述应用程序,当您查询启动Intent时,您将获得NULL.
PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for(ApplicationInfo packageInfo:packages){
if( pm.getLaunchIntentForPackage(packageInfo.packageName) != null ){
String currAppName = pm.getApplicationLabel(packageInfo).toString();
//This app is a non-system app
}
else{
//System App
}
}
Run Code Online (Sandbox Code Playgroud)