1

私はこれが質問であることを知っています。ブロードキャストレシーバーを使用し、android.intent.action.PHONE_STATEを使用する

レシーバータグでは、電話の動作を知ることができます。しかし、それが着信か発信かをどのように識別できますか?

これが私のコードです

@Override
public void onReceive(Context context, Intent intent) 
{
    this.context = context ;
    System.out.println(":::called onReceiver:::");
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    telephony.listen(phoneCallListener, PhoneStateListener.LISTEN_CALL_STATE);
}
private final PhoneStateListener phoneCallListener = new PhoneStateListener() 
{
        @Override
        public void onCallStateChanged(int state, String incomingNumber) 
        {
            switch(state)
            {
            case TelephonyManager.CALL_STATE_RINGING:
                 isRinging = true;
                 break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                 if (isRinging) 
                 {
                     hasAttended = true ;
                     isRinging = false;
                 } 
                 break;
            case TelephonyManager.CALL_STATE_IDLE:
                 if (hasAttended)
                 {
                     isCallEnded = true ;
                     hasAttended = false;
                 }
                 break;
            }
            if(isCallEnded)
            {
                isCallEnded=false;
                Intent callIntent = new Intent(context.getApplicationContext(),MyActivity.class);
                callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(callIntent);
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    };

ここでは、phoneCallListenerオブジェクトが作成されるたびに、onCallStateChangedの呼び出し率が1つずつ増加します。

4

1 に答える 1

1

これは、ブロードキャストレシーバーと、呼び出しの状態に応じて表示されるさまざまなトーストを作成するandroid.intent.action.PHONE_STATEの両方を使用する便利なチュートリアルです。これが機能するようになると、呼び出しが着信または発信のいずれかであるときに、コードを操作して必要なことを実行できるようになります

最初にあなたのクラスはしなければなりませんextend BroadcastReceiver

次に、電話の状態をリッスンするメソッドを作成する必要があります...PhoneStateListener電話の状態が変化したときにリッスンします

switch case次に、着信か発信かによって、簡単に電話に出ることができます。

編集

あなたがする必要があるのは、前の状態が「鳴っている」かどうかをチェックするためにいくつかのコードを書くことです。現在の状態がアイドル状態で、前の状態が鳴っていた場合、彼らは通話をキャンセル/不在にしました。現在の状態がオフフックで、前の状態が鳴っていた場合、彼らは呼び出しに応答しました。

switch(state){
        case TelephonyManager.CALL_STATE_RINGING:
             Log.i(LOG_TAG, "RINGING");
             wasRinging = true;
             break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
             Log.i(LOG_TAG, "OFFHOOK");

             if (!wasRinging) {
                 // Start your new activity
             } else {
                 // Cancel your old activity
             }

             // this should be the last piece of code before the break
             wasRinging = true;
             break;
        case TelephonyManager.CALL_STATE_IDLE:
             Log.i(LOG_TAG, "IDLE");
             // this should be the last piece of code before the break
             wasRinging = true;
             break;
    }
于 2012-05-23T11:34:37.127 に答える