gpt4 book ai didi

java - 在非 Activity 类中注册 BroadcastReceiver

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:00 26 4
gpt4 key购买 nike

我必须在我必须在 Activity 中调用的类中使用 BroadcastReceiver。显然,我必须注册 BroadcastReceiver 然后我写了这段代码:

    public class MyClassName {

Context context;
BroadcastReceiver batteryInfoReceiverLevel;

public void CheckBatteryLevel() {

Log.d("App", "I'm in the CheckBatteryLevel");

context.registerReceiver(batteryInfoReceiverLevel, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

batteryInfoReceiverLevel = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {

Log.d("Apps", "I'm in the onReceive");

int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);

if(level <=100) {
//Do something

}

else if(level >=100) {
//Do something
}

}

};

}

}

当我运行代码时,应用程序崩溃给出“Error receiving broadcast Intent { act=android.intent.action.BATTERY_CHANGED flg=0x60000010 (has extras) } 并且崩溃行是

context.registerReceiver(batteryInfoReceiverLevel, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

我该如何解决?

最佳答案

这里有两个问题:

ρяσѕρєя K 指出了第一个:

通过向方法 CheckBatteryLevel() 或构造函数添加参数来初始化上下文我的类(class)

public class MyClass(Context ctx) {
context = ctx;
}

其次,您必须在初始化 BroadcastReceiver 之后调用 registerReceiver(..)。否则将为空且未注册。

总而言之,应该这样做:

public class MyClassName {

BroadcastReceiver batteryInfoReceiverLevel;

public void CheckBatteryLevel(Context ctx) {

Log.d("App", "I'm in the CheckBatteryLevel");

batteryInfoReceiverLevel = new BroadcastReceiver() { // init your Receiver

@Override
public void onReceive(Context context, Intent intent) {

Log.d("Apps", "I'm in the onReceive");
int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
if(level <=100) {
//Do something
} else if(level >=100) {
//Do something
}
}
};
// register your Receiver after initialization
ctx.registerReceiver(batteryInfoReceiverLevel,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
}

关于java - 在非 Activity 类中注册 BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com