gpt4 book ai didi

java - 打开扬声器并不总是有效

转载 作者:行者123 更新时间:2023-12-01 14:49:08 27 4
gpt4 key购买 nike

我正在制作一个应用程序,用户可以通过我的应用程序调用他最喜欢的联系人。当通话开始时,扬声器打开。为了调用电话,我使用此 Intent。

               Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel: "+contactnum.get(0)));
startActivity(callIntent);

当有一个拨出电话时,会有一个启动 BroadcastReceiver 的 Intent

    <receiver android:name=".MyBroadcast">
<intent-filter>

<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
<action android:name="android.intent.action.PHONE_STATE" />

</intent-filter>
</receiver>



public class MyBroadcast extends BroadcastReceiver{

@Override
public void onReceive(final Context context, Intent intent){
// TODO Auto-generated method stub

PhoneStateListener phoneStateListener = new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber){
if(state == TelephonyManager.CALL_STATE_RINGING){
}
else if(state == TelephonyManager.CALL_STATE_IDLE){

AudioManager audioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);

audioManager.setSpeakerphoneOn(false);
}
else if(state == TelephonyManager.CALL_STATE_OFFHOOK){

AudioManager audioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);
}
super.onCallStateChanged(state, incomingNumber);
}
};
TelephonyManager mgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

if(mgr != null){
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
}

正如您所看到的,onReceive 会在需要时打开扬声器。

问题是扬声器并不总是打开,而是仅在用户第一次调用电话时打开。奇怪的是,如果用户在应用程序运行时调用电话但不是通过我的应用程序正常工作,则扬声器每次都会打开。什么会导致这样的事情?

还有其他的事情,即使应用程序没有运行,启动接收器的 Intent 也会继续工作,所以当我调用电话或接到电话时,它会打开扬声器,尽管应用程序甚至没有运行。

最佳答案

好的,我已经开始工作了。

我更改了 Intent 过滤器,因此它只有一个操作

 <action android:name="android.intent.action.PHONE_STATE" />

当 TelephonyManager 处于摘机状态时,我设置了 audioManager 模式

audioManager.setMode(AudioManager.MODE_IN_CALL);

就在打开扬声器之前,它就工作了。

更新

所以当应用程序没有运行时它仍然可以工作,但后来我发现了这个问题 My Broadcast receiver get execute even if my application is not working我意识到我应该在我的主要 Activity 中注册接收器并在 Activity 的 onDestroy 中取消注册它。

关于java - 打开扬声器并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15053107/

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