我使用路径
将一些应用数据(如视频)存储在外部缓存目录中android.os.Environment.getExternalStorageDirectory(),"/Android/data/"+getPackageName()+"/cache/"
我的预期结果是在卸载应用程序时从此指定路径中删除数据。当我使用模拟器时这很好用。在卸载应用程序时,应用程序数据将从sdcard中删除。但是,在这种情况下,当我在真实设备上执行我的代码,即三星Galaxy S时,应用程序数据在卸载时不会被删除。请告诉我它可能的原因,我该如何克服这一点。
我也尝试在重复的线程上找到解决方案,但这没用。
答案 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
{。}}。