我正在制作一个应用程序,用户可以通过我的应用程序呼叫他最喜欢的联系人。通话开始时,扬声器打开。为了使用此 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 会在需要时打开扬声器。
问题是扬声器并不总是打开,而只是在用户第一次通话时打开。奇怪的是,如果用户在应用程序运行时打电话但不是通过我的应用程序正常工作,扬声器每次都会打开。什么会导致这样的事情?
还有别的,即使应用程序没有运行,启动接收器的意图也会继续工作,所以当我拨打电话或接听电话时,尽管应用程序甚至没有运行,但它会转动扬声器。