Java 如何从marshmallow中的应用程序库中获取draw overlays权限

Java 如何从marshmallow中的应用程序库中获取draw overlays权限,java,android,Java,Android,我想申请在棉花糖里画覆盖物的许可 在marshmallow中,我们必须给予绘制覆盖图的运行时许可,我已经实现了。我遇到的问题是,一旦我下一次从我的应用程序中授予了权限,如果我使用以下代码进行检查,如果(Settings.canDrawOverlays(getApplicationContext())返回false,则返回false 但在“设置”(绘制其他应用)中,我的应用被选中。这里我提供了我的lib活动代码 if(Settings.canDrawOverlays(getApplicat

我想申请在棉花糖里画覆盖物的许可

在marshmallow中,我们必须给予绘制覆盖图的运行时许可,我已经实现了。我遇到的问题是,一旦我下一次从我的应用程序中授予了权限,如果我使用以下代码进行检查,如果(Settings.canDrawOverlays(getApplicationContext())返回false,则返回false

但在“设置”(绘制其他应用)中,我的应用被选中。这里我提供了我的lib活动代码

    if(Settings.canDrawOverlays(getApplicationContext())&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            Toast.makeText(getApplicationContext(), "Windows Overlay allowed" , Toast.LENGTH_SHORT).show();
startService(new Intent(this, FABService.class));
                finish();
        }
        else{
            startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION), 1);
        }
我的活动结果是

 @TargetApi(Build.VERSION_CODES.M)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    /** check if received result code
     is equal our requested code for draw permission  */
    if (requestCode == 1) {
        // * if so check once again if we have permission /
        if (Settings.canDrawOverlays(getApplicationContext()) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // continue here - permission was granted
            Toast.makeText(getApplicationContext(), "Windows Overlay allowed", Toast.LENGTH_LONG).show();
            startService(new Intent(this, FABService.class));
            finish();
        }
    }
}

这些代码是我在该应用程序的lib中实现的。任何1都可以帮助我找到错误的地方。

将权限放入清单中

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

如果我在应用程序的活动中提供相同的代码,我就能够获得此权限,并且如果(Settings.canDrawOverlays(getApplicationContext())返回true,我认为问题在于我用于获取权限的上下文(在库中),这就是我使用getApplicationContext()的原因但即使是这样,我也无法做到
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
    // Show alert dialog to the user saying a separate permission is needed
    // Launch the settings activity if the user prefers
    Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
    startActivity(myIntent);
}