叶棉花糖后前来的Android使安全级别更加棒,但对于
SYSTEM_ALERT_WINDOW
可以显示浮动的行动,任何事情可以强制用户给予准许它通过在您的onCreate()方法 以下代码将这个代码的setContentView
/
// Check if Android M or higher
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);
}
后的动作ACTION_MANAGE_OVERLAY_PERMISSION直接启动“在其他应用的许可屏幕。
编辑
你好我上面的代码工作,正确率100%
但我发现,很多人仍然在寻找那如何才能让ACTION_MANAGE_OVERLAY_PERMISSION
永久像如果用户允许权限一次,然后唐每次打开应用程序时都不要问它所以为你解答 - 1)检查设备是否有api 23+
2)if 23+ api then then if if user如果有过一次permite不开车他Settings.ACTION_MANAGE_OVERLAY_PERMISSION &如果还没有允许尚未然后询问运行权限检查
Put below line in in your Oncreate() method Put this after setContentView
checkPermission();
现在把下面的代码onActivityResult
许可证或不
3)
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)) {
// You don't have permission
checkPermission();
}
else
{
//do as per your logic
}
}
}
现在终于checkPermission方法代码
public void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
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);
}
}
}
,不要忘了在你的类
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469;
欢呼声来声明这个公共变量! ;-)
http://stackoverflow.com/questions/33139754/android-6-0-marshmallow-cannot-write-to-sd-card这帮了我 – Bharath
http://stackoverflow.com/questions/33139754/android-6-0-marshmallow-can not-write-to-sd-card这篇文章帮助我显示了写入外部的对话许可 – Bharath