如何使用registerReceiver方法? [英] How to use registerReceiver method?
本文介绍了如何使用registerReceiver方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使用动态注册的BroadcastReceiver
,有一个参考的活动
所以它可以修改它的UI。我使用 Context.registerReceiver()
的方法,但接收器的的onReceive()
方法不会被调用。
下面是示例code显示问题:
包com.example;
进口android.app.Activity;
进口android.app.IntentService;
进口android.content.BroadcastReceiver;
进口android.content.Context;
进口android.content.Intent;
进口android.content.IntentFilter;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.KeyEvent;
公共类RegisterBroadcastReceiver延伸活动{
公共静态类MyIntentService扩展IntentService {
公共MyIntentService(){
超级(MyIntentService.class.getSimpleName());
}
@覆盖
保护无效onHandleIntent(意向意图){
意图I =新的意图(这一点,MyBroadcastReceiver.class);
sendBroadcast(ⅰ);
}
}
公共类MyBroadcastReceiver扩展的BroadcastReceiver {
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
Log.i(MyBroadcastReceiver.class.getSimpleName(),
接收到的广播);
}
}
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
}
MyBroadcastReceiver mReceiver =新MyBroadcastReceiver();
@覆盖
保护无效onResume(){
super.onResume();
IntentFilter的IntentFilter的=新的IntentFilter();
registerReceiver(mReceiver,IntentFilter的);
}
@覆盖
公共布尔的onkeydown(INT键code,KeyEvent的事件){
如果(键code == KeyEvent.KEY code_MENU){
意图I =新的意图(这一点,MyIntentService.class);
startService(ⅰ);
}
返回super.onKeyDown(键code,事件);
}
@覆盖
保护无效的onPause(){
super.onPause();
unregisterReceiver(mReceiver);
}
}
解决方案
整个code。如果有人需要它。
无效报警(上下文的背景下,日历C)
{
AlarmManager ALRM =(AlarmManager)context.getSystemService(ALARM_SERVICE);
最后弦乐SOME_ACTION =com.android.mytabs.MytabsActivity.AlarmReceiver;
IntentFilter的IntentFilter的=新的IntentFilter(SOME_ACTION);
AlarmReceiver mReceiver =新AlarmReceiver();
context.registerReceiver(mReceiver,IntentFilter的);
意图I2 =新的意图(SOME_ACTION);
PendingIntent圆周率= PendingIntent.getBroadcast(上下文,0,I2,0);
alrm.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),PI);
Toast.makeText(背景下,增加,Toast.LENGTH_LONG).show();
}
类AlarmReceiver扩展的BroadcastReceiver {
@覆盖
公共无效的onReceive(上下文的背景下,意图ARG1){
// TODO自动生成方法存根
Toast.makeText(背景下,开始,Toast.LENGTH_LONG).show();
}
}
I want to use dynamically registered BroadcastReceiver
that has a reference to an Activity
so it can modify its UI. I am using Context.registerReceiver()
method but receiver's onReceive()
method is never called.
Here is the sample code showing the problem:
package com.example;
import android.app.Activity;
import android.app.IntentService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
public class RegisterBroadcastReceiver extends Activity {
public static class MyIntentService extends IntentService {
public MyIntentService() {
super(MyIntentService.class.getSimpleName());
}
@Override
protected void onHandleIntent(Intent intent) {
Intent i = new Intent(this, MyBroadcastReceiver.class);
sendBroadcast(i);
}
}
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(MyBroadcastReceiver.class.getSimpleName(),
"received broadcast");
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
MyBroadcastReceiver mReceiver = new MyBroadcastReceiver();
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
registerReceiver(mReceiver, intentFilter);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
Intent i = new Intent(this, MyIntentService.class);
startService(i);
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
}
解决方案
The whole code if somebody need it.
void Alarm(Context context, Calendar c)
{
AlarmManager alrm = (AlarmManager)context.getSystemService(ALARM_SERVICE);
final String SOME_ACTION = "com.android.mytabs.MytabsActivity.AlarmReceiver";
IntentFilter intentFilter = new IntentFilter(SOME_ACTION);
AlarmReceiver mReceiver = new AlarmReceiver();
context.registerReceiver(mReceiver, intentFilter);
Intent i2 = new Intent(SOME_ACTION);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i2, 0);
alrm.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
Toast.makeText(context, "Added", Toast.LENGTH_LONG).show();
}
class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1) {
// TODO Auto-generated method stub
Toast.makeText(context, "Started", Toast.LENGTH_LONG).show();
}
}
这篇关于如何使用registerReceiver方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文