当前位置: 首页 > 知识库问答 >
问题:

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

杨赞
2023-03-14

我试图保存一个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个答案

爱茂勋
2023-03-14

在Android6和更高版本中,您需要询问运行时权限:https://developer.Android.com/training/permissions/requestion

在您的示例中,您需要询问write_external_storageread_external_storage的运行时权限

 类似资料:
  • 我已经创建了自己的android。这样我就可以使用隐藏的API调用“DisplayManager.connectWifiDisplay()”。 当我运行应用程序并调用该方法时,在通过Wifi Direct连接到显示器后, 我得到以下例外: java.lang.SecurityException:连接到wifi显示器所需的权限:用户10105和当前进程都没有android.Permission.CO

  • 在Android M(预览版)中,用户可以选择特定的应用程序并检索特定的权限。 所以我想问的是如何在运行时检查授权权限?

  • 我想使用公共外部存储在设备中写入映像。因此,我有1)在清单中写入权限标签,2)在需要时使用请求权限。但我仍然有这个例外:。 为什么?我已经读过了https://developer.android.com/guide/topics/permissions/overview#normal-很危险,但这不能回答我的问题。 我已授予Android设备的存储权限。因此,我的条件if(permissionCh

  • 我在清单中添加了对外部存储设备的写访问权限,并在我的Android手机中授予了这些权限。如果他们不存在,我甚至会在执行时要求他们。 然而,我总是得到这个例外: Java语言io。FileNotFoundException:/storage/simulated/03b3d97bd-5186-4506-97dc-9994b7ce0761(权限被拒绝) 你知道为什么吗? 在清单文件中:

  • 我是android的新手,不知道我做错了什么,这个类得到了经度和纬度并发送到另一个类,代码抛出了一个错误请告诉我该怎么做怎么做: public void onRequestPermissionsResult出错(int requestCode,String[]permissions,int[]grantResults

  • 首先,我知道这是一个重复的问题,但我已经看过了其他类似问题的答案,没有找到成功的解决方案。 我已经开发了一款应用程序,可以在我的测试设备上完美运行,这是一款运行Android L(5.0.1)的三星S4。不过,我希望这款应用程序也能在较新版本的Android上运行。 我知道Android M的请求权限已更改,因此必须在运行时请求权限,但当我尝试实现此功能时,对话框从未出现,因此从未请求所需的权限。