XAMARIN C# Android:权限:API 23 方法和常量是否已实现?

1 permissions overlay android-windowmanager xamarin android-6.0-marshmallow

我需要将 WindowManager 与 WindowManagerTypes.SystemOverlay 参数一起使用

在我的项目上启用了此权限

但它是 API < 23 的参数

我使用 API 23 (Android 6.0) 开发

我需要在我的 Android 测试手机的设置 => 应用程序 => 应用程序管理器设置中启用参数“绘制其他应用程序”

我在 Xamarin 中找不到:Settings.ActionManageOverlayPermission 和 Settings.CanDrawOverlays 函数,它是否已实现?

此元素是从 Xamarin.Android 版本 5.1.99 添加的(请参阅下面的链接):

https://developer.xamarin.com/releases/android/xamarin.android_5/xamarin.android_5.1.99/level_23_diff/mono.android.dll/

但我不能使用元素。

我使用 java 代码来解释实现问题(见下文),我想做这段代码,但当然是在 C# 中。

爪哇代码

public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469;

public void testPermission() {
    if (!Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
    }
}
Result :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
        if (Settings.canDrawOverlays(this)) {
            // You have permission
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Che*_*ron 5

以下代码对我来说似乎工作正常:

private const int RequestCode = 5469;

private void TestPermission()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.M) return;
    if (!Settings.CanDrawOverlays(this)) return;

    var intent = new Intent(Settings.ActionManageOverlayPermission);
    intent.SetPackage(PackageName);
    StartActivityForResult(intent, RequestCode);
}

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    if (requestCode == RequestCode)
    {
        if (Settings.CanDrawOverlays(this))
        {
            // we have permission
        }
    }

    base.OnActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)

SettingsAndroid.Provider命名空间中

确保在您的项目属性中,将“使用 Android 版本编译”设置为等于或高于 Marshmallow 的 API 级别,并将“目标 Android 版本”也设置为 Marshmallow 或更高。

还要确保您的 Android SDK 也安装了这些 API 级别。