在定位之前,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,系统立即授予该权限 没有提示用户。
我尝试只询问读取权限( dialog-> allow ),后来我要求写入权限(没有对话框 - >仍未授予)它没有& #39; t work。
清单:
<!-- 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);
答案 0 :(得分:2)
好的,所以我终于知道发生了什么,看了https://stackoverflow.com/a/49709872/4858147后我终于能够继续了。
问题在于HockeyApp有清单:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
并且在合并清单后,app中没有WRITE_EXTERNAL_STORAGE权限。由于android系统中的一个错误,该应用程序正常工作
在Android 8.0(API级别26)之前,如果某个应用请求了权限 在运行时并且授予了权限,系统也是错误的 授予应用程序其他属于同一权限的权限 权限组,以及在清单中注册的。
之前有效,感谢Android系统中的错误,因为我们要求读取权限
我所做的只是在我的主应用程序清单中我改变了
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:remove="android:maxSdkVersion" />
答案 1 :(得分:0)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:remove="android:maxSdkVersion"/>
并添加
android:requestLegacyExternalStorage="true"
申请