2016-10-23 12 views
0

いつ私のアプリがアンインストールされているかを検出する必要があります。そのために、私はlogcatがUNINSTALL_PACKAGEインテントを送信するのを見てきました。私はそれを単に既存のブロードキャストレシーバに追加しました。しかし、それだけでそれをキャッチしない、私が聞いている他の意図、TIME_TICKは、完全に動作します。どうして?Android:BroadcastReceiver:UNINSTALL_PACKAGEインテント

現在使用コード:

private IntentFilter intentFilter; 

static { 
    intentFilter = new IntentFilter(); 
    intentFilter.addAction(Intent.ACTION_TIME_TICK); 
    intentFilter.addAction(Intent.ACTION_UNINSTALL_PACKAGE); 
} 

private final BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 
     if (action.equals(Intent.ACTION_UNINSTALL_PACKAGE) { 
      Log.e("App", "Uninstalling"); 
     } else if (action.equals(Intent.ACTION_TIME_TICK){ 
     // this works 
     } 
    } 
}; 
+0

[パッケージのインストールとアンインストールのイベントを受信する](http://stackoverflow.com/questions/7470314/receiving-package-install-and-uninstall-events)の可能な複製 – Beloo

答えて

1

私はこれを行うにはサポートされている方法は、明らかなセキュリティ上の理由から、ありません私のアプリが

をアンインストールしているときを検出する必要があります。

しかし、それはちょうどそれに

ACTION_UNINSTALL_PACKAGE is an activity actionをキャッチしません。 Android搭載端末のいずれもブロードキャストとして送信する必要はありません。したがって、BroadcastReceiverで聞くことはできません。

0

私はlogcatがUNINSTALL_PACKAGEインテントを送信するのを見ましたが、私はそれを既存のブロードキャストレシーバに追加しました。しかし、それだけでそれをキャッチしない、私が聞いている他の意図、TIME_TICKは、完全に動作します。どうして?

アプリケーションがアンインストールされるたびに、Android OSはそのアプリケーションに関連するすべてのコンポーネントを破棄し、無料のメモリ&リソースを削除します。 Uninstall放送受信者の意図は、あなたのアプリではない他のアプリのアンインストールイベントを聴くことでした。

あなたのアプリのイベントuninstallをキャプチャしたい場合は、Googleが提供する概念はありませんが、ファイルシステムの変更を監視し続ける必要があるファイルシステムのデータ変更を観察することで可能です。

この解決策は、すべての携帯電話& Androidの異なるバージョンでは機能しません。

関連する問題