1

我正在編寫一個代碼,以便從手機上最後安裝的應用程序提取包名稱,應用程序名稱和圖標。我可以從應用程序信息中獲取應用程序的通用名稱和圖標,但似乎無法弄清楚如何獲取程序包名稱。我發現所有能夠獲取包名稱的代碼都提供了我的應用程序包名稱,而不是上次安裝的應用程序。提取我手機上最後安裝的應用程序的包名稱

看來我需要找到一個方法來獲取包名稱,在那裏我可以傳遞應用程序信息作爲參數(就像我爲應用程序的通用名稱和圖標所做的那樣)。

final PackageManager pm = context.getPackageManager(); 
ApplicationInfo ai; 
try { 


ai = pm.getApplicationInfo(intent.getData().getSchemeSpecificPart(), 0); 
Log.d("tag_name","Application Info" + ai); 


PACKAGE_NAME = context.getApplicationContext().getPackageName(); 
Log.d("tag_name","Package Name" + PACKAGE_NAME); 



} catch (final PackageManager.NameNotFoundException e) { 
ai = null; 
} 


final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)"); 
Log.d("tag_name", "Application NAME" + applicationName); 



// http://www.carbonrider.com/2016/01/01/extract-app-icon-in-android/ 

try { 

Drawable icon = context.getPackageManager().getApplicationIcon(ai); 
Log.d("tag_name", "ICON" + icon);} 
catch (Exception e){} 

回答

2

首先接收所有應用程序使用此代碼:

List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA); 

然後排序與此代碼軟件包列表:

Collections.sort(packages, new Comparator<PackageInfo>() { 
       @Override 
       public int compare(PackageInfo p1, PackageInfo p2) { 
        return Long.toString(p2.firstInstallTime).compareTo(Long.toString(p1.firstInstallTime)); 
       } 
      }); 

然後你就可以收到最新安裝的應用的應用包名稱這樣:

packages.get(0).packageName 
+0

非常感謝!這工作:) –

相關問題