[Fix]恢复动态请求悬浮窗权限

原因:Android11弹Toast需要悬浮窗权限
This commit is contained in:
chenfufeng
2022-03-18 11:02:20 +08:00
parent 646d4d4e2b
commit 244859f9a0
7 changed files with 36 additions and 35 deletions

View File

@@ -37,6 +37,7 @@ class AutoPilotAndCheckView @JvmOverloads constructor(
private var clickListener: ClickListener? = null private var clickListener: ClickListener? = null
private var keyBoardUtil: KeyBoardUtil? = null private var keyBoardUtil: KeyBoardUtil? = null
private var connectStatus = false private var connectStatus = false
private var lastTime = 0L
init { init {
LayoutInflater.from(context).inflate(R.layout.view_auto_pilot_check, this, true) LayoutInflater.from(context).inflate(R.layout.view_auto_pilot_check, this, true)
@@ -51,10 +52,6 @@ class AutoPilotAndCheckView @JvmOverloads constructor(
keyBoardUtil?.setActionListener { inputContent -> keyBoardUtil?.setActionListener { inputContent ->
inputContent.toIntOrNull()?.let { speed -> inputContent.toIntOrNull()?.let { speed ->
when { when {
!connectStatus -> {
ToastUtils.showShort("设置车速失败,请启动域控制器")
keyBoardUtil?.hideKeyboard()
}
speed > 60 -> { speed > 60 -> {
// 设置失败键盘不消失,让用户直接修改 // 设置失败键盘不消失,让用户直接修改
ToastUtils.showShort("超过最大限速值60设置失败") ToastUtils.showShort("超过最大限速值60设置失败")
@@ -90,22 +87,28 @@ class AutoPilotAndCheckView @JvmOverloads constructor(
ivDebugFeedback.onClick { ivDebugFeedback.onClick {
clickListener?.showFeedbackView() clickListener?.showFeedbackView()
} }
etInputSpeed.setOnTouchListener { v, _ -> etInputSpeed.setOnFocusChangeListener { v, hasFocus ->
if (!connectStatus) { when {
ToastUtils.showShort("设置车速失败,请启动域控制器") hasFocus -> {
keyBoardUtil?.hideKeyboard() llSpeedPosition.background = resources.getDrawable(R.drawable.pilot_speed_high_light_bg)
return@setOnTouchListener true
} else {
llSpeedPosition.background = resources.getDrawable(R.drawable.pilot_speed_high_light_bg)
if (etInputSpeed.hasFocusable()) {
if (keyBoardUtil == null) { if (keyBoardUtil == null) {
keyBoardUtil = KeyBoardUtil(sKeyBoardView, etInputSpeed) keyBoardUtil = KeyBoardUtil(sKeyBoardView, etInputSpeed)
} }
keyBoardUtil?.showKeyboard() keyBoardUtil?.showKeyboard()
} }
if (!etInputSpeed.hasFocus()) { else -> llSpeedPosition.background = resources.getDrawable(R.drawable.pilot_speed_bg)
etInputSpeed.requestFocus() }
} }
etInputSpeed.setOnTouchListener { v, event ->
var curTime = System.currentTimeMillis()
if (curTime - lastTime < 1000) {
return@setOnTouchListener true
}
if (!connectStatus) {
ToastUtils.showShort("设置车速失败,请启动域控制器")
keyBoardUtil?.hideKeyboard()
return@setOnTouchListener true
} else {
return@setOnTouchListener false return@setOnTouchListener false
} }
} }

View File

@@ -9,6 +9,7 @@
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application> <application>
<!-- &lt;!&ndash;保活用&ndash;&gt; <!-- &lt;!&ndash;保活用&ndash;&gt;

View File

@@ -107,14 +107,14 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
// if (CallChatApi.getInstance().getApiProvider() != null) { // if (CallChatApi.getInstance().getApiProvider() != null) {
// CallChatApi.getInstance().getApiProvider().initVehicleTeamContainer("init", R.id.module_main_id_message_history_fragment_container, this); // CallChatApi.getInstance().getApiProvider().initVehicleTeamContainer("init", R.id.module_main_id_message_history_fragment_container, this);
// } // }
// //申请悬浮窗权限 //申请悬浮窗权限
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// // 检查是否有悬浮窗权限 // 检查是否有悬浮窗权限
// if (Settings.canDrawOverlays(this)) { if (Settings.canDrawOverlays(this)) {
// return; return;
// } }
// PermissionsDialogUtils.openAppDetails(this, "显示悬浮窗", REQUEST_CODE_DIALOG); PermissionsDialogUtils.openAppDetails(this, "显示悬浮窗", REQUEST_CODE_DIALOG);
// } }
} }
// 隐藏布局 // 隐藏布局

View File

@@ -522,9 +522,9 @@ public final class ToastUtils {
return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_TOAST); return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_TOAST);
} else if (UtilsBridge.isGrantedDrawOverlays()) { } else if (UtilsBridge.isGrantedDrawOverlays()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_PANEL); return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
} else { } else {
return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_TOAST); return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_PHONE);
} }
} }
return new ActivityToast(toastUtils); return new ActivityToast(toastUtils);

View File

@@ -2,6 +2,7 @@ package com.mogo.module.common.dialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.os.Build;
import android.view.WindowManager; import android.view.WindowManager;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -31,12 +32,11 @@ public class BaseFloatDialog extends Dialog {
} }
private void addFlag() { private void addFlag() {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
// } else { } else {
// getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// } }
getWindow().setType(WindowManager.LayoutParams.LAST_SUB_WINDOW);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
| WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE); | WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE);

View File

@@ -8,10 +8,8 @@ import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
/** /**
* 采用windowManager实现接口(取消系统级弹窗) * 采用windowManager实现接口
* {@link DialogImpl}
*/ */
@Deprecated
class WindowManagerImpl implements IWindowManagerView { class WindowManagerImpl implements IWindowManagerView {
private WindowManager mWindowManager; private WindowManager mWindowManager;

View File

@@ -97,7 +97,6 @@ public class WindowManagerView {
return new WindowManagerView( mParams, new DialogImpl() ); return new WindowManagerView( mParams, new DialogImpl() );
} }
@Deprecated
public WindowManagerView showInWindowManager() { public WindowManagerView showInWindowManager() {
if ( mParams.mContentView == null ) { if ( mParams.mContentView == null ) {
throw new NullPointerException( "WMViewParams#mContentView must not be null." ); throw new NullPointerException( "WMViewParams#mContentView must not be null." );