我正在尝试使用广播接收器在Android Q中实现基于警报的应用程序。我正在运行使用通知来触发警报广播接收器的前台服务。该服务运行良好,并且正在触发广播接收器。如果我们在设置警报后关闭应用程序或锁定屏幕,则该服务将在前台运行并显示通知。
当调用警报广播时,我试图在锁定屏幕时打开一个新活动,以提供停止警报和服务的功能。我尝试禁用键盘锁,打开屏幕,然后从广播接收器中打开活动,但无法成功。
我尝试使用WindowManager标志,但已弃用它们,并且在代码中没有任何区别。
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
由于我试图从BroadcastReceiver启动活动,所以我将没有任何活动可以使用KeyguardManager.requestDismissKeyguard(Activity activity,KeyguardDismissCallback callback)] >>
锁定屏幕以关闭警报时,有什么方法可以启动活动。
我的实现如下,我还在清单文件中添加了权限。
AndroidManifest.xml
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
AlarmBroadcastReceiver.class
public class AlarmBroadcastReceiver extends BroadcastReceiver { public static MediaPlayer mp; public static Vibrator vibrator; private boolean isVibrationEnabled = false; @Override public void onReceive(Context context, Intent intent) { long[] mVibratePattern = new long[]{0, 400, 400, 400, 400, 400, 400, 400}; final int[] mAmplitudes = new int[]{0, 128, 0, 128, 0, 128, 0, 128}; isVibrationEnabled = intent.getExtras().getBoolean(LocationAlertService.IS_VIBRATE); mp=MediaPlayer.create(context, R.raw.ring1); mp.setLooping(true); mp.start(); if(isVibrationEnabled) { vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate(VibrationEffect.createWaveform(mVibratePattern, mAmplitudes, 0)); } else { //deprecated in API 26 vibrator.vibrate(mVibratePattern, 3); } } Intent wakeIntent = new Intent(context, WakeUpActivity.class); wakeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(wakeIntent); } }
我知道我缺少一些东西。如果有解决我所面临问题的任何建议,我将感到高兴。预先感谢您对我的帮助。
我正在尝试使用广播接收器在Android Q中实现基于警报的应用程序。我正在运行使用通知来触发警报广播接收器的前台服务。 ...
使用Android Q,如果您的应用未包含以下链接中列出的那些例外情况,则无法从后台自动启动活动。您可以选择仅显示服务通知,然后单击以启动待处理的意图。