4

在下面针对 android O 代码之前工作得很好。设置 targetApi=27 (8.1) 后,它停止工作。

context.requestPermissions(new String[]{
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        requestCode);

我看到了一个我们都知道的权限对话框,我很高兴允许 App 访问设备上的照片媒体和文件。

并在onRequestPermissionResult()其中返回

android.permission.READ_EXTERNAL_STORAGE == 0, 
android.permission.WRITE_EXTERNAL_STORAGE == -1

我按照这个答案https://stackoverflow.com/a/48353465/4858147没有用。

当我在寻找解决方案时,发现了这个https://developer.android.com/about/versions/oreo/android-8.0-changes.html#rmp读完后我并不聪明,但我 100% 确定这是造成它。

如果应用面向 Android 8.0(API 级别 26),系统此时仅授予 READ_EXTERNAL_STORAGE;但是,如果应用程序稍后请求 WRITE_EXTERNAL_STORAGE,系统会立即授予该权限而不提示用户。

我尝试只请求读取权限(对话框- >允许),后来我请求写入权限(没有对话框->仍然没有授予)它没有工作。

显现:

<!-- Internet Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- I added now, -->
<uses-permission android:name="android.permission.CAMERA"/>

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

<!-- Account Access Permission -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<!-- Vibrate used for notification updates -->
<uses-permission android:name="android.permission.VIBRATE" />

我需要这个权限

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra("output", outputDestination);
4

2 回答 2

4

好的,所以我终于知道发生了什么,在阅读了https://stackoverflow.com/a/49709872/4858147之后,我终于能够继续。

问题是 HockeyApp 在清单中有:

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

合并清单后,应用程序中没有 WRITE_EXTERNAL_STORAGE 权限。由于 android 系统中的错误,该应用程序之前可以运行

在 Android 8.0(API 级别 26)之前,如果应用程序在运行时请求权限并且权限被授予,系统也会错误地授予该应用程序属于同一权限组的其余权限,并且在显现。

由于Android系统中的错误,它之前可以工作,因为我们要求读取权限

我所做的只是在我的主应用清单中进行了更改

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    tools:remove="android:maxSdkVersion" />
于 2018-04-11T14:42:19.857 回答
0
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:remove="android:maxSdkVersion"/>

并添加

android:requestLegacyExternalStorage="true" 

申请

于 2021-06-19T17:24:15.920 回答