Flutter应用在三星安卓9设备运行报错:Permission Denial权限拒绝
问题根因
从报错堆栈可以定位到,问题出在你当前使用的Flutter master 2.6开发版中,FlutterActivity的onFlutterUiDisplayed回调调用了系统reportFullyDrawn方法,三星Android 9的ROM对该方法的内部实现存在厂商定制缺陷,会触发跨用户权限校验,普通第三方应用无法申请到INTERACT_ACROSS_USERS_FULL这类系统级权限,因此添加权限声明无法解决问题。
可行解决方案
- 方案1:自定义FlutterActivity捕获异常(最快生效)
自己创建自定义Activity继承FlutterActivity,重写onFlutterUiDisplayed方法,捕获该安全异常,示例代码如下:
import android.os.Bundle; import io.flutter.embedding.android.FlutterActivity; public class MainActivity extends FlutterActivity { @Override public void onFlutterUiDisplayed() { try { super.onFlutterUiDisplayed(); } catch (SecurityException e) { // 忽略三星Android9 ROM触发的权限异常 } } }
记得把AndroidManifest中启动的Activity替换为你自定义的这个MainActivity。
- 方案2:切换Flutter稳定通道(长期稳定)
你当前使用的是master开发版通道,该分支存在大量未经过全量测试的变更,建议切换到stable稳定通道,升级到2.5.x及以上的正式版本,该问题在后续正式版本中已经被官方修复,切换命令如下:
flutter channel stable flutter upgrade
- 方案3:降低targetSdkVersion(临时备选)
如果暂时不希望调整Flutter版本和Activity代码,可以将build.gradle中的targetSdkVersion和compileSdkVersion暂时降到28,也可以规避该问题。
内容的提问来源于stack exchange,提问作者sajanyamaha
相关产品推荐
相关产品推荐

