我有一个android.speech.tts.TextToSpeech.speak()用于读取消息的应用程序.
这些消息只能读出连接的蓝牙耳机.所以在我调用说话方法之前,我会检查AudioManager.isBluetoothA2dpOn();
说话方法实施:
ttsOptions.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, AudioManager.STREAM_VOICE_CALL);
ttsOptions.putFloat(TextToSpeech.Engine.KEY_PARAM_VOLUME, 1.0f);//MAX
tts.speak(text, TextToSpeech.QUEUE_ADD, ttsOptions, utteranceID);
Run Code Online (Sandbox Code Playgroud)
这种行为按预期工作了大约一年,但最近它在三星设备上失败的方式只是它将音频路由到手机的扬声器并且消息被大声读出.
我设法通过以下方式解决了路由问题:
1.AudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
2.mAudioManager.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
3.mAudioManager.startBluetoothSco();
4.播放简短的音频文件
如果我执行这4个步骤,音频路由将被修复并路由到蓝牙耳机.
问题:
为什么三星设备将音频路由到手机扬声器而不是蓝牙设备?
任何可靠的方法来检查音频是否将被路由到耳机而不是AudioManager.isBluetoothA2dpOn();?
android text-to-speech android-audiomanager audio-route android-bluetooth
我一直在片段的setUserVisibleHint()方法中做一些逻辑.我一直在检查是否isVisibleToUser为真,然后用于getActivity返回活动.这很好(100%的时间),直到我将支持库更新到最新的(support:appcompat-v7:24.2.0).现在getActivity总是返回null.解释此行为的支持库是否有一些更改?
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(false);
if (isVisibleToUser) {
getActivity() <- null
}
Run Code Online (Sandbox Code Playgroud) 我已经设置了一些应用程序中心 android 项目,但它们通常具有与 git root 相同级别的 android 项目。
现在我有另一个比 git root 更深一层的项目。在这种情况下,应用中心显示“我们在您的分支中找不到任何 Android 项目。”
是否有设置可以将应用程序中心指向 android 项目目录?我知道我可以改变项目,但我宁愿不这样做。