web-dev-qa-db-ja.com

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

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

24
Niko Gamulin

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

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

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

13
Prashast

2009年以来いくつかの開発があったようです:)。

ドキュメント から:

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

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

/ Android/data // cache /は、「com.example.Android.app」などのJavaスタイルのパッケージ名です。

23
rony l

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

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

  • マニフェストファイルに、Android:allowBackupAndroid:fullBackupContentの2つの新しいapplicationタグが導入されました。

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

次に、必要なファイルについて非常に具体的にすることができますincludeまたはexcludeAndroid: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>

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

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

Settings -> Backup & Reset -> Automatic Restore

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

enter image description here

こちらからGoogleドライブアプリからも同じようにアクセスできます。

Google Drive -> Settings -> Auto backup for apps -> Backup and reset

enter image description here

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

Google Drive -> Settings -> Backups

Google Drive -> Settings -> Backups

6
Y.S

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になり、そこでクリーンアップを実行できます。

これは質問に直接答えることはできず、ユーザーのデバイスに未使用のデータを残すのは良いことではありませんが、アプリが削除されているときにクリーンアップを試みる代わりになる可能性があると思います。これは賢明ですが不可能に思えます。

4
Michael M

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

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

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

3
Ákos Maróy

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

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

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

0
Prachi