3

我有一个应用程序可以监听来电,并根据号码向该号码发送短信。一切都在传入onReceive被呼叫并发送短信,但一旦呼叫被被叫或呼叫方拒绝,onReceive再次呼叫并再次发送短信。我怎样才能限制这一点,所以当接到电话时才onReceive被叫?

以下是我的代码的简单版本:

我的广播接收器

导入 android.content.BroadcastReceiver;导入android.content.Context;导入android.content.Intent;导入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

您需要注册一个PhoneStateListener.LISTEN_CALL_STATE以便在 BroadcastReceiver 中只接收来电:

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 回答