Android:程序注册接收器不工作
我有一个BroadcastReceiver,当我将它作为一个单独的类并在清单中注册时,它工作得很好。但是,我需要它作为一个内部类,因为如果应用程序在前台,我想刷新部分UI,为此,我必须以编程方式注册它(因为为了在清单文件中注册它,它必须是静态的,因此不能访问非静态的外部类方法) 我试着这样做,但它什么也没做(为了测试,我改变了小时和分钟) 这是作为内部类的BroadcastReceiver:Android:程序注册接收器不工作,android,broadcastreceiver,Android,Broadcastreceiver,我有一个BroadcastReceiver,当我将它作为一个单独的类并在清单中注册时,它工作得很好。但是,我需要它作为一个内部类,因为如果应用程序在前台,我想刷新部分UI,为此,我必须以编程方式注册它(因为为了在清单文件中注册它,它必须是静态的,因此不能访问非静态的外部类方法) 我试着这样做,但它什么也没做(为了测试,我改变了小时和分钟) 这是作为内部类的BroadcastReceiver: public class DayCheckReceiver extends BroadcastRecei
public class DayCheckReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//load
SharedPreferences sharedPrefs = context.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPrefs.getString(TASKLIST_FILE, null);
Type type = new TypeToken<ArrayList<TaskItem>>() {
}.getType();
mTaskList = gson.fromJson(json, type);
//modifications
if (mTaskList != null && mTaskList.size() > 0) {
for (int i = 0; i < mTaskList.size(); i++) {
mTaskList.get(i).shiftDayChecks();
mTaskList.get(i).resetTimeLeft();
}
}
//save
SharedPreferences.Editor editor = sharedPrefs.edit();
gson = new Gson();
json = gson.toJson(mTaskList);
editor.putString(TASKLIST_FILE, json);
editor.apply();
tasksFragment.loadTaskList();
tasksFragment.updateTaskList();
}
}
公共类DayCheckReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
//装载
SharedReferences SharedReferences=context.getSharedReferences(共享首选项,context.MODE\u私有);
Gson Gson=新的Gson();
String json=sharedPrefs.getString(任务列表文件,null);
Type Type=new-TypeToken(){
}.getType();
mTaskList=gson.fromJson(json,类型);
//修改
if(mTaskList!=null&&mTaskList.size()>0){
对于(int i=0;i
您需要修改注册行
registerReceiver(mReceiver, new IntentFilter(action));
其中,mReceiver
是BroadcastReceiver的对象,action
是BroadcastReceiver将监听的字符串
然后,在执行任何其他操作之前,您需要检查操作
public static final String CONSTANT_ACTION = "broadcast_action";
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (null != intent && CONSTANT_ACTION.equals(intent.getAction()))
// Write your code here
}
};
这就是你转播这件事的方式
Intent intent = new Intent(CONSTANT_ACTION);
sendBroadcast(intent);
您需要修改您的注册行
registerReceiver(mReceiver, new IntentFilter(action));
其中,mReceiver
是BroadcastReceiver的对象,action
是BroadcastReceiver将监听的字符串
然后,在执行任何其他操作之前,您需要检查操作
public static final String CONSTANT_ACTION = "broadcast_action";
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (null != intent && CONSTANT_ACTION.equals(intent.getAction()))
// Write your code here
}
};
这就是你转播这件事的方式
Intent intent = new Intent(CONSTANT_ACTION);
sendBroadcast(intent);
您需要在intentfilter中执行一些操作,比如说
newintentfilter(“报警”)
。当使用发送广播时,您也将使用相同的操作,使用sendBroadcast(新意图(“警报”))
您需要在意图过滤器中设置一些操作,例如newintentfilter(“警报”)
。使用sendBroadcast(新意图(“报警”))
空IntentFilter
发送广播时,也将使用相同的操作?我从来没有这样试过,但我觉得这不管用。对于广播,您通常对某个动作进行过滤,并将该动作作为参数传递给filter和intentWell的构造函数。当我在manifext.xml中注册该动作时,它在没有intent筛选器的情况下工作。你能告诉我我会在里面放些什么吗?一个空的IntentFilter
?我从来没有这样试过,但我觉得这不管用。对于广播,您通常对某个动作进行过滤,并将该动作作为参数传递给filter和intentWell的构造函数。当我在manifext.xml中注册该动作时,它在没有intent筛选器的情况下工作。你能告诉我我会在那里放什么吗?我得到java.lang.RuntimeException:接收广播意图时出错{act=DAY\u CHECK\u ACTION flg=0x10}如果我只是把这个常量放到新的IntentI中,我也不明白我在哪里引用了正确的广播类。我现在意识到错误来自哪里:调用应该更新UI的方法。广播的注册工作正在进行,但将该方法放入其中存在问题。我可能会想出来。@Fr4nkWh1te不要忘记在活动被销毁时注销BroadcastReceiver。即使我希望它在应用程序未运行时运行?我得到java.lang.RuntimeException:接收广播意图时出错{act=DAY\u CHECK\u ACTION flg=0x10}如果我只是把这个常量放到新的IntentI中,我也不明白我在哪里引用了正确的广播类。我现在意识到错误来自哪里:调用应该更新UI的方法。广播的注册工作正在进行,但将该方法放入其中存在问题。我可能会想出来。@Fr4nkWh1te不要忘记在活动被销毁时注销BroadcastReceiver。即使我希望它在应用程序未运行时运行?嘿,我试图更改它,但我得到:接收广播意图时出错{act=DAY\u CHECK\u ACTION flg=0x10}知道吗?我现在意识到错误来自哪里:调用应该更新UI的方法。广播的注册工作正在进行,但将该方法放入其中存在问题。我可能会想出来。嘿,我试着改变它,但我得到:错误接收广播意图{act=DAY\u CHECK\u ACTION flg=0x10}有什么想法吗?我现在意识到错误来自哪里:调用应该更新UI的方法。广播的注册工作正在进行,但将该方法放入其中存在问题。我可能会弄明白的。