【问题标题】:getExternalFilesDir permissions获取外部文件目录权限
【发布时间】:2018-09-21 13:35:50
【问题描述】:

我的应用在 Play 商店上线,我注意到调用时我没有询问权限:

File savedImagesDirectory = getBaseContext.getExternalFilesDir("SavedImages");
if(savedImagesDirectory != null) {
    if (!savedImagesDirectory.exists()) {
        if (savedImagesDirectory.mkdir()) ; //directory is created;
    }
}

奇怪的是,在没有运行时权限的情况下调用它时我没有遇到任何崩溃。我在运行 Nougat 的设备上进行了测试,文件已创建,我没有遇到崩溃。

我只在我的 Manifest 中拥有权限,但我不询问运行时权限。

我在 SO 上看到了很多答案,说在外部文件目录中创建文件夹/文件时应该询问运行时权限。


我的问题:

调用上述方法时是否应该询问运行时权限?如果是,为什么我没有遇到任何崩溃?

如果有人可以提供一个链接,我可以阅读这方面的内容,这也会很有帮助。

【问题讨论】:

标签: java android android-permissions


【解决方案1】:

虽然它返回外部存储的路径,但您不需要访问getExternalFilesDir()返回的目录的权限。

getFilesDir() 相同,但对其他应用也是公开的。

另外请注意,如果您在该目录中写入任何内容并清除应用数据或卸载应用,所有内容都将被删除。

有关更多信息,请阅读https://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String) 上的文档

【讨论】:

    【解决方案2】:
    String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
    requestPermissions(permissions, WRITE_REQUEST_CODE);
    

    使用此代码

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] 
    grantResults) {
    switch (requestCode) {
       case WRITE_REQUEST_CODE:
         if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
           //Granted.
    
    
         }
       else{
           //Denied.
         }
        break;
    }
    }
    

    【讨论】:

    • 很抱歉,但这并不能回答我的问题。我知道如何请求权限,但这不是我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2012-02-28
    • 2018-11-06
    • 2010-12-04
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多