Как удалить данные, когда приложение удалено? - PullRequest
3 голосов
/ 16 ноября 2011

Я занимаюсь разработкой приложения для Android, которое создает папку на SD-карте и сохраняет некоторые изображения. Я хочу удалить эту папку, когда приложение удалено. Пожалуйста, ведите меня.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

Простой: невозможно.

В настоящее время не происходит событие удаления, которое вызывается при удалении вашего собственного приложения.Следовательно, вы не можете реагировать на это каким-либо образом.

Единственное исключение: Храните ваши данные в папках, предоставленных Context.getExternalFilesDir() или Context.getExternalCacheDir().Они будут удалены при удалении вашего приложения.

2 голосов
/ 16 ноября 2011

на уровне API 8 или выше, используйте каталог внешнего кэша: http://developer.android.com/guide/topics/data/data-storage.html#ExternalCache

Существует также объяснение использования API уровня 7 и ниже в приведенной выше ссылке

1 голос
/ 16 ноября 2011

// для этого вам нужно запустить BroadcasrReciver и включить получатель в ваш файл androidmanifest.xml

<receiver android:name="com.android.mobileasap.PackageChangeReceiver">
  <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>

// добавить разрешение

 <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />

// в этом PackageChangeReceiver просто удалите файл, я удаляю файл doc в этом коде ниже

public class PackageChangeReceiver extends BroadcastReceiver 
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
    //this.context=context;
    Uri data = intent.getData();
    Log.d("hi", "Action: " + intent.getAction());
    Log.d("hi", "The DATA: " + data);

    String action=intent.getAction();

    if(Intent.ACTION_PACKAGE_REMOVED.equalsIgnoreCase(action))
    {

         String PATH = Environment.getExternalStorageDirectory() + "/mycontent_download/"; 
           File file = new File(PATH);

           if (file.exists())
           {
              String listOfFiles [] = file.list();
               if (listOfFiles!=null)
               {
                  if (listOfFiles.length>0)
                  {
                      int size = listOfFiles.length;
                      for (int i=0; i<size; i++)
                      {
                          if (listOfFiles[i].substring(listOfFiles[i].length()-4, listOfFiles[i].length()).equalsIgnoreCase(".doc"))
                          {
                              File f1 = new File(PATH+listOfFiles[i]);
                              f1.delete();
                          }

                      }
                    }
                  }
               }
...