我正在为我的flutter应用程序使用permission_handler包,并使用Pixel 8 Pro API 35模拟器,我试图请求访问设备库。这是我会遇到的几个错误:
await Permission.videos.request();
flutter:
D/permissions_handler(22246): No permissions found in manifest for: []32
-- or --
flutter:
D/com.apparence.camerawesome.cameraX.CameraPermissions(21518): _onRequestPermissionsResult: received permissions but the EventSink is closed
根据 pub.dev 上的软件包 documentation,在常见问题解答下,请求“存储”权限在 Android 13+ 上始终返回“拒绝”。因此,解决方案是使用 Permission.photos 和 Permission.videos。
READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 已弃用,因此现在使用 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO。
我还尝试了将compileSdk指定为33的文档,但构建发现CheckAarMetadataWorkAction检查AAR元数据有17个问题。所以我的compileSdk使用34。
根据 pub.dev 上的软件包 documentation,在常见问题解答下,请求“存储”权限在 Android 13+ 上始终返回“拒绝”。因此,解决方案是将 Permission.photos 和 Permission.videos 与 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 一起使用,因为 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 均已弃用。
还将compileSdk版本设置为33。我将我的版本设置为34,因为我遇到了软件包版本11.3.1的兼容性问题。
因此 Permissions.photos 和 Permissions.audio 按预期工作,但 Permissions.videos 除外
AndroidManifext.xml
<manifest>
...
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<!-- I added these even though they are deprecated -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
</manifest>
android/app/src/build.gradle
android {
...
compileSdk = 34
defaultConfig {
...
minSdk = 24
targetSdk = 34
versionCode = flutterVersionCode.toInteger()
versionName = flutterVersionName
}
}
嗯..我建议尝试一下。
<manifest ...>
<uses-feature
android:name="android.hardware.camera"
android:required="false"
tools:targetApi="eclair" />
...
<uses-permission android:name="android.permission.READ_MEDIA_USER_VISUAL_USER_SELECTED" />
...
</manifest>