12

私の Android アプリが削除されたら、アプリが SD カードに作成したファイルも削除したいと思います。これらのファイルは数メガバイトを消費する可能性があり、私のアプリでしか使用できないためです。

PACKAGE REMOVED インテントを受け取ることが、これを行う場所になるようです。ただし、ブロードキャスト レシーバーが呼び出されることはありません。PACKAGE REMOVED インテントが送信される前に削除されたようです。

コードは次のとおりです。

public class UninstallReceiver は BroadcastReceiver を拡張します {
 @オーバーライド
 public void onReceive(コンテキスト コンテキスト、インテント インテント) {
  文字列アクション = インテント.getAction();
  Log.i("U", "アクション" + アクション);
  等
 }
}

そして、マニフェストで:

<アプリケーション Android:debuggable="true"
  android:icon="@drawable/icon"
  android:label="@string/app_name">

  <レシーバー android:name="com.boom.UninstallReceiver">
   <インテントフィルター>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
     <data android:scheme="パッケージ" />
   </インテントフィルター>
  </受信者>
4

3 に答える 3

13

ドキュメントには次のように記載されています。

削除されるパッケージは、このインテントを受け取りません。

Android 2.2 が追加されましたgetExternalFilesDir()。これは、アプリケーションのアンインストール時に Android が自動的にクリーンアップする外部ストレージ上の場所を指します。ただし、これは Android 2.2 のみであり、現時点では特にうまく機能しないという兆候があります。ただし、2011年は注意が必要です。

それを超えて、実際にできることは、ユーザーがクリーンアップを行うためのメニュー選択をどこかに提供し、ユーザーがあなたをアンインストールする前にそれを使用することを期待することだけです.

于 2010-09-05T23:14:48.183 に答える
-6

マニファストに権限を追加する必要があります。

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
于 2012-09-27T12:41:22.243 に答える