如何在定位android O(26)8.0后拥有读取+写入外部存储

时间:2018-04-11 12:35:02

标签: android android-permissions android-8.0-oreo android-8.1-oreo

在定位之前,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);

2 个答案:

答案 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" 

申请