我看过几个实现BroadCastReceiver的例子,但是如果我需要实现一个必须要响应某些挂起Intent(例如来电)的服务,该如何实现呢?... 实际上,我也在想同样的“问题”,但是在一个Activity中... 显然你有一个类扩展了Service或者Activity,所以它不能再扩展BroadCastReceiver了... 看起来我们无法创建“平台感知”的服务和/或活动?
我看过几个实现BroadCastReceiver的例子,但是如果我需要实现一个必须要响应某些挂起Intent(例如来电)的服务,该如何实现呢?... 实际上,我也在想同样的“问题”,但是在一个Activity中... 显然你有一个类扩展了Service或者Activity,所以它不能再扩展BroadCastReceiver了... 看起来我们无法创建“平台感知”的服务和/或活动?
要注册一个接收特定意图的活动,您需要:
// 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;
}
}
然后您还需要在清单文件中添加一个intent-filter:
<activity android:name=".MyActivity" android:label="@string/name" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</activity>
实际上,您可以通过向TelephonyManager添加侦听器来对接收到的电话进行反应。
您可以在Service/Activity中定义PhoneStateListener。
private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
case TelephonyManager.CALL_STATE_IDLE:
break;
}
}
};
然后在onCreate方法中:
mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
最后,在onDestroy中清除监听器:
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
您可以创建一个内部类
class A extends Activity {
BroadcastReceiver r = new BroadcastReceiver(){
// code to handle broadcase
}
}
这个类将会接收事件,你可以将这些事件传递给主处理器,或者直接调用一些外部方法。