我正在尝试使用onRequestPermissionsResult()来触发,这样我就可以在收到覆盖权限后开始运行我的应用程序。不幸的是,我似乎无法调用onRequestPermissionsResult(),因为toast没有被发送。我觉得这与你要求覆盖权限时没有接受或拒绝对话框的事实有关。相反,您会看到一个切换按钮。
public class Main extends Activity {
private static final int REQUEST_OVERLAY_PERMISSION = 1;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
Toast.makeText(this, "onRequestPermissionsResult has been called", Toast.LENGTH_SHORT).show();
//Toast.makeText(this, "RequestCode: " + requestCode + " permissions " + permissions + " grantresults: " + grantResults, Toast.LENGTH_SHORT).show();
}
private void runService()
{
Intent svc = new Intent(this, OverlayShowingService.class);
startService(svc);
finish();
}
}
答案 0 :(得分:4)
这不是您使用ACTION_MANAGE_OVERLAY_PERMISSION
的方式。
首先,startActivityForResult()
不会触发onRequestPermissionsResult()
。
其次,ACTION_MANAGE_OVERLAY_PERMISSION
不会返回结果。
因此,只需在startActivity()
ACTION_MANAGE_OVERLAY_PERMISSION
上致电Intent
即可。用户将获得屏幕截图中显示的屏幕(或用户设备的等效屏幕)。用户可以选择是否切换该开关。稍后,当控件返回到您的应用时(例如onStart()
,onResume()
),您可以call canDrawOverlays()
查看用户是否授予了权限。