2014-02-24 60 views
4

我想清理我的應用程序在UnInstalling應用程序上創建的垃圾。在android中卸載應用程序時調用廣播接收器

使用清單文件: -

新增清單文件:

<receiver android:name="com.netdoers.com.ui.CleanReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_REMOVED" > 
      </action> 
      <data android:scheme="package"/> 
     </intent-filter> 
    </receiver> 

創建接收器捕捉到BroadCast Event

public class CleanReceiver extends BroadcastReceiver 
{ 
    public void onReceive(Context context, Intent intent) { 
    CustomToast.showToastMessage(context, "Uninstalling Application"); 
    Log.e("Uninstall", "CleanReceiver Called"); 
    } 
} 

在Java代碼: -

BroadCastReceiver br = new CleanReceiver(); 
IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); 
intentFilter.addDataScheme("package"); 
registerReceiver(br, intentFilter); 

但是在卸載應用程序時,接收器永遠不會被調用。

在卸載應用程序的事件時,Java和Manifest都不會調用Receiver。如何在卸載應用程序時捕獲廣播事件?

+0

@nKn:我試過這個解決方案,但它沒有爲我工作:/ –

+0

@nKn:由於這些Action.PACKAGE_REMOVED是基於系統的廣播tht的y它沒有被調用或什麼? –

+2

這看起來不像重複。 另一個問題不是關於我自己的應用程序。 –

回答

2

您可以獲取其他任何已卸載的軟件包的廣播,但絕不會用於您自己的軟件包。

原因

這是因爲,當你在自己的應用程序註冊卸載接收器,當應用被卸載後,該應用程序被卸載之前註冊的BroadcastReceiver已被卸載,所以它自己的卸載事件不會被該BroadcastReceiver收到。

只是想到一個情況,說廣播已註冊(即一個短信接收器)和應用程序即將卸載。現在短信進來廣播檢測到它,但廣播的應用程序(它創建它)已卸載。可能會導致系統不一致。所以可能是它發生的原因。

+0

那麼如何預防這種情況呢?我長期以來一直堅持這些。因爲我使用Manifest文件來註冊廣播,那麼在卸載實際應用程序之前它是如何卸載的? –

+0

只是想到一個情況,說廣播已註冊(如短信接收器),應用程序即將卸載。現在廣播檢測到它,但廣播的應用程序(它創建它)已卸載。可能導致系統中的不一致。所以可能是它發生的原因。 – cafebabe1991

+0

如何避免這種情況呢?因爲它是系統保護的廣播,是否可以在卸載應用程序時廣播事件? –

相關問題