背景:很多APP有强制更新功能,不更新就退出app,但是permission_handler 并没有提供未知来源的判断权限,而使用install_plugin进行安装,则会直接弹出允许未知安装的应用,中间缺少判断是否可以安装的权限。
判断方法:从flutter调用原生方法,原生判断安装再返回。
flutter内:
static Future checkInstallPermission() async {
// Native channel
var result;
try {
result = await f2kChannel.invokeMethod("checkInstallPermission");
L.v("result call checkInstallPermission result $result ");
} on Exception catch (e) {
print(e.toString());
L.v("result call checkInstallPermission error$e");
}
return result;
}
原生Mainactivity内(kotlin版):
val F2K_CHANNEL = "com.xxxx.xxxx/f2k"//flutter往kotlin发送消息
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
//接受channel
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, F2K_CHANNEL).setMethodCallHandler(
MethodChannel.MethodCallHandler { call, result ->
run {
Log.i("wztest", "kotlin 收到 flutter 请求:${call.method}");
if(call.method.contentEquals("checkInstallPermission")){
Log.i("wztest", "安装权限 :${canRequestPackageInstalls(this)}");
result.success(canRequestPackageInstalls(this));
}
}
}
)
})
}
//检测是否有安装权限
private fun canRequestPackageInstalls(activity: Activity): Boolean {
return Build.VERSION.SDK_INT <= Build.VERSION_CODES.O || activity.packageManager.canRequestPackageInstalls()
}
如还不清楚,可参考install_plugin的源码。