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

时间:2018-07-02 09:03:28

标签: android permissions file-permissions android-permissions

我试图将一个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");
            }
        }

1 个答案:

答案 0 :(得分:0)

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

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