0

사용자가 내 앱을 통해 즐겨 찾는 연락처에 전화 할 수있는 앱을 만들고 있습니다. 통화가 시작되면 스피커가 켜집니다. 이 인 텐트를 사용하여 전화를 걸려면.스피커를 켜는 설정이 항상 작동하지 않는 경우

   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); 
     } 
    } 
} 

을 시작하는 의도가있다.

문제는 스피커가 항상 켜지지는 않지만 사용자가 만드는 첫 번째 통화에서만 발생한다는 것입니다. 기묘한 부분은 앱이 실행 중일 때 전화를 걸지만 내 앱을 통하지 않고 전화를 걸면 매번 스피커가 켜진다는 것입니다. 그런 일이 발생할 수있는 요인은 무엇입니까?

그리고 앱이 실행되지 않을 때도 수신자를 시작하는 인 텐트가 계속 작동하는 것과 같기 때문에 전화를 걸거나 전화를받을 때 앱이 실행되고 있지는 않지만 스피커가 켜집니다.

답변

1

좋아, 그럼 내가 일하게. 그것은 단지 하나 개의 동작

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

을 가지고 있도록

나는 텐트 필터를 변경했습니다과 TelephonyManager가 Offhook 상태에있을 때 나는 오른쪽 스피커를 설정하기 전에 audioManager 모드

audioManager.setMode(AudioManager.MODE_IN_CALL); 

설정 , 그리고 그것은 작동합니다.

업데이트 그래서 여전히 앱이 실행되지 않았을 때 일하고 있었다, 그러나 나는이 질문에 My Broadcast receiver get execute even if my application is not working 을 발견하고 내가 내 주요 활동에 수신기를 등록하고 활동의들의 OnDestroy에서 등록을 취소해야한다고 깨달았다

.