0

我正在使用路径将我的一些应用数据(例如视频)存储在外部缓存目录中

android.os.Environment.getExternalStorageDirectory(),"/Android/data/"+getPackag‌​eName()+"/cache/"

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

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

4

1 回答 1

4

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

/Android/data/<package_name>/files/

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

有关更多详细信息,请查看这篇文章

编辑:

检查一下,我刚刚/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来自sdcard/android/data/com.example.testdir.

于 2013-04-04T06:23:21.747 回答