Android MediaStore.Images.Media.insertImage在某些设备上引发权限拒绝

Android MediaStore.Images.Media.insertImage在某些设备上引发权限拒绝,android,permissions,mediastore,Android,Permissions,Mediastore,我对代码行有问题: String path = MediaStore.Images.Media.insertImage(activity.getContentResolver(), bitmap, "feedback", null); 活动不为空,位图不为空 我得到一个错误: 0-22 11:23:59.644 29514-29527/? E/DatabaseUtils: Writing exception to parcel 10-22 11:23:59.644 29514-29527/?

我对代码行有问题:

String path = MediaStore.Images.Media.insertImage(activity.getContentResolver(), bitmap, "feedback", null);
活动不为空,位图不为空

我得到一个错误:

0-22 11:23:59.644 29514-29527/? E/DatabaseUtils: Writing exception to parcel
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=1380, uid=10136 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProvider.enforceWritePermissionInner(ContentProvider.java:679)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProvider$Transport.enforceWritePermission(ContentProvider.java:494)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProvider$Transport.insert(ContentProvider.java:258)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:163)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.os.Binder.execTransact(Binder.java:453)
10-22 11:23:59.645 1380-1467/? E/MediaStore: Failed to insert image
10-22 11:23:59.645 1380-1467/? E/MediaStore: java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=1380, uid=10136 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at android.os.Parcel.readException(Parcel.java:1599)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at android.content.ContentResolver.insert(ContentResolver.java:1231)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:962)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at com.azimo.sendmoney.a.utils.Screenshot$1.call(Screenshot.java:58)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at com.azimo.sendmoney.a.utils.Screenshot$1.call(Screenshot.java:51)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at rx.Observable.unsafeSubscribe(Observable.java:7531)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
10-22 11:23:59.645 1380-1467/? E/MediaStore:     at java.lang.Thread.run(Thread.java:818)
我在清单中拥有权限:

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

适用于5.1.1 Nexus 4。不适用于6.0 Nexus 6

你知道我怎么修吗?也许可以通过编程方式添加一些权限?

引用:

从Android 6.0(API级别23)开始,用户向 应用程序运行时,而不是安装应用程序时。这 这种方法简化了应用程序安装过程,因为用户不需要 安装或更新应用程序时需要授予权限。它也 让用户能够更好地控制应用程序的功能;例如 用户可以选择让摄像头应用程序访问摄像头,但不允许 到设备位置。用户可以随时撤销权限 时间,转到应用程序的设置屏幕

系统权限分为两类,普通和 危险:

  • 正常权限不会直接危及用户的隐私。如果你的 应用程序在其清单中列出正常权限,系统授予 权限自动删除

  • 危险的权限会给应用程序 访问用户的机密数据。如果你的应用程序列出了一个正常的 权限在其清单中,系统授予该权限 自动地如果列出了危险的权限,用户必须 明确批准你的应用程序

READ\u EXTERNAL\u STORAGE
WRITE\u EXTERNAL\u STORAGE
属于危险类别,因此当
targetSdkVersion
为23或更高时,您需要在应用程序运行时直接向用户请求权限

API级别低于23的设备没有任何变化,这就是为什么Nexus4没有任何问题

您可以在此处找到有关如何检查和请求权限的更多信息:

可能的解决方案。。。您能确认一下吗?谢谢您的快速回复。调查一下,谢谢你们。shreyash mashru的第一个评论给了我正确的线索,现在是这个解释。我设法做到了:)