清单中存在时未授予运行时权限(Android)[重复]

Posted

技术标签:

【中文标题】清单中存在时未授予运行时权限(Android)[重复]【英文标题】:RunTime Permission Not Granted When It Exists In Manifest(Android) [duplicate] 【发布时间】:2018-12-10 11:08:22 【问题描述】:

我正在尝试将 csv 文件保存到我的手机中,而我的目标 SDK 级别为 26,因此我尝试在运行我的应用程序时检查运行时权限。即使我在清单文件中提供了必要的权限,在我的活动中检查此权限也会返回 false。我该如何解决这个问题?

清单文件的开始

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.something">

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

活动相关部分如下

   public void saveToExcel() throws IOException 
            String baseDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
            String fileName = "AnalysisData.csv";
            String filePath = baseDir + File.separator + fileName;
            File file = new File(filePath);
            CSVWriter writer = null;
            String[] data = "Hold Time", "Down-Down Time", "Up-Down Time";
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.READ_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED
                    && ContextCompat.checkSelfPermission(this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) 
                if (file.exists() && !file.isDirectory()) 
                    FileWriter mFileWriter = null;
                    mFileWriter = new FileWriter(filePath, true);
                    writer = new CSVWriter(mFileWriter);
                    Log.d(TAG, "saveToExcel: exist");
                 else 
                    writer = new CSVWriter(new FileWriter(filePath));
                    Log.d(TAG, "saveToExcel:do not exist");

                
                writer.writeNext(data);
                writer.close();
             else 
                Log.d(TAG, "saveToExcel: permission not granted");
            
        

【问题讨论】:

检查是不够的......您还应该询问权限 - 随时在 SO 上搜索类似问题或只是获取指南在官方 android 开发网站上 查看***.com/questions/33162152/… 【参考方案1】:

从 Android 6 及更高版本,您需要询问运行时权限:https://developer.android.com/training/permissions/requesting

在您的情况下,您需要询问 WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE 的运行时权限

【讨论】:

以上是关于清单中存在时未授予运行时权限(Android)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

尝试获取 READ_PHONE_STATE 权限时未显示 Android 权限对话框

在用户授予接收推送通知的权限时未调用 didRegisterForRemoteNotificationsWithDeviceToken

通过 Spring security ldap 对用户进行身份验证时未授予任何权限错误

在Android中锁定屏幕时未调用BroadcastReceiver

Android M及以上位置课程和位置精细返回权限授予true

启动时的运行时权限