如何在卸载应用程序时删除数据?

时间:2011-11-16 14:13:17

标签: android service file-io android-activity android-manifest

我正在开发一个Android应用程序,它在SD卡中创建一个文件夹并存储一些图像。我想在卸载应用程序时删除该文件夹。请指导我。

3 个答案:

答案 0 :(得分:3)

简单:不可能。

当您卸载自己的应用时,目前没有可以触发的卸载事件。因此,你无法以任何方式对此做出反应。

唯一的例外:将您的数据存储在Context.getExternalFilesDir()提供的文件夹中 或Context.getExternalCacheDir()。当您的应用程序被卸载时,这些内容将被删除。

答案 1 :(得分:2)

API级别8或更高级别的

使用外部缓存目录:http://developer.android.com/guide/topics/data/data-storage.html#ExternalCache

在上面的链接

中还有使用API​​级别7和更低级别的说明

答案 2 :(得分:1)

//为此您需要运行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();
                          }

                      }
                    }
                  }
               }