2014-08-28 1 views
0

Я разрабатываю приложение, которое запускает будильник (Ringtone), когда я запускаю вызов, и он также устанавливает режим динамика. Поэтому я хотел бы остановить будильник, когда человек, которому я звоню, отвечает на звонок. Как я мог это достичь?Можно ли узнать, используя TelephonyManager (onCallStateChanged), когда другой человек отвечает на вызов?

Это мой код:

private PhoneStateListener phoneCallListener = new PhoneStateListener() { 

    private int prevCallState=TelephonyManager.CALL_STATE_IDLE; 

    public void onCallStateChanged(int state, String incomingNumber) { 
     try { 
      AudioManager audiomanager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
      switch (state) { 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        if (prevCallState == TelephonyManager.CALL_STATE_IDLE){       
         //Inicio de llamada saliente        
         audiomanager.setMode(AudioManager.MODE_IN_CALL); 
         audiomanager.setSpeakerphoneOn(true); 

        } 
        break; 
       case TelephonyManager.CALL_STATE_IDLE: 
        if (prevCallState == TelephonyManager.CALL_STATE_OFFHOOK){ 
         //Fin de llamada saliente 
         audiomanager.setSpeakerphoneOn(false); 
        } 
        break;     
      } 
     } catch (Exception e) { 

     } 
    prevCallState = state; 
    } 
}; 

Я был бы признателен за любую помощь. Thanxs много.

ответ

0

я подобные проблемы, не представляется возможным проверить, если человек подцепил телефон и его/ее телефон недоступны. Обращений от телефонной компании в gsm-сетях нет.

0
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button) findViewById(R.id.buttonCall); 

    // add PhoneStateListener 
    PhoneCallListener phoneListener = new PhoneCallListener(); 
    TelephonyManager telephonyManager = (TelephonyManager) this 
     .getSystemService(Context.TELEPHONY_SERVICE); 
    telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); 

    // add button listener 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

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

     } 

    }); 

} 

//monitor phone call activities 
private class PhoneCallListener extends PhoneStateListener { 

    private boolean isPhoneCalling = false; 

    String LOG_TAG = "LOGGING 123"; 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 

     if (TelephonyManager.CALL_STATE_RINGING == state) { 
      // phone ringing 
      Log.i(LOG_TAG, "RINGING, number: " + incomingNumber); 
     } 

     if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 
      // active 
      Log.i(LOG_TAG, "OFFHOOK"); 

      isPhoneCalling = true; 
     } 

     if (TelephonyManager.CALL_STATE_IDLE == state) { 
      // run when class initial and phone call ended, 
      // need detect flag from CALL_STATE_OFFHOOK 
      Log.i(LOG_TAG, "IDLE"); 

      if (isPhoneCalling) { 

       Log.i(LOG_TAG, "restart app"); 

       // restart app 
       Intent i = getBaseContext().getPackageManager() 
        .getLaunchIntentForPackage(
         getBaseContext().getPackageName()); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 

       isPhoneCalling = false; 
      } 

     } 
    } 
} 

, а также дать разрешение на Manifest

+0

Я хочу точно знать, когда другой человек отвечает на телефон, но я думаю, что @tamasJozsa правильно, и нет никакого способа, чтобы получить это состояние – Carl

Смежные вопросы