Android:at是文件读写文件的权限规则

时间:2015-09-07 03:16:44

标签: android file-io permissions

问题

//我最后在这里使用了测试代码

我很乐意回答两个问题:

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);
}

0 个答案:

没有答案