Android:voice_命令应用程序每次蓝牙连接仅成功启动一次

Android:voice_命令应用程序每次蓝牙连接仅成功启动一次,android,bluetooth,Android,Bluetooth,谢谢你抽出时间 我写了一个通过蓝牙按钮触发的小应用程序。它以文本到语音的方式向用户打招呼,然后提示用户输入一条命令,该命令通过语音到文本的方式处理 除了每次蓝牙连接我的应用程序只会启动一次之外,一切都很好。下一次我按住蓝牙按钮时,只听到一声嘟嘟声,但没有应用程序启动。如果我断开蓝牙连接并重新连接蓝牙,我的应用程序将成功启动,但同样,这只是第一次。我尝试了另一个应用程序作为我的默认蓝牙应用程序,每次调用它都可以正常工作,所以这一定是我的设计问题 为了使我的应用程序符合蓝牙按钮按下的默认条件,我在清

谢谢你抽出时间

我写了一个通过蓝牙按钮触发的小应用程序。它以文本到语音的方式向用户打招呼,然后提示用户输入一条命令,该命令通过语音到文本的方式处理

除了每次蓝牙连接我的应用程序只会启动一次之外,一切都很好。下一次我按住蓝牙按钮时,只听到一声嘟嘟声,但没有应用程序启动。如果我断开蓝牙连接并重新连接蓝牙,我的应用程序将成功启动,但同样,这只是第一次。我尝试了另一个应用程序作为我的默认蓝牙应用程序,每次调用它都可以正常工作,所以这一定是我的设计问题

为了使我的应用程序符合蓝牙按钮按下的默认条件,我在清单中包括了voice_命令操作:

<intent-filter>
    <action android:name="android.intent.action.VOICE_COMMAND" />
    <category android:name="android.intent.category.DEFAULT" />
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
使用文本到语音,我知道应用程序第一次启动时,它会进入我在onInit函数中编写的第一个文本到语音调用:

@Override
public void onInit(int status) {
    }
当我的应用程序完成并调用finish()时,text-to-speech告诉我该应用程序按以下顺序运行:

onPause();
onStop();
onDestroy();
当我在现有蓝牙连接上第二次按下蓝牙按钮时,我的应用程序无法进入onInit()。我可以相当肯定这一点,因为从文本到演讲的转换不是大声朗读的。这对我来说意味着该应用程序根本没有启动

在通过蓝牙连接首次成功启动应用程序后,我尝试清除应用程序的缓存,并通过设置菜单强制关闭应用程序。没什么帮助

任何关于我可以在哪里继续调试的建议都将不胜感激。我正在测试Nexus4

谢谢,


Greg

我也是andorid应用程序的新手,但你不需要一个后台运行的服务,聆听所有广播的意图,并在活动中处理这些意图吗?嗨,bt_用户。我认为,在这种情况下,由于我的应用程序只是被指定为蓝牙按钮按下的默认应用程序,所有的蓝牙复杂性都是由操作系统处理的。蓝牙按钮不应该在每次按下时启动相同的应用程序吗?在我的例子中,它成功启动,但只是第一次。当第二次按下蓝牙按钮时,您可以在adb logcat中检查广播的意图,我相信您的活动已被破坏,因为您的活动已经经历了onPause()的过程;onStop()和onDestroy()。谢谢你的建议。Logcat不显示蓝牙按钮所广播的意图,因为它不是我的应用程序的一部分。我基本上不做蓝牙编程。蓝牙按钮按下会发出android.intent.action.voice_命令的意图,该命令会启动我的应用程序,因为我的应用程序被设置为此意图的默认应用程序。我的应用程序在第一次按下蓝牙按钮时启动,处于被破坏状态。第二次按下蓝牙按钮时是否会拨打不同的电话?这不再是一个语音命令的意图吗?finish()是结束应用程序的错误方法吗?我现在明白了bt_用户的意思,谢谢您的帮助。蓝牙耳机课程是我所需要的,包括听者等。
onPause();
onStop();
onDestroy();