我有一個非A2DP單耳耳機BT耳機(Plantronics 510),並希望將其與我的Android HTC Magic一起使用以收聽低質量音頻,如播客/音頻圖書。在Android上將音頻路由到藍牙耳機(非A2DP)
經過大量的谷歌搜索,我發現只有電話音頻可以路由到非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(真)
- 使用AudioManager的setMode(MODE_IN_CALL)
但以上都沒有工作。如果我在上面的代碼中刪除了AudioManager調用,則音頻將從揚聲器播放,如果我按照上圖所示更換它們,則音頻會停止來自揚聲器,但不會通過BT耳機傳送。所以這可能是部分成功。
我已經檢查過,BT耳機的工作方式可以與電話通話。
Android不支持這個原因。但我不能放棄以編程方式重新路由音頻的感覺。有任何想法嗎?
P.S.上面的代碼需要以下權限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
您可能不需要自己編寫任何代碼。只需安裝一個免費的應用程序,旨在做你想做的。請參閱Android.SE問題:[「是否可以將所有音頻輸出(包括音樂輸出)指向藍牙耳機?」](http://android.stackexchange.com/questions/19336/is-it-possible-直接所有音頻輸出到藍牙耳機)我嘗試了幾個不同的應用程序。最後,「單聲道藍牙路由器」是唯一一個爲我工作的人。 – unforgettableid 2015-07-01 00:41:47