Pergunta

Eu criei uma aplicação que cria e armazena arquivos para sdcard. Existe uma maneira de vincular a pasta com a aplicação, a fim de apagar todos os arquivos quando o usuário executa desinstalar no dispositivo android?

Foi útil?

Solução

Não há nenhuma maneira para seu aplicativo para saber que ele está sendo desinstalado (sem modificar o kernel). Todos os arquivos criados no data/data/your.app.package é excluído automaticamente após a desinstalação do aplicativo.

Eu não acho nada é eliminado do sdcard. Você pode fazer um teste rápido e descobrir isso.

Outra abordagem poderia ser a de ter outro aplicativo que verifica se este aplicativo é instalado ou não. Se não, ele pode fazer o trabalho de limpeza.

Outras dicas

Parece que tem havido alguns desenvolvimentos desde 2009:.)

A partir da documentação :

Se você estiver usando API nível 8 ou maior, use getExternalCacheDir() para abrir um arquivo que representa o diretório de armazenamento externo onde você deve salvar arquivos de cache. Se o usuário desinstala sua aplicação, estes arquivos serão apagados automaticamente. No entanto, durante a vida de seu aplicação, você deve gerenciá-los arquivos de cache e remover aquelas que não são necessários a fim de preservar arquivo de espaço.

Se você estiver usando API Nível 7 ou inferior, usar getExternalStorageDirectory() para abrir um arquivo que representa a raiz do armazenamento externo, gravação, em seguida, seus dados de cache da seguinte diretório:

/ Android / data // cache / O é o seu estilo de Java nome do pacote, tais como "Com.example.android.app".

Mesmo quando se utiliza o getExternalCacheDir(), tenho visto que o diretório de cache, que é o nome do pacote do seu aplicativo, não é removido automaticamente como que diz na documentação Android, pelo menos não na Lenovo A1. Poderia ser um pouco ingênuo, mas você pode querer limpar os dados anteriores durante a re-instalar. Lá, você pode descobrir se seu aplicativo foi un-instalado ou está sendo instalado pela primeira vez - você armazenar um valor, talvez um boolean, usando as preferências compartilhadas. Pode ser algo como:

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

Desta forma, toda vez que o aplicativo é executado, ele verifica se é a primeira vez que é executado. Quando o aplicativo é removido, assim o preferências para o aplicativo compartilhado. Então, da próxima vez que estiver instalado, o if (...) será verdadeiro e você pode fazer alguns até limpo lá.

Eu sei que isto não responde a pergunta diretamente e não é bom para deixar os dados não utilizados nos dispositivos dos usuários, mas eu acho que poderia ser uma alternativa para tentar limpar quando um aplicativo está sendo removido, o que é sensato, mas parece impossível.

Eu estou adicionando isso porque as respostas existentes estão desatualizados em 2017. Embora seja verdade que não há retorno na desinstalação de aplicativos, alguns mecanismos foram fornecidos para preservar dados de aplicativos além de desinstalação.

  • Desde Android 6.0 (API 23), o Auto backup para Apps recurso foi introduzido, o que permitia aos desenvolvedores permitir ou impedir a cópia de segurança aplicação automática. A partir de API 23 backup é ativado por padrão.

  • Duas novas etiquetas application foram introduzidos para o arquivo de manifesto:. android:allowBackup e android:fullBackupContent

Para sair de backup automático, adicione android:allowBackup="false" para o arquivo de manifesto sob a tag application. Um valor de "verdadeiro" irá automaticamente salvar preferências compartilhados e bancos de dados para a nuvem, bem como outros arquivos .

Em segundo lugar, você pode ser muito específico sobre os arquivos que você deseja incluir ou excluir para exclusão ou preservação na desinstalação com a tag android:fullBackupContent. Este atributo aponta para um arquivo XML que contém as regras de backup. Criar um arquivo de configuração XML no diretório res/xml/ com a seguinte sintaxe:

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

Aqui você pode adicionar os tipos de arquivo específico para incluir ou excluir e seus caminhos associados. Adicione a tag android:fullBackupContent = "@xml/my_backup_rules" para o arquivo de manifesto sob a tag application.

Os arquivos especificados serão copiados para o Google Drive com a conta de e-mail principal do dispositivo. Os dados seriam restaurados em re-instalar forneceu a seguinte configuração é habilitado pelo usuário :

Settings -> Backup & Reset -> Automatic Restore.

Ele também deve-se notar que os dados de backup não pode ser lido pelo usuário ou outros aplicativos no dispositivo.

enter descrição da imagem aqui

O mesmo também pode ser acessado a partir do aplicativo Google Drive a partir daqui:

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

enter descrição da imagem aqui

É interessante notar que, se o mesmo principal conta do Google é usado para vários dispositivos, em seguida, vários backups de dispositivos são criados. Os backups para dispositivos individuais podem ser acessados ??a partir daqui:

Google Drive -> Settings -> Backups

Google drive - loading= Configurações -> Backups">

parece desde então há uma soltuion adequada, Context.getExternalFilesDir () :

Retorna o caminho absoluto para o diretório no sistema de arquivos externo (Que está em algum lugar em Environment.getExternalStorageDirectory ()) onde o aplicativo pode colocar arquivos persistentes que possui. Esses arquivos são privada para as aplicações, e não normalmente visível para o usuário como mídia.

Isto é como getFilesDir () em que esses arquivos serão apagados quando o aplicativo é desinstalado

Se você deseja armazenar grandes volumes de dados, em seguida, armazená-lo em armazenamento externo com o nome caminho do arquivo como

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

onde nome do pacote é o nome do pacote de aplicativo por exemplo com.think.abc

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top