У меня есть гарнитура для наушников с одним ухом без A2DP (Plantronics 510) и вы хотите использовать ее с моим Android HTC Magic для прослушивания низкокачественного звука, такого как подкасты/аудиокниги.
После долгих поисковых запросов я обнаружил, что только телефонные звонки могут быть направлены на гарнитуры, отличные от A2DP BT. (Я хотел бы знать, нашли ли вы готовое решение для маршрутизации всех видов аудио в не-A2DP BT-гарнитуры)
Итак, я понял, как-то программно я могу направлять аудио в поток, который передает звук телефонного звонка. Таким образом, я буду обманывать телефон, чтобы нести свой mp3-звук в мою BT-гарнитуру. Я написал следующий простой код.
import android.content.*;
import android.app.Activity;
import android.os.Bundle;
import android.media.*;
import java.io.*;
import android.util.Log;
public class BTAudioActivity extends Activity
{
private static final String TAG = "BTAudioActivity";
private MediaPlayer mPlayer = null;
private AudioManager amanager = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
amanager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
amanager.setBluetoothScoOn(true);
amanager.setMode(AudioManager.MODE_IN_CALL);
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(new FileInputStream(
"/sdcard/sample.mp3").getFD());
mPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mPlayer.prepare();
mPlayer.start();
} catch(Exception e) {
Log.e(TAG, e.toString());
}
}
@Override
public void onDestroy()
{
mPlayer.stop();
amanager.setMode(AudioManager.MODE_NORMAL);
amanager.setBluetoothScoOn(false);
super.onDestroy();
}
}
Как вы можете видеть, я пробовал сочетания различных методов, которые, как я думал, обманут телефон, чтобы поверить, что мой звук является телефонным звонком:
- Использование MediaPlayer setAudioStreamType (STREAM_VOICE_CALL)
- с помощью AudioManager setBluetoothScoOn (true)
- с помощью AudioManager setMode (MODE_IN_CALL)
Но ничего из этого не было. Если я удаляю вызовы AudioManager в приведенном выше коде, звук воспроизводится с динамика, и если я их замену, как показано выше, звук перестает поступать от динамиков, но он не приходит через гарнитуру BT. Таким образом, это может быть частичным успехом.
Я проверил, что гарнитура BT работает нормально с телефонными звонками.
Должна быть причина, по которой Android не поддерживает это. Но я не могу отпустить ощущение, что невозможно программно перенаправить аудио. Любые идеи?
P.S. над кодом требуется следующее разрешение
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>