gpt4 book ai didi

android - 中断车载 radio 安卓蓝牙

转载 作者:行者123 更新时间:2023-11-29 00:03:54 25 4
gpt4 key购买 nike

我们正在尝试通过蓝牙连接的汽车音响播放来 self 们的 Android 应用程序(交通信息)的音频警报。如果我们将汽车立体声音频输入切换为蓝牙,应用音频就会播放。如果它位于任何其他来源,则应用程序音频不会从立体声或设备播放。

我们想要做的是允许用户在 DAB/FM radio 或其他源上保持立体声音频输入,但让我们的应用程序音频在特定时间中断并播放这些交通信息警报,例如 VOIP 应用程序可以做到(例如 Facebook Messenger),内置的电话调用应用程序可以做到。

这是我们目前使用的代码:

MainActivity.java

package com.robbresearch.ttsandroidtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.content.Context;
import android.media.AudioManager;

public class MainActivity extends AppCompatActivity {

private Button speakNowButton;
private TextView textView;
TTSManager ttsManager = null;
AudioManager am;

AudioManager.OnAudioFocusChangeListener afChangeListener =
new AudioManager.OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
// Pause playback
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
// Resume playback
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
//am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
am.abandonAudioFocus(afChangeListener);
// Stop playback
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Context mContext = getApplicationContext();

ttsManager = new TTSManager();
ttsManager.init(this);

am = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);

// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_VOICE_CALL,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
//am.registerMediaButtonEventReceiver(RemoteControlReceiver);
// Start playback.
}

am.setMode(AudioManager.MODE_IN_CALL);
android.os.Process.setThreadPriority(
android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

textView = (TextView) findViewById(R.id.input_text);
speakNowButton = (Button) findViewById(R.id.speak_now);
speakNowButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String text = textView.getText().toString();
ttsManager.initQueue(text);
}
});
}

/**
* Releases the resources used by the TextToSpeech engine.
*/
@Override
public void onDestroy() {
super.onDestroy();
ttsManager.shutDown();
}
}

activity_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dp"
android:orientation="vertical"
android:padding="20dp" >

<TextView
android:id="@+id/input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:ems="10"
android:padding="10dp"
android:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum." />

<Button
android:id="@+id/speak_now"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Speak Now" />

</LinearLayout>

我们在 android list 中有这些额外的权限:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

我们将不胜感激关于如何实现这一目标的任何建议,谢谢 :)

我们只需要在必要时支持更新版本的 android。

最佳答案

我能够使用以下代码让它工作:

audioM.setMode(audioM.MODE_IN_COMMUNICATION);
audioM.setBluetoothScoOn(true);
audioM.startBluetoothSco();
audioM.setSpeakerphoneOn(false);

以及以下权限:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />

无需设置线程优先级或请求音频焦点。

请注意,我目前在调用 TextToSpeech.speak() 和通过汽车 radio 收听音频之间有 15 秒的延迟。当我解决了这个问题后,我会更新这个答案。

关于android - 中断车载 radio 安卓蓝牙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40040773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com