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