2017-03-21 217 views
-4

我可以讓我的代碼獲取所有已安裝的軟件包並將其顯示在吐司中。問題是,我希望我的代碼只顯示包含字符串的包名。我怎麼做?如何在android中安裝軟件包?

ActivityManager actvityManager = (ActivityManager) 
    getApplicationContext().getSystemService(getApplicationContext().ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses(); 

for(int pnum = 0; pnum < procInfos.size(); pnum++) 
{ 
if((procInfos.get(pnum)).processName.contains("android")|| (procInfos.get(pnum)).processName.contains("system")||(procInfos.get(pnum)).processName.contains("huawei")||(procInfos.get(pnum)).processName.contains("adil")) 
{ 
     //Toast.makeText(getApplicationContext(), "system apps", Toast.LENGTH_SHORT).show(); 
} 
else 
{ 
    actvityManager.killBackgroundProcesses(procInfos.get(pnum).processName); 
    Toast.makeText(getApplicationContext(), "killed "+procInfos.get(pnum).processName, Toast.LENGTH_SHORT).show(); 

} 
} 
+1

「我可以讓我的代碼獲得所有已安裝的軟件包並將其顯示在乾杯上」 - 您的代碼與此無關。 – CommonsWare

+0

看起來你正在運行進程,而不是已安裝的程序包。 –

+0

哦,我的壞,讓我更新 – user352806

回答

0

這裏是將要給你安裝的所有活動/ Android上的應用程序的代碼:

Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
List<ResolveInfo> pkgAppsList = context.getPackageManager().queryIntentActivities(mainIntent, 0); 

獲取安裝非系統應用程序的列表:

public static void installedApps() 
{ 
List<PackageInfo> packList = getPackageManager().getInstalledPackages(0); 
for (int i=0; i < packList.size(); i++) 
{ 
    PackageInfo packInfo = packList.get(i); 
    if ( (packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) 
    { 
     String appName = packInfo.applicationInfo.loadLabel(getPackageManager()).toString(); 
     Log.e("App № " + Integer.toString(i), appName); 
    } 
} } 

或者你可以嘗試一個結構良好的示例:

class PInfo { 
private String appname = ""; 
private String pname = ""; 
private String versionName = ""; 
private int versionCode = 0; 
private Drawable icon; 
private void prettyPrint() { 
    Log.v(appname + "\t" + pname + "\t" + versionName + "\t" + versionCode); 
} } 

private ArrayList<PInfo> getPackages() { 
ArrayList<PInfo> apps = getInstalledApps(false); 
final int max = apps.size(); 
for (int i=0; i<max; i++) { 
    apps.get(i).prettyPrint(); 
} 
return apps; } 

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) { 
ArrayList<PInfo> res = new ArrayList<PInfo>();   
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
for(int i=0;i<packs.size();i++) { 
    PackageInfo p = packs.get(i); 
    if ((!getSysPackages) && (p.versionName == null)) { 
     continue ; 
    } 
    PInfo newInfo = new PInfo(); 
    newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
    newInfo.pname = p.packageName; 
    newInfo.versionName = p.versionName; 
    newInfo.versionCode = p.versionCode; 
    newInfo.icon = p.applicationInfo.loadIcon(getPackageManager()); 
    res.add(newInfo); 
    } 
return res; } 
+0

那樣做廣告你發佈之前是否真的閱讀過這個問題?不,你沒有。 – user352806