当前位置: 首页 > 知识库问答 >
问题:

如何从前台服务正确重新打开应用程序?

那利
2023-03-14

一段时间以来,我一直面临着一个关于星际触觉(意图)的问题。我正在开发的是一种关键字检测,比如“ok google”,当用户说出这个词时会触发警报。为了实现这一点,当用户不使用该应用程序时,我有一个LifecycleService在前台运行并听取用户的意见。当用户说出这个词并且应用程序被终止时,它会使用服务中的startActivity打开我需要的活动,但问题是,如果我一直在听并切换到其他活动(正常使用该应用程序),检测功能会工作(因为我听到识别单词时发出的声音),但该应用程序不会启动它应该启动的活动(尽管调用了startActivity(intent))。我很确定,当我使用startActivity从服务中打开应用程序时,问题可能与上下文有关,但我不知道如何修复它。我试图从Koin中使用一些其他变量,如applicationContext或androidContext(),但它不起作用。

class SpeechRecognitionService : LifecycleService() {

  ...
  //onStartCommand starts the audio recognizer and startAlert() is triggered when the alert is recognized. It is always correctly called


  private fun startAlert() {
        //This is not showing MainActivity although i execute it
        startActivity(MainActivity.getDialogIntent(this))

        //I always hear this audio when the app detects word
        val audio = MediaPlayer.create(this, R.raw.alert_detected_audio)
        audio.start()
    }
}

Main Activity.getDialogIntent(这个)只是一个普通的Intent

fun getDialogIntent(context: Context): Intent {
        val intent = Intent(context, MainActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        intent.putExtra(SHOW_ALERT_DIALOG_KEY, true)
        return intent
}

该问题仅在应用程序启动时使用语音识别(被禁用后)才会发生。例如,如果我关闭应用程序,但再次按应用程序图标打开应用程序,则其工作正常。如果我用语音启动应用程序(因此,从上面的startActivity开始),我当时工作并打开了应用程序,但当我切换到其他活动时,它无法启动。

共有1个答案

唐煜
2023-03-14

您需要使用适当的“启动器Intent”。最简单的方法就是打电话

PackageManager pm = getPackageManager()
Intent intent = pm.getLaunchIntentForPackage("my.package.name")

使用此Intent启动MainActivity而不是调用MainActivity。getDialogIntent(此)

 类似资料:
  • 问题内容: 我正在尝试使游戏服务器在一段时间后更新。 当我这样做时,python在其中一个内核上消耗了100%的计算能力。我真的不明白为什么会这样,如果可能的话如何解决。 问题答案: 在每次轮询之间插入一个10毫秒的毫秒,否则您的循环将持续轮询时间,而不会释放CPU的电源。 编辑:更好,仅在需要时等待一次。如果发生严重的CPU过载,则等待时间可能为负,在这种情况下,可以立即触发2个操作。并不断地重

  • 我想将创建的所有电话号码的arraylist传递到后台服务中,以便在触发摇晃手势时,我可以一次向所有人发送消息。 这是片段,其中我使用方法将我的数组列表传递到服务中。 这是分配传递的arraylist的代码段。在 我发现编译器错误 我想知道是否有更好的方法将创建的数组列表从传递到我的后台服务?

  • 我正在构建一个应用程序来检测Android上的iBeacons。基本功能是通过信标将广告数据存储到设备上,并将其上传到服务器。为此,我正在使用Android信标库。 当应用程序在非活动约30分钟后进入区域时发生的事件序列 首先,在didExit(图像) 之后重新启动,在这里您可以看到从区域11切换到区域9。中途应用程序关闭并立即重新触发,但没有发送推送 在第二个didExit(Image) 后退出

  • 问题内容: 我希望能够从终端中运行的node.js程序打开,创建一些内容,保存并退出,然后获取文件的内容。 我正在尝试做这样的事情: 但是,当它运行时,它只是将终端挂起。 我也尝试过,并得到相同的结果。 更新: 由于此过程是从运行readline的提示符下键入的命令启动的,因此使此过程变得复杂。我将最新版本的相关部分完全提取到了文件中。全文如下: 如上所示,它的工作方式是显示提示几秒钟,然后启动到

  • 问题内容: 我有一个View Controller,其中我的值为0(标签),而当我从另一个视图控制器中打开该View Controller时,我已设置为将label的值设置为20。它可以正常工作,但是当我关闭我的应用程序并再次打开我的应用程序时,该值不会更改,因为,并且没有任何调用。打开我的应用程序时该怎么打电话。我需要做些什么吗? 问题答案: 我对事件的确切顺序感到好奇,所以我对应用程序进行了如

  • 但这也显示了我的浏览器,因为用户可以选择它并打开我传递的uri。我想做的只是打开缩放应用程序与URI。通过使用我可以筛选可以打开我的intent的应用程序,但是我如何选择确切的应用程序(缩放)并将uri传递给它,并且仅用我的会议URL打开缩放应用程序呢?