Flutter 申请权限问

深渊向深渊呼唤

Flutter 申请权限问

Flutter 申请权限问题

Flutter 申请权限问题

通常flutter 申请权限会使用插件,关于flutter使用插件 permission_handler的一些问题
最常见的已知错误是对权限调用.request()方法后,permission_handler没有返回。

根据该插件官方描述

从3.1.0版开始,该permission_handler插件已切换到Android支持库的AndroidX版本。这意味着您需要确保您的Android项目也已升级以支持AndroidX。

    将以下内容添加到“android/gradle.properties”文件中

android.useAndroidX=true // 是否适配AndroidX
android.enableJetifier=true // 是否依赖库

    确保compileSdkVersion将“ android / app / build.gradle”文件中的设置为281

android {
compileSdkVersion 28

}

    确保将所有android.依赖项替换为其对应的AndroidX
    到这一步 插件官方提供的链接打不开,到此各自查找吧(此处我不关心,没弄过这一步,替换过的xml里面权限列表的形式应该是像官网中的一样是替换导入很多包)2

在Flutter 的
android>app>src>main>AndroidManifest.mxl文件中3

<manifest>
	<uses-permission android:name="android.permission.CAMERA"/>  <!--//相机-->
	<uses-permission android:name="android.permission.RECORD_AUDIO"/> <!--//麦克风-->
</manifest>

ios>app>Runner>Info.plist4

<dict>
	<key>NSCameraUsageDescription</key>
	<string>此处自定义填写想要申请权限的话,会在询问申请弹窗中显示</string>
</dict>

以上三步中第二步设置的是打包应用时的兼容版本28用于适配到Android 8.0 (API 等级 26) 开发,这个自行调整

build.gradle文件里将targetSDKVersion设为28以后,也就意味着动态申请权限时会因手机版本的不同,经用户允许授权后才可以安全的调用的api

AndroidManifest.xml里面设置需要申请的api权限列表

compileSdkVersion 告诉 Gradle用哪个 Android SDK 版本编译你的应用。一般要>=targetSdkVersion

buildToolsVersion是 android构建工具的版本,一般buildToolsVersion>=CompileSdkVersion,高版本的build-tools 可以构建低版本编译的android程序

targetSdkVersion 手机app能够适配的系统版本

所以要把app适配的某个系统最好把 compileSdkVersion 和 targetSdkVersion 设置一样

android {
  compileSdkVersion 28
  buildToolsVersion "28.0.0"
  defaultConfig {
        ...
        minSdkVersion 21
        targetSdkVersion 28
        ...
    }
  ...
}

参考以下注释链接


    Android6.0运行时权限简介 ↩︎

    记一次Androidx工作适配 ↩︎

    Android权限操作之uses-permission详解 ↩︎

    flutter ios permission_handle权限动态申请 ↩︎

栏目