사용자가 내 앱을 통해 즐겨 찾는 연락처에 전화 할 수있는 앱을 만들고 있습니다. 통화가 시작되면 스피커가 켜집니다. 이 인 텐트를 사용하여 전화를 걸려면.스피커를 켜는 설정이 항상 작동하지 않는 경우
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel: "+contactnum.get(0)));
startActivity(callIntent);
과 외출 호출이있을 때 당신이 onReceive이 필요한 경우에 스피커를 돌고 볼 수있는 바와 같이, 브로드 캐스트 리시버에게
<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);
}
}
}
을 시작하는 의도가있다.
문제는 스피커가 항상 켜지지는 않지만 사용자가 만드는 첫 번째 통화에서만 발생한다는 것입니다. 기묘한 부분은 앱이 실행 중일 때 전화를 걸지만 내 앱을 통하지 않고 전화를 걸면 매번 스피커가 켜진다는 것입니다. 그런 일이 발생할 수있는 요인은 무엇입니까?
그리고 앱이 실행되지 않을 때도 수신자를 시작하는 인 텐트가 계속 작동하는 것과 같기 때문에 전화를 걸거나 전화를받을 때 앱이 실행되고 있지는 않지만 스피커가 켜집니다.