如何解决我正在为我的应用制作一个类似 UI 的图库,如果我的目标是 Android 11,我需要请求什么权限?
我正在使用 expo-secure-store
接收存储在设备上的所有图像的 MediaStore
使用
id
然后我像这样在我的片段的 private fun getImageUris(): List<Uri> {
val uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val projection = arrayOf(MediaStore.Images.Media._ID)
val mCursor = requireActivity().contentResolver.query(
uri,projection,null,null
)
val imageUris = mutableListOf<Uri>()
while (mCursor?.moveToNext() == true) {
val columnIndex = mCursor.getColumnIndex(MediaStore.Images.Media._ID)
val imageId = mCursor.getInt(columnIndex)
val currentImageUri = Uri.withAppendedPath(uri,imageId.toString())
imageUris.add(currentImageUri)
}
mCursor?.close()
return imageUris
}
中请求许可:
onViewCreated()
我希望在打开应用程序(并创建我的片段)后立即请求存储权限,然后它应该在我的回收站视图中加载手机上的所有图像(我正在使用滑行)。但它并没有像预期的那样工作,而是
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
binding = FragmentMainBinding.bind(view)
when {
isStoragePermissionGranted -> {
binding.recyclerView.adapter = RecyclerViewAdapter(getImageUris())
}
shouldShowRequestPermissionRationale -> {
Toast.makeText(mainActivity,"Please grant storage permission",Toast.LENGTH_SHORT).show()
requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),STORAGE_PERMISSION_REQUEST_CODE)
}
else -> {
Toast.makeText(mainActivity,"Permission not granted. Images cannot be shown.",Toast.LENGTH_SHORT).show()
}
}
}
显示吐司消息
解决方法
要快速解决此问题,您可以将其添加到 <application>
android:requestLegacyExternalStorage="true"
阅读有关 Android 11 here 的存储更新
,问题出自@blackapps
shouldShowRequestPermissionRationale -> {
Toast.makeText(mainActivity,"Please grant storage permission",Toast.LENGTH_SHORT).show()
requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),STORAGE_PERMISSION_REQUEST_CODE)
因为 shouldShowRequestPermissionRationale
仅在“拒绝并不再询问”选项显示并弹出权限时才为真,并且该选项仅在第一次请求权限后出现(这从未发生过因为要实现这一点,shouldShowRequestPermissionRationale
必须为真)。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
use above permission and in application write below code:
<application
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。