2011-06-20 7 views
10

は電話をかけられるが、非常に正確な制限があるAndroidアプリでは、 「不在着信」となっています。私が望むのは、電話が鳴る瞬間に ちょうど電話を切ることができることです。不在着信をするには?

今のところ、電話機が電話を開始して電話を開始することがわかりましたが、数秒間、 ネットワーク上には何も表示されません。これは私がやりたいことです。

どうすればこの瞬間を止めることができますか?

答えて

2

で「鳴動」が開始される。私は一度試してみましたが、以下のコードをチェックしてみてください:

ダイヤルアウト時にIDLEからOFFHOOKへ、発信時にIDLEに発信が開始されます。 唯一の回避策は、発信呼び出しが開始されて数秒が経過した後にタイマーを使用して電話を切ることですが、その後電話が鳴り始める保証はありません。

public abstract class PhoneCallReceiver extends BroadcastReceiver { 
     static CallStartEndDetector listener; 



    @Override 
    public void onReceive(Context context, Intent intent) { 
     savedContext = context; 
     if(listener == null){ 
      listener = new CallStartEndDetector(); 
     } 


      TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 



    public class CallStartEndDetector extends PhoneStateListener { 
     int lastState = TelephonyManager.CALL_STATE_IDLE; 
     boolean isIncoming; 

     public PhonecallStartEndDetector() {} 


     //Incoming call- IDLE to RINGING when it rings, to OFFHOOK when it's answered, to IDLE when hung up 
     //Outgoing call- from IDLE to OFFHOOK when dialed out, to IDLE when hunged up 

     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      super.onCallStateChanged(state, incomingNumber); 
      if(lastState == state){ 
       //No change 
       return; 
      } 
      switch (state) { 
       case TelephonyManager.CALL_STATE_RINGING: 
        isIncoming = true; 
        //incoming call started 
        break; 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        //Transition of ringing->offhook are pickups of incoming calls. Nothing down on them 
        if(lastState != TelephonyManager.CALL_STATE_RINGING){ 
         isIncoming = false; 
         //outgoing call started 
        } 
        break; 
       case TelephonyManager.CALL_STATE_IDLE: 
        //End of call(Idle). The type depends on the previous state(s) 
        if(lastState == TelephonyManager.CALL_STATE_RINGING){ 
         // missed call 
        } 
        else if(isIncoming){ 
          //incoming call ended 
        } 
        else{ 
         //outgoing call ended            
        } 
        break; 
      } 
      lastState = state; 
     } 

    } 



} 
1

利用onCallStateChanged()、発信コールがアップhungedされたときに電話が始まるが発信呼び出しを行うとしたときにのみ検出することができますが、ときに判断することはできませんPhoneStateListener経由onCallStateChanged()を使用PhoneStateListener

関連する問題