由网友(小妖精)分享简介:我想使用动态注册的BroadcastReceiver ,有一个参考的活动所以它可以修改它的UI。我使用 Context.registerReceiver()的方法,但接收器的的onReceive()方法不会被调用。下面是示例code显示问题:包com.example;进口android.app.Activity;进口...![玩转Android 组件篇 Broadcast Receiver 播音接收器](/d/file/2023/09-17/7ab3aca5abc533fae5d80b3806b653b2.png)
我想使用动态注册的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();
}
}
![玩转Android 组件篇 Broadcast Receiver 播音接收器](/d/file/2023/09-17/7ab3aca5abc533fae5d80b3806b653b2.png)
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();
}
}
相关推荐
最新文章