我想獲得在自定義textview中工作的BroadcastReceiver。我用這個代碼,但沒有收到任何東西。然而,setText(「準備好接收」)工作正常。如何在自定義TextView中註冊broadcastreceiver
public class ArefinBatteryTextView extends TextView {
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
setText("received");
}
};
public ArefinBatteryTextView(Context context) {
super(context);
}
public ArefinBatteryTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.GREEN);
setTextSize(75);
setText("Ready for receiving");
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
public ArefinBatteryTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
protected void onDraw (Canvas canvas) {
super.onDraw(canvas);
}
}
如何正確註冊接收器以使其正常工作?
「我想得到一個在自定義文本視圖中工作的BroadcastReceiver」 - 恕我直言,任何負責「TextView」的活動都應負責「BroadcastReceiver」。您可能希望考慮更多地瞭解UI架構模式(MVC,MVP,MVVM等);一個'TextView'不應該負責根據模型變化(在這種情況下是電池電量)自行更新。 – CommonsWare
你必須在你的活動中註冊一個broadcastReceiver而不是視圖內。 – Opiatefuchs