22

Stworzyłem aplikację, która tworzy i przechowuje pliki na sdcard. Czy istnieje sposób na powiązanie folderu z aplikacją w celu usunięcia wszystkich plików, gdy użytkownik uruchomi odinstalowanie na urządzeniu z Androidem?Android - Zachowaj lub usuń pliki utworzone przez aplikację po odinstalowaniu

+0

Zastosowanie 'NQ Komórka Security' dzwoni działalność w odinstalowywania spojrzeć na http://i.imgur.com/ Fos9N.png, http://i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png i pytanie http://stackoverflow.com/questions/10219328/how-to- show-an-activity-before-my-app-is-uninstalled-android –

Odpowiedz

10

Aplikacja nie może rozpoznać, że jest odinstalowywana (bez modyfikowania jądra). Wszystkie pliki utworzone w data/data/your.app.package są automatycznie usuwane po instalacji.

Nie sądzę, aby cokolwiek zostało usunięte z sdcard. Możesz zrobić szybki test i to odkryć.

Innym podejściem może być posiadanie innej aplikacji, która sprawdza, czy ta aplikacja jest zainstalowana, czy też nie. Jeśli nie, może wykonać prace porządkowe.

+0

Aplikacja 'NQ Mobile Security' wywołuje działanie w Deinstalacji spójrz na http://i.imgur.com/Fos9N.png, http: //i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png i pytanie http://stackoverflow.com/questions/10219328/how-to-show-an-activity-before-my-app-is-uninstalled-android –

+0

W przypadku aplikacji skompilowanych dla systemu Android 6.0 lub nowszego oraz włączonych kopii zapasowych w chmurze zobacz odpowiedź Y.S. – dermatthias

23

Wydaje się, że nastąpiły pewne zmiany od 2009 roku :).

Z documentation:

Jeśli używasz API poziom 8 lub większy, użyj getExternalCacheDir() do otwarcia pliku, który reprezentuje zewnętrznego katalog przechowywania którym należy zapisać pliki cache. Jeśli użytkownik odinstalowuje aplikację, te pliki zostaną automatycznie usunięte. Jednak w okresie użytkowania aplikacji należy zarządzać tymi plikami pamięci podręcznej i usuwać te, które nie są potrzebne w celu zachowania przestrzeni plików .

Jeśli używasz API Level 7 lub niższy, użytkowania getExternalStorageDirectory() do otwarcia pliku, który reprezentuje pierwiastek z pamięci zewnętrznej, a następnie napisać dane pamięci podręcznej w następującym katalogu:

/Android/data // cache/ Jest to nazwa pakietu w stylu Java: , na przykład "com.example.android.app".

0

jeśli chcesz przechowywać dużą ilość danych, a następnie zapisać go w pamięci zewnętrznej z nazwą ścieżki pliku, takie jak

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

gdzie nazwa pakietu to nazwa pakietu aplikacji np com.think.abc

4

Nawet jeśli korzystam z getExternalCacheDir(), zauważyłem, że katalog pamięci podręcznej, który jest nazwą pakietu Twojej aplikacji, nie jest automatycznie usuwany, tak jak jest napisane w dokumentacji systemu Android, a przynajmniej nie w Lenovo A1. Może to być trochę naiwne, ale możesz chcieć wyczyścić poprzednie dane podczas ponownej instalacji. Tam możesz sprawdzić, czy Twoja aplikacja została odinstalowana lub jest instalowana po raz pierwszy - przechowujesz wartość, być może boolowską, używając wspólnych preferencji. Może to być coś takiego:

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(); 
} 

ten sposób za każdym razem przebiegów aplikacji, sprawdza, czy jest to pierwszy raz, że to działa. Po usunięciu aplikacji zostaną udostępnione preferencje dotyczące aplikacji. Następnym razem, gdy zostanie on zainstalowany, if (...) będzie prawdą i możesz tam posprzątać.

Wiem, że to nie odpowiada bezpośrednio na pytanie i nie jest miło pozostawić nieużywane dane na urządzeniach użytkowników, ale myślę, że może to być alternatywa dla próby oczyszczenia, gdy aplikacja jest usuwana, co jest rozsądne ale wydaje się niemożliwe.

+0

Nie wiem, czy nie zrozumiałem, ale wydaje mi się, że będzie działać zgodnie z oczekiwaniami, jeśli użyjesz go od czasu wydania pierwszej aplikacji, czy zgadzasz się? –

3

wydaje, ponieważ to nie jest właściwa soltuion, Context.getExternalFilesDir():

Zwraca bezwzględną ścieżkę do katalogu w systemie plików zewnętrznym (który jest gdzieś na Environment.getExternalStorageDirectory()) gdzie aplikacja może umieść trwałe pliki, które posiada. Pliki te są prywatne dla aplikacji i zwykle nie są widoczne dla użytkownika jako nośnik .

To jak getFilesDir(), że pliki te zostaną usunięte podczas aplikacja jest odinstalowane

3

Dodaję ten ponieważ istniejące odpowiedzi są nieaktualne w 2017 Chociaż prawdą jest, że istnieje to nie jest oddzwanianie po odinstalowaniu aplikacji, niektóre mechanizmy zostały przewidziane do zachowania danych aplikacji po odinstalowaniu.

  • Ponieważ Android 6.0 (API 23), funkcja Auto Backup for Apps został wprowadzony, co pozwoliło deweloperom albo zezwolenie lub nie dopuścić do automatycznego tworzenia kopii zapasowych aplikacji. Od momentu utworzenia API 23 kopia zapasowa jest domyślnie włączona.

  • Dla pliku manifestu wprowadzono dwa nowe znaczniki application: android:allowBackup i android:fullBackupContent.

Aby zrezygnować z automatycznego tworzenia kopii zapasowych, dodać android:allowBackup="false" do pliku manifestu pod tagiem application. Wartość "true" automatycznie zapisuje udostępnione preferencje i bazy danych w chmurze, a także other files.

Po drugie, można mieć bardzo specyficzny o plikach chcesz obejmują lub wykluczyć do usunięcia lub zakonserwowania na deinstalacji z tagiem android:fullBackupContent. Ten atrybut wskazuje na plik XML zawierający reguły tworzenia kopii zapasowych. Utwórz plik konfiguracyjny XML w katalogu res/xml/ o następującej składni:

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

Tu można dodać konkretne typy plików, aby włączyć lub wyłączyć i związane z nimi ścieżki. Dodaj znacznik android:fullBackupContent = "@xml/my_backup_rules" do pliku manifestu pod tagiem application.

Podane pliki zostaną zapisane na Dysku Google na podstawowym koncie e-mail urządzenia. Dane zostaną przywrócone po ponownym zainstalowaniu , pod warunkiem że poniższe ustawienie zostanie włączone przez użytkownika::

Settings -> Backup & Reset -> Automatic Restore.

Należy również zauważyć, że danych kopii zapasowej nie może odczytać użytkownik ani inne aplikacje urządzenia.

enter image description here

To samo można również uzyskać z aplikacji Dysk Google stąd:

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

enter image description here

Warto zauważyć, że jeśli w tym samym podstawowej konta Google jest używany dla wielu urządzeń, a następnie tworzone są kopie zapasowe wielu urządzeń. Kopie zapasowe dla poszczególnych urządzeń można uzyskać tutaj:

Google Drive -> Settings -> Backups

Google Drive -> Settings -> Backups

+1

Świetna odpowiedź. W dokładnie tego szukał. W 2017 r. (Lub od wersji Androida 6.0) jest to poprawna odpowiedź. – dermatthias

+1

@ Y.S. idealna odpowiedź: D –