在下面针对 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);