2012-01-18 25 views
10

我有一個應用程序正在保存安裝在設備上的內部開發的應用程序的日誌。在安裝了Intent.PACKAGE_ADDED廣播接收器被調用,使用下面的代碼記錄了軟件包名稱:如何查找使用Intent時已被卸載的軟件包名稱.ACTION_PACKAGE_REMOVED

public class NewInstallReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationInstalled(packages); 
    } 
} 

我面對的使用Intent.PACKAGE_REMOVED廣播接收機時的問題,所有參考包通過唯一的ID(UID)返回空信息(正如您所期望的,因爲它已被卸載)。我有一個暫時的解決方案,但它不是很優雅,下一個版本我希望有更清晰的代碼。的代碼應該如何工作的一個例子:

public class RemoveApplicationReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationRemoved(packages); 
    } 

} 

因此,要回顧一下,問題是:

如何,程序已被刪除後,我可以在意向廣播接收器參考軟件包的名稱。 PACKAGE_REMOVED。

感謝

+0

我也從getPackagesForUid(uid)中獲取null。我想要的是獲取當前用戶安裝的所有軟件包的列表。任何人都可以提供一些輸入嗎? – Pratik 2013-09-26 20:44:45

回答

13

包名是你BroadcasReceiver得到了意向書,使用「的getData()」功能,還有就是安裝/卸載程序包的ComponentMame。

+12

工作很好...只需使用getData()。getSchemeSpecificPart()。謝謝 – Kennifer 2012-01-18 14:38:25

+4

當我打印出intent.toString()我可以看到包名,但是當我使用intent.getData()。getSchemeSpecificPart()時,我得到一個空字符串。我究竟做錯了什麼? – gonzobrains 2013-06-05 18:08:15

+3

@gonzobrains您可能沒有設置該計劃?在清單中,它應該看起來像這樣:''「。 – 2015-07-14 16:53:51