2017-01-11 15 views
1

я должен признать событие широковещания после запускаКак распознать состояние телефона получил ли исходящий вызов или нет

  1. Из исходящих вызовов,

  2. амбулаторного происходит вызов, полученный в конец приемника и

  3. Аут происходит вызов повесить

Я могу получить события входящих вызовов, но не выходить из событий вызова.

Вот мой код, пожалуйста, выясните мою проблему и дайте решение.

Заранее спасибо

@Override 
public void onReceive(Context context, Intent intent) { 

    // We listen to two intents. The new outgoing call only tells us of an 
    // outgoing call. We use it to get the number. 
    if (intent.getAction() 
      .equals("android.intent.action.NEW_OUTGOING_CALL")) { 
     savedNumber = intent.getExtras() 
       .getString("android.intent.extra.PHONE_NUMBER"); 
    } else { 
     String stateStr = intent.getExtras() 
       .getString(TelephonyManager.EXTRA_STATE); 
     String number = intent.getExtras() 
       .getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
     int state = 0; 
     if (stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      state = TelephonyManager.CALL_STATE_IDLE; 
     } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
      state = TelephonyManager.CALL_STATE_OFFHOOK; 
     } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      state = TelephonyManager.CALL_STATE_RINGING; 
     } 

     onCallStateChanged(context, state, number); 
    } 
} 

ответ

0

Ниже кода поможет вам получить чистый код состояния работы в OnCreate

StateListener phoneStateListener = new StateListener(); 
TelephonyManager telephonyManager =(TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE); 

создать внутренний класс для прослушивания состояния телефона. разрешение

class StateListener extends PhoneStateListener { 
@Override 
public void onCallStateChanged(int state, String incomingNumber) { 
super.onCallStateChanged(state, incomingNumber); 
switch (state) { 
    case TelephonyManager.CALL_STATE_RINGING: 
     break; 
    case TelephonyManager.CALL_STATE_OFFHOOK: 
     System.out.println("call Activity off hook"); 
     LockScreenActivity.this.finish(); 
     break; 
    case TelephonyManager.CALL_STATE_IDLE: 
     break; 
} 
} 
}; 

Набор в файле манифеста

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
0

1) Выход происходит вызов начал,

  • Вы можете признать ли исходящий вызов запускается на не используя ниже код

     case TelephonyManager.CALL_STATE_RINGING: 
          isIncoming = true; 
          callStartTime = new Date(); 
          savedNumber = number; 
          onIncomingCallReceived(context, number, callStartTime); 
          break; 
         case TelephonyManager.CALL_STATE_OFFHOOK: 
          //Transition of ringing->offhook are pickups of incoming calls. Nothing done on them 
          if (lastState != TelephonyManager.CALL_STATE_RINGING) { 
           isIncoming = false; 
           callStartTime = new Date(); 
           startRecording(context,"_Out_",number); 
           onOutgoingCallStarted(context, savedNumber, callStartTime); 
          } 
          else 
          { 
           isIncoming = true; 
           callStartTime = new Date(); 
           startRecording(context,"_In_",savedNumber); 
           onIncomingCallAnswered(context, number, callStartTime); 
          } 
    
          break; 
    

2) исходящий вызов получил в конце приемника и 3) исходящий вызов повесить

Однако вы не можете распознать вызов подобран другой стороны, используя любой прямой API, как андроид не обеспечивает любой прямой api, чтобы обнаружить это.