在卸载应用程序时从SD卡中删除应用程序数据

时间:2013-04-04 05:37:48

标签: android emulation uninstall android-sdcard

我使用路径

将一些应用数据(如视频)存储在外部缓存目录中
android.os.Environment.getExternalStorageDirectory(),"/Android/data/"+getPackag‌​eName()+"/cache/"

我的预期结果是在卸载应用程序时从此指定路径中删除数据。当我使用模拟器时这很好用。在卸载应用程序时,应用程序数据将从sdcard中删除。但是,在这种情况下,当我在真实设备上执行我的代码,即三星Galaxy S时,应用程序数据在卸载时不会被删除。请告诉我它可能的原因,我该如何克服这一点。

我也尝试在重复的线程上找到解决方案,但这没用。

1 个答案:

答案 0 :(得分:4)

如果您使用 API级别7或更低级别,请使用getExternalStorageDirectory()打开代表外部存储根目录的文件。然后,您应该将数据写入以下目录:

/Android/data/<package_name>/files/

<package_name>是您的Java风格的包名称,例如"com.example.android.app"。如果用户的设备正在运行 API级别8或更高级别并且卸载您的应用程序,则此目录及其所有内容将被删除。

有关详细信息,请查看此 artical

<强>编辑:

选中此项我只需使用以下代码在/Android/data/com.example.testdir/files/scanned.txt中创建一个文件:

package com.example.testdir;

import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void clickBtn(View v) {
        if (v.getId() == R.id.button1) {

            File sdcard = new File(Environment.getExternalStorageDirectory()
                    + "/Android/data/com.example.testdir/files/");

            if (!sdcard.exists())
                sdcard.mkdirs();

            File file = new File(sdcard, "scanned.txt");

            if (!file.exists()) {
                try {
                    file.createNewFile();
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }
        }
    }
}

我还添加了此权限

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

它从<package_name>删除我案例文件夹名称中的文件夹名称com.example.testdir {。}}。