Android:程序注册接收器不工作

Android:程序注册接收器不工作,android,broadcastreceiver,Android,Broadcastreceiver,我有一个BroadcastReceiver,当我将它作为一个单独的类并在清单中注册时,它工作得很好。但是,我需要它作为一个内部类,因为如果应用程序在前台,我想刷新部分UI,为此,我必须以编程方式注册它(因为为了在清单文件中注册它,它必须是静态的,因此不能访问非静态的外部类方法) 我试着这样做,但它什么也没做(为了测试,我改变了小时和分钟) 这是作为内部类的BroadcastReceiver: public class DayCheckReceiver extends BroadcastRecei

我有一个BroadcastReceiver,当我将它作为一个单独的类并在清单中注册时,它工作得很好。但是,我需要它作为一个内部类,因为如果应用程序在前台,我想刷新部分UI,为此,我必须以编程方式注册它(因为为了在清单文件中注册它,它必须是静态的,因此不能访问非静态的外部类方法)

我试着这样做,但它什么也没做(为了测试,我改变了小时和分钟)

这是作为内部类的BroadcastReceiver:

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的方法。广播的注册工作正在进行,但将该方法放入其中存在问题。我可能会弄明白的。