解决联想pad 升级 Android 11 导致浮窗权限无法获取的bug

This commit is contained in:
董宏宇
2021-07-02 18:00:23 +08:00
parent ee37b0a129
commit ec8f3c7d75
2 changed files with 14 additions and 6 deletions

View File

@@ -3,4 +3,5 @@
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
<uses-permission android:name="android.permission.TYPE_APPLICATION_OVERLAY" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>
</manifest>

View File

@@ -8,6 +8,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
@@ -143,11 +144,13 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
}
//申请悬浮窗权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(Settings.canDrawOverlays(this)){
// 检查是否有悬浮窗权限
if (Settings.canDrawOverlays(this)) {
return;
}
Intent intent=new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivityForResult(intent, REQUEST_CODE_DIALOG);
// Intent intent=new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
// startActivityForResult(intent, REQUEST_CODE_DIALOG);
openAppDetails("显示悬浮窗");
}
}
@@ -465,7 +468,7 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
} else {
// 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
if (!isFirst) {
openAppDetails();
openAppDetails(null);
isFirst = true;
}
}
@@ -475,9 +478,13 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
/**
* 打开APP的详情设置
*/
private void openAppDetails() {
private void openAppDetails(String msg) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("请在 “应用信息 -> 权限” 中授予权限");
if (TextUtils.isEmpty(msg)) {
builder.setMessage("请在 “应用信息 -> 权限” 中授予权限");
} else {
builder.setMessage("请在 “应用信息 -> 权限” 中授予【" + msg + "】权限");
}
builder.setPositiveButton("手动授权", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {