ユーザーがアプリを通じてお気に入りの連絡先に電話できるアプリを作成しています。通話が開始されると、スピーカーがオンになります。このインテントを使用して電話をかけるには。
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 は必要に応じてスピーカーをオンにしています。
問題は、スピーカーが常にオンになるとは限らず、ユーザーが最初に電話をかけたときだけオンになることです。奇妙な部分は、アプリの実行中にユーザーが電話をかけたが、私のアプリを介してではなく、正しく動作すると、毎回スピーカーがオンになることです。何がそのようなことを引き起こす可能性がありますか?
また、アプリが実行されていないときでも、レシーバーを起動するインテントが機能し続けているようなものです。そのため、アプリが実行されていなくても、電話をかけたり電話をかけたりすると、スピーカーがオンになります。