我正试图在手机响铃时通过蓝牙耳机播放声音(即代表人名的小wav文件 - 不是自动生成的)。基本上它会取代蓝牙设备的默认铃声,并用呼叫者的名字替换它!......好吧,无论如何......它不起作用。
我已经能够在活动中直接在耳机上播放wav文件,但是当移动到广播接收器的onReceive功能时,当手机响铃时,它无法通过耳机播放相同的声音。
我觉得我一定错过了什么。我可以做些什么来修改这段代码吗?
提前致谢
public void onReceive(Context context, Intent intent) {
mContext = context;
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
{
System.out.println("Its Ringing");
AudioManager am = (AudioManager) mContext.getSystemService(mContext.AUDIO_SERVICE);
am.setBluetoothScoOn(true);
am.startBluetoothSco();
am.setMode(AudioManager.MODE_NORMAL);
try{
AssetFileDescriptor afd = mContext.getAssets().openFd("my.wav");
MediaPlayer player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
player.setOnPreparedListener(new OnPreparedListener(){
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
player.prepareAsync();
}catch(IOException ioe){
System.err.println(ioe.getLocalizedMessage());
}}}
答案 0 :(得分:0)
您应该在接到电话之前准备/设置媒体播放器,因为这可能需要一些时间。另外,删除am.setMode(AudioManager.MODE_NORMAL);,可以将其替换为am.setMode(AudioManager.STREAM_VOICE_CALL);但它可能没有必要,因为如果您的BT设备配对/设置,您应该已经处于该模式。