我正在尝试编写一个 Cordova 插件,以便为离子混合应用程序提供 Facebook 聊天头像浮动图标,这需要 SYSTEM_ALERT_WINDOW 权限。
由于 Android M 及以上版本要求用户在应用程序第一次启动时授予权限,因此我尝试使用 Cordova 插件cordova.requestPermission(CordovaPlugin plugin, int requestCode, String permission)
方法来提示用户授予权限(如文档 https://cordova.apache.org/docs/en/latest/guide/platforms/android/plugin.html).
public class Floatie extends CordovaPlugin {
public static final String ACTION_START_FLOATIE = "startFloatie";
public static final int REQUEST_CODE = 0;
public static final String DRAW_OVER_OTHER_APPS = Manifest.permission.SYSTEM_ALERT_WINDOW;
private CallbackContext callbackContext;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals(ACTION_START_FLOATIE)) {
String message = args.getString(0);
this.callbackContext = callbackContext;
if(cordova.hasPermission(DRAW_OVER_OTHER_APPS)) {
Log.i("Floatie", "Has Permission");
}
else
{
getPermission(REQUEST_CODE);
}
return true;
}
return false;
}
protected void getPermission(int requestCode)
{
cordova.requestPermission(this, requestCode, DRAW_OVER_OTHER_APPS);
}
public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) throws JSONException
{
for(int r:grantResults)
{
if(r == PackageManager.PERMISSION_DENIED)
{
Log.i("Floatie", "Permission Denied");
return;
}
}
Log.i("Floatie", "Permission Granted");
}
}
首次启动时,应用程序不会提示权限请求活动,而是在日志中打印“权限被拒绝”。
我是 Ionic 和 Cordova 的新手,在花了几个小时之后仍然无法解决这个问题。任何帮助将不胜感激。
提前致谢。