//我最后在这里使用了测试代码
我很乐意回答两个问题:
1。)目前关于读写文件权限的官方政策是什么?
2.。)如何在/ sdcard上获得用户工作文件的读写权限?
我觉得这是所有bout API版本而不是单位类型。
在开发不同的Android版本以及处理它们的方式时,看起来权限已经发生了很大的变化。关于它们的文章/问题已经传播了很多年,显然大多数都已经过时和弃用,但仍然存在于stackoverflow环境中。这些更改可以在版本评论等中阅读。但即使是主要的开发人员支持网站似乎也已过时并被弃用,如http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
我正在使用C中正在运行的Win32程序在Android中创建一个簿记会计应用程序。新用户Android界面。
对于这种类型的应用程序,当然用户文件将在用户之间传输,如文字处理文件。应该通过ftp或html下载,但也可以将Android设备连接到PC,然后拖放它们。事实上,许多应用程序都会像/ sdcard和/ sdcard / download位置一样读写文件。
没有/ sdcard写/读,Android OS下无法使用大量的应用程序类型。当Android x86项目能够为便宜的上网本配备键盘,没有触摸屏和Android操作系统以及非常流畅的用户和销售机会(真正的Windows杀手替代品)时,这一点尤为奇怪。而且非常高效的旅行办公工具。有一些好的MS Office竞争对手,只有时间问题,直到有官方的Android MS Office可用。互联网,社交媒体和邮件在那里,人们还会使用什么?
使用10.1 WXGA平板电脑仿真器API-23和三星TAB3 7'平板电脑API-17。
在内部存储上运行它在读取,写入和删除文件方面没有问题(但是从外部将测试用户数据文件传输到内部存储器的问题很大(但是模拟器允许它使用adb命令))。
在外部存储上运行可以读取文件但不能写入文件。
在/ sdcard / download或/ sdcard文件夹上运行模拟器(API-23)拒绝读写,但TAB3允许读取但拒绝写入。
一个值得注意的事情是,一旦可以读取,就可以通过file.delete()调用删除被拒绝写入(覆盖或附加)的文件?
我从jni ANSI C文件函数开始。但是为了使过去使用Android体验变得更简单和容易,我改为使用Java代码来测试。这是我认为的一般环境问题,而不是jni / C问题。
当然有一个明确的声明:uses-permission android:name =" android.permission.WRITE_EXTERNAL_STORAGE"
首先,我有三次调用来获取存储SD卡,内部和外部存储以供不同的应用程序使用。然后将它们与本地文件名组合。通过更改存储,我可以测试不同测试单元/模拟器上的每个环境。
分步测试: - 写一个文件 - 阅读文件 - 删除文件 - 测试权限 - 将它们记录在放在测试单元屏幕上的文本数组中
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
File sdcard = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File internal = getFilesDir();
File external = getExternalCacheDir();
File file = new File(internal ,"hello.txt");
String string = "Hello world!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(file.getName(),0);
outputStream.write(string.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
StringBuilder text = new StringBuilder();
text.append(file);
text.append('\n');
if(isExternalStorageWritable())
text.append("Writeable");
else
text.append("Non-Writeable");
text.append('\n');
if(isExternalStorageReadable())
text.append("Readable");
else
text.append("Non-Readable");
text.append('\n');
String permission = "android.permission.WRITE_EXTERNAL_STORAGE";
if(checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED)
text.append("WRITE_EXTERNAL_STORAGE");
else
text.append("Non-WRITE_EXTERNAL_STORAGE");
text.append('\n');
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
br.close();
}
catch (IOException e) {
//You'll need to add proper error handling here
}
file.delete();
tv.setText(text.toString());
setContentView(tv);
}