3

私は着信をリッスンするアプリを持っており、番号に応じてその番号にSMSを送信します。着信時にすべてが機能しておりonReceive、SMSが送信されますが、着信者によって通話が拒否されるとすぐに、発信者onReceiveが再度呼び出され、SMSが再度送信されます。どうすればこれを制限できますか?それで、呼び出しが受信されたときにのみ、onReceiveが呼び出されますか?

以下は私のコードの単純なバージョンです:

私のBroadcastReceiver

import android.content.BroadcastReceiver; android.content.Contextをインポートします; import android.content.Intent; import android.util.Log;

public class Telephone extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub

        Log.d("onReceive", "Got Call Signal");

    }

}

マニフェストで:

         <receiver android:name="com.example.testbroadcastreceiver.Telephone" >
            <intent-filter android:priority="1000" >
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

使用した許可:

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

2 に答える 2

0

次のように論理的に処理できます。

public class ServiceReceiver extends BroadcastReceiver {

  @Override    
  public void onReceive(Context context, Intent intent) {
    MyPhoneStateListener phoneListener=new MyPhoneStateListener();
    TelephonyManager telephony = (TelephonyManager) 
    context.getSystemService(Context.TELEPHONY_SERVICE);
    telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
  }
}

public class MyPhoneStateListener extends PhoneStateListener {
  public void onCallStateChanged(int state,String incomingNumber){
  switch(state){
    case TelephonyManager.CALL_STATE_IDLE:
      Log.d("DEBUG", "IDLE");
    break;
    case TelephonyManager.CALL_STATE_OFFHOOK:
      Log.d("DEBUG", "OFFHOOK");
    break;
    case TelephonyManager.CALL_STATE_RINGING:
      Log.d("DEBUG", "RINGING");
//place your sms code here
    break;
    }
  } 
}
于 2012-12-06T07:27:27.410 に答える
0

BroadcastReceiver内の着信のみを受信するには、 PhoneStateListener.LISTEN_CALL_STATEを次のように登録する必要があります。

public class Telephone extends BroadcastReceiver {

    private Context mContext;
    private Intent mIntent;

    @Override
    public void onReceive(Context context, Intent intent) {
        mContext = context;
        mIntent = intent;
        TelephonyManager tm = (TelephonyManager)              
                 context.getSystemService(Context.TELEPHONY_SERVICE);
        int events = PhoneStateListener.LISTEN_CALL_STATE;
        tm.listen(phoneStateListener, events);
    }

    private final PhoneStateListener phoneStateListener = 
                                                new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            String callState = "UNKNOWN";
            switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:

                break;
            case TelephonyManager.CALL_STATE_RINGING:
                                // DO YOUR WORK HERE
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                          if(incomingNumber.length() >0){

                                  // incoming call
                                 // DO YOUR WORK HERE when call is received
                                 // SEND SMS HERE
                            }
                           else{
                                      // outgoing call
                              }
                break;
            }

            super.onCallStateChanged(state, incomingNumber);
        }
    };

}
于 2012-12-06T07:27:52.257 に答える