gpt4 book ai didi

java - 当来电通过特定音频应答时,音频重叠

转载 作者:行者123 更新时间:2023-12-03 01:44:15 24 4
gpt4 key购买 nike

我正在尝试通过代码接收到来电时播放音频文件。问题是当收到来电时,音频文件开始播放两次或重叠声音。同样的问题是,结束通话后,音频文件不会暂停或停止播放,直到音频文件没有结束为止。
我为此尝试过的代码如下:

    public void onReceive(final Context context, Intent intent) {

try{
final MediaPlayer mp= MediaPlayer.create(context,R.raw.audio);

String state= intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
Toast.makeText(context, "Ringing!", Toast.LENGTH_SHORT).show();

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent1 = new Intent(context, AcceptCall.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent1);

mp.setLooping(false);
mp.start();


}


}, 4000);

}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){
Toast.makeText(context, "Received!", Toast.LENGTH_SHORT).show();
}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){

try{
mp.reset();
mp.pause();
mp.seekTo(0);

Toast.makeText(context, "Idle!", Toast.LENGTH_SHORT).show();
}catch(Exception e){e.printStackTrace();}

}

}catch (Exception e){
e.printStackTrace();
}

}

帮帮我

最佳答案

首先,您不会释放与之前创建的相同的MediaPlayer实例。

每次调用MediaPlayer.create(context,R.raw.audio);都会创建一个新的MediaPlayer实例。因此,实际上,第一次接收广播的EXTRA_STATE_RINGING时,第二次启动MP_1时,您将创建一个新的EXTRA_STATE_IDLE并停止/释放该实例。而是将Me​​diaPlayer引用保留在MP_2类中,并仅在BroadCast中创建一个。像这样:

if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
Toast.makeText(context, "Ringing!", Toast.LENGTH_SHORT).show();
mp= MediaPlayer.create(context,R.raw.audio);

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent1 = new Intent(context, AcceptCall.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent1);

mp.setLooping(false);
mp.start();


}


}, 4000);

}

if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){

try{
mp.stop();
mp.release();

Toast.makeText(context, "Idle!", Toast.LENGTH_SHORT).show();
}catch(Exception e){e.printStackTrace();}

}

因此,稍后当您使用 TelephonyManager.EXTRA_STATE_RINGING释放它时,您将释放并停止相同的一个。

另请注意,我还替换了 TelephonyManager.EXTRA_STATE_IDLE

关于java - 当来电通过特定音频应答时,音频重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969115/

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