Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
264 views
in Technique[技术] by (71.8m points)

android - Service and a BroadCastReceiver

I have seen several examples of how to implement a BroadCastReceiver, but how should I implement a Service that has to react to some pending Intent (for example incoming phone call)... Actually I was wondering about the same "problem" but in an Activity.. You obviously have a class which extends a Service or an Activity) so it cannot also extend BroadCastReceiver... It looks like we cannot make "platform-aware" services and/or Activties?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To register an activity to receive a certain intent you need to:

// Flag if receiver is registered 
private boolean mReceiversRegistered = false;

// I think this is the broadcast you need for something like an incoming call
private String INCOMING_CALL_ACTION = "android.intent.action.PHONE_STATE";

// Define a handler and a broadcast receiver
private final Handler mHandler = new Handler();
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    // Handle reciever
    String mAction = intent.getAction();

    if(mAction.equals(INCOMING_CALL_ACTION) {
      // Do your thing   
    }
}

@Override
protected void onResume() {
  super.onResume();

  // Register Sync Recievers
  IntentFilter intentToReceiveFilter = new IntentFilter();
  intentToReceiveFilter.addAction(INCOMING_CALL_ACTION);
  this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler);
  mReceiversRegistered = true;
}

@Override
public void onPause() {
  super.onPause();

  // Make sure you unregister your receivers when you pause your activity
  if(mReceiversRegistered) {
    unregisterReceiver(mIntentReceiver);
    mReceiversRegistered = false;
  }
}

Then you will also need to add an intent-filter to your manifest:

 <activity android:name=".MyActivity" android:label="@string/name" >
   <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
   </intent-filter>
 </activity>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...