将应用程序从前台服务带到前台

时间:2020-05-14 13:07:59

标签: android android-activity android-service

我有一个应用程序,使人们可以将警报发送给其他用户组,并且已经实现了从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()
        }
    }

如果我的问题提出得不好,请原谅-这是我的第一篇文章。

0 个答案:

没有答案