我有一个应用程序,使人们可以将警报发送给其他用户组,并且已经实现了从BLE设备触发警报的支持。一切正常,但应用程序在后台运行。
我使用前台服务来监听设备事件,并使用本地广播来触发实际警报。警报将按预期方式触发,并且所有代码都已运行(向服务器发送警报,播放音频等),但应用程序仍处于后台。
我尝试了几种解决方案,但未能提出可行的解决方案。答案要么太旧,要么就不起作用(如不必要的结果)。
我希望获得与点击前台通知时完全相同的结果=恢复当前活动而不传递destroy。
实际上让我感到惊讶的是,这似乎有多难,我认为应该很容易将其命名为“ bringToFront()”,因为该活动显然正在运行。
任何帮助将不胜感激!
我认为我的任何代码都无助于理解我的问题,但还是有一些问题:
AlarmDeviceService.java -监听BLE事件的服务:
private void sendAlarmTriggerBroadcastMessage(String deviceName){
Intent intent = new Intent();
intent.setAction(ALARM_DEVICE_TRIGGERED);
intent.putExtra(INTENT_EXTRA_SOURCE_NAME, deviceName);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
}
AlarmDeviceBroadcastReceiver.java:
public void onReceive(Context context, Intent intent){
String action = intent.getAction();
Log.d(TAG, "Received: "+ action);
if(mReceiver != null){
if(action.equals(AlarmDeviceService.ALARM_DEVICE_TRIGGERED)) {
mReceiver.onDeviceAlarmBroadcast();
}
else if(action.equals(AlarmDeviceService.ALARM_DEVICE_CONNECTED)){
String mac = intent.getStringExtra(AlarmDeviceService.INTENT_EXTRA_SOURCE_MAC);
mReceiver.onAlarmDeviceConnected(mac);
}
else if(action.equals(AlarmDeviceService.ALL_DEVICES_CONNECTED)){
mReceiver.onAllDevicesConnected();
}
}
}
AlarmActivity.kt -应该放在最前面的活动:
override fun onDeviceAlarmBroadcast(){
if (alarmUtilities?.alarmSentHandler?.currentSentAlarm == null) {
Log.d(LOG, "Doing it!")
triggerDefaultAlarm()
}else{
alarmUtilities?.alarmSentHandler?.cancelAlarm()
}
}
如果我的问题提出得不好,请原谅-这是我的第一篇文章。