我已经看到了几个如何实现BroadCastReceiver的例子,但我应该如何实现一个服务,必须对一些待处理的Intent(例如来电)作出反应...... 其实我很想知道但是在一个活动中。但是在一个活动中,你显然有一个扩展服务或活动的类,所以它不能扩展BroadCastReceiver ... 看起来我们不能制作“平台感知”服务和/或工作之外的活动?服务和BroadCastReceiver
9
A
回答
12
要注册的活动收到了一定的意图您需要:
// 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;
}
}
然后你还需要一个意图过滤器添加到您的清单:
<activity android:name=".MyActivity" android:label="@string/name" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</activity>
4
您可以创建一个内部类
class A extends Activity {
BroadcastReceiver r = new BroadcastReceiver(){
// code to handle broadcase
}
}
该类会收到事件,你可以传递到主处理器,或者只是调用一些外部方法
+0
它是否需要成为内部类? – n611x007 2013-10-30 11:47:04
4
其实你可以通过添加监听器TelephonyManager
你在你的服务定义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);
在这种情况下非常简单。
相关问题
- 1. 蓝牙服务器和BroadCastReceiver
- 2. BroadcastReceiver与服务
- 3. Android BroadcastReceiver与服务
- 4. 注册broadcastReceiver服务
- 5. Android服务+ BroadcastReceiver,PhoneStateListener
- 6. 绑定服务BroadcastReceiver
- 7. 帮助使用appwidget与broadcastreceiver和服务?
- 8. AlarmManager,BroadcastReceiver和服务不工作
- 9. 在BroadcastReceiver中同时停止BroadcastReceiver和服务
- 10. BroadcastReceiver->服务 - >通知
- 11. 使用BroadCastReceiver实现服务
- 12. 实现BroadcastReceiver即服务 - Android
- 13. 服务,IntentService,BroadcastReceiver或AlarmManager?
- 14. 从BroadcastReceiver启动服务
- 15. 从BroadcastReceiver启动服务
- 16. 从BroadcastReceiver驱动服务API
- 17. 正在服务的BroadcastReceiver
- 18. BroadcastReceiver在服务没有反应
- 19. 发送一个BroadcastReceiver意图服务
- 20. 服务不从BroadcastReceiver运行? - Android
- 21. 无法从BroadcastReceiver中终止服务
- 22. 从BroadcastReceiver调用后台服务
- 23. 如何从broadcastReceiver激活服务?
- 24. BroadcastReceiver一段时间后启动服务
- 25. 来自broadcastReceiver的服务呼叫功能
- 26. 从BroadcastReceiver开始从事服务活动
- 27. 内部创建BroadcastReceiver时发出服务
- 28. 结合本地服务从一个BroadcastReceiver
- 29. 来自BroadcastReceiver的Android调用服务
- 30. Android BroadcastReceiver等待服务启动或将WakeLock传输到服务?
如果您创建了BroadcastReceiver的新实例,然后在您的代码中注册它,提供了一个意图过滤器对象,则不需要在清单文件的活动定义中创建。 –
hara
2010-06-02 16:45:20