Android-アンインストール時にアプリケーションによって作成されたファイルを保持または削除します

StackOverflow https://stackoverflow.com/questions/1222269

質問

sdcardにファイルを作成して保存するアプリケーションを作成しました。ユーザーがAndroidデバイスでアンインストールを実行したときにすべてのファイルを削除するために、フォルダーをアプリケーションにバインドする方法はありますか?

役に立ちましたか?

解決

(カーネルを変更せずに)アプリケーションがアンインストールされていることを知る方法はありません。 data / data / your.app.package で作成されたすべてのファイルは、アプリケーションのアンインストール時に自動的に削除されます。

SDカードから何も消去されていないと思います。簡単なテストを行って、それを見つけることができます。

別のアプローチとして、このアプリケーションがインストールされているかどうかを確認する別のアプリケーションを使用することができます。そうでない場合は、クリーンアップ作業を実行できます。

他のヒント

2009年以降、いくつかの開発が行われているようです:

ドキュメントから:

  

APIレベル8を使用している場合、または   さらに、 getExternalCacheDir()を使用して   を表すファイルを開きます   外部ストレージディレクトリ   キャッシュファイルを保存する必要があります。ユーザーが   アプリケーションをアンインストールします、これら   ファイルは自動的に削除されます。   しかし、あなたの人生の間に   アプリケーション、これらを管理する必要があります   ファイルをキャッシュし、それらを削除します   保存するために必要ありません   ファイルスペース。

     

APIレベル7以下を使用している場合、    getExternalStorageDirectory()を使用して   ルートを表すファイルを開きます   外部ストレージの   以下のキャッシュデータ   ディレクトリ:

     

/ Android / data // cache /   あなたのJavaスタイルです   次のようなパッケージ名   " com.example.android.app"。

getExternalCacheDir()を使用しても、アプリのパッケージ名であるキャッシュディレクトリは、少なくともAndroidのドキュメントに記載されているように自動的に削除されないことがわかりました。 Lenovo A1。少し単純かもしれませんが、再インストール中に以前のデータをクリーンアップすることもできます。そこで、アプリがアンインストールされたのか、初めてインストールされたのかを調べることができます-共有設定を使用して、値(おそらくブール値)を保存します。次のようになります:

SharedPreferences sharedPrefs = getSharedPreferences(INSTALL_PREFS, MODE_PRIVATE);
if(sharedPrefs.getBoolean("AppInstalled", false) == false){
    //DELETE APP DIRECTORY
    SharedPreferences.Editor editor = sharedPrefs.edit();
    editor.putBoolean("AppInstalled", true);
    editor.commit();
}

この方法では、アプリが実行されるたびに、初めて実行されるかどうかがチェックされます。アプリが削除されると、アプリの共有設定も削除されます。その後、次回インストールされたときにif(...)がtrueになり、クリーンアップを実行できます。

これは質問に直接答えず、ユーザーのデバイスに未使用のデータを残すのは良くないことはわかっていますが、アプリが削除されたときにクリーンアップしようとする代替策になると思いますが、これは賢明ですが不可能のようです。

これは、2017年に既存の回答が古いため追加します。 アプリのアンインストール時にコールバックがないことは事実ですが、アンインストール後もアプリのデータを保持するためのメカニズムがいくつか提供されています。

  • Android 6.0(API 23)以降、 の自動バックアップ アプリ 開発者が自動アプリケーションバックアップを許可または禁止できる機能が導入されました。 API 23現在、デフォルトでバックアップが有効になっています。

  • マニフェストファイルに2つの新しい application タグが導入されました: android:allowBackup および android:fullBackupContent

    >

自動バックアップをオプトアウトするには、 application タグの下のマニフェストファイルに android:allowBackup =" false" を追加します。 「true」の値共有設定とデータベース、および他のファイルをクラウドに自動的に保存します

2番目に、削除する 含める または 除外する するファイルについて詳細に指定するか、 android:fullBackupContent タグによるアンインストール時の保存。この属性は、バックアップ規則を含むXMLファイルを指します。次の構文を使用して、 res / xml / ディレクトリにXML構成ファイルを作成します。

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
    <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
</full-backup-content>

ここで、含めるまたは除外する特定のファイルタイプと、それらに関連付けられたパスを追加できます。 android:fullBackupContent =&quot; @ xml / my_backup_rules&quot; タグを、マニフェストファイルの application タグの下に追加します。

指定されたファイルは、デバイスのプライマリメールアカウントでGoogleドライブにバックアップされます。データは再インストール時に復元されます次の設定がユーザーによって有効になっている場合

設定-&gt;バックアップとリセット-&gt;自動復元

バックアップデータは、ユーザーまたはデバイス上の他のアプリケーションでは読み取れないことに注意してください。

ここに画像の説明を入力してください

こちらからも、Googleドライブアプリからアクセスできます。

Googleドライブ-&gt;設定-&gt;アプリの自動バックアップ-&gt;バックアップとリセット

ここに画像の説明を入力してください

複数のデバイスに同じプライマリ Googleアカウントが使用されている場合、複数のデバイスバックアップが作成されることに注意してください。個々のデバイスのバックアップには、次からアクセスできます。

Googleドライブ-&gt;設定-&gt;バックアップ

 Googleドライブ- loading=設定->バックアップ ">

それ以来、適切な解決策があるようです Context.getExternalFilesDir()

  

外部ファイルシステム上のディレクトリへの絶対パスを返します   (Environment.getExternalStorageDirectory()のどこかにあります)   アプリケーションは、所有する永続ファイルを配置できます。これらのファイルは   アプリケーション専用であり、通常はユーザーには表示されません   メディア。

     

これはgetFilesDir()と似ていますが、これらのファイルは次の場合に削除されます   アプリケーションがアンインストールされます

大きなデータを保存する場合は、次のようなファイルパス名で外部ストレージに保存します

Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"

ここで、パッケージ名はアプリのパッケージ名です。例:com.think.abc

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top