如何将值从广播接收器发送到 Already started Activity
How to send the value from broadcast receiver to Already started Activity
我是 android 开发的新手,请帮助我解决问题。
为了获得电池百分比我已经完成了这个程序并且能够烤
广播接收器中的电池百分比
我面临的问题又无法在 Main Activity 中得到它。
因为我的应用中所有的activity都需要使用广播
电池电量接收器
所以我将其作为单独的 java class 文件保存,而不是将其放在 Activity 本身中。
如何将值从广播接收器发送到动态注册的 main activity 以及从哪里获取电池值
MainActivity
public class MainActivity extends AppCompatActivity {
public static final String BATTERY_BROADCAST_ACTION = Intent.ACTION_BATTERY_CHANGED;
Context context;
private IntentFilter mIntentFilter;
private BroadcastReceiver myReceiver;
TextView txtBattery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btnCall);
txtBattery = (TextView) findViewById(R.id.txtBattery);
myReceiver = new MyReceiver();
registerReceiver(myReceiver, new
IntentFilter(BATTERY_BROADCAST_ACTION));
}}
BroadCast Receiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Bundle extras = intent.getExtras();
int level = extras.getInt(BatteryManager.EXTRA_LEVEL);
Toast.makeText(context,"Battery = " + level,Toast.LENGTH_SHORT).show();
}}
您可以使用事件总线系统来解决您的问题。您可以使用 EventBus
首先,为电池电量变化创建事件:
public class BatteryLevelEvent {
private int batteryLevel;
public BatteryLevelEvent(int batteryLevel) {
this.batteryLevel = batteryLevel;
}
public int getBatteryLevel() {
return this.batteryLevel;
}
}
其次,每当电池电量发生变化时,post 事件:
public class MyReceiver extends BroadcastReceiver {
...
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
int level = extras.getInt(BatteryManager.EXTRA_LEVEL);
EventBus.getDefault().post(new BatteryLevelEvent(level));
}
}
现在,您需要接收事件。每个 activity 想要接收事件的人都需要先 注册 。您可以通过这样的方式注册它:
public class YourActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
...
EventBus.getDefault().register(this);
}
// need to unregister when activity is not in foreground.
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
}
最后,您需要订阅才能接收活动:
public class YourActivity extends AppCompatActivity {
...
@Subscribe
public void onMessageEvent(BatteryLevelEvent event) {
int batteryLevel = event.getBatteryLevel();
// do something with the battery level here.
}
}
如果你想接收所有activity的Event,你可以用寄存器创建一个base class activity,注销,并在上面订阅。然后你可以从那个基础 class 派生出你所有的东西 activity。
我是 android 开发的新手,请帮助我解决问题。
为了获得电池百分比我已经完成了这个程序并且能够烤 广播接收器中的电池百分比
我面临的问题又无法在 Main Activity 中得到它。
因为我的应用中所有的activity都需要使用广播 电池电量接收器
所以我将其作为单独的 java class 文件保存,而不是将其放在 Activity 本身中。
如何将值从广播接收器发送到动态注册的 main activity 以及从哪里获取电池值
MainActivity
public class MainActivity extends AppCompatActivity {
public static final String BATTERY_BROADCAST_ACTION = Intent.ACTION_BATTERY_CHANGED;
Context context;
private IntentFilter mIntentFilter;
private BroadcastReceiver myReceiver;
TextView txtBattery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btnCall);
txtBattery = (TextView) findViewById(R.id.txtBattery);
myReceiver = new MyReceiver();
registerReceiver(myReceiver, new
IntentFilter(BATTERY_BROADCAST_ACTION));
}}
BroadCast Receiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Bundle extras = intent.getExtras();
int level = extras.getInt(BatteryManager.EXTRA_LEVEL);
Toast.makeText(context,"Battery = " + level,Toast.LENGTH_SHORT).show();
}}
您可以使用事件总线系统来解决您的问题。您可以使用 EventBus
首先,为电池电量变化创建事件:
public class BatteryLevelEvent {
private int batteryLevel;
public BatteryLevelEvent(int batteryLevel) {
this.batteryLevel = batteryLevel;
}
public int getBatteryLevel() {
return this.batteryLevel;
}
}
其次,每当电池电量发生变化时,post 事件:
public class MyReceiver extends BroadcastReceiver {
...
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
int level = extras.getInt(BatteryManager.EXTRA_LEVEL);
EventBus.getDefault().post(new BatteryLevelEvent(level));
}
}
现在,您需要接收事件。每个 activity 想要接收事件的人都需要先 注册 。您可以通过这样的方式注册它:
public class YourActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
...
EventBus.getDefault().register(this);
}
// need to unregister when activity is not in foreground.
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
}
最后,您需要订阅才能接收活动:
public class YourActivity extends AppCompatActivity {
...
@Subscribe
public void onMessageEvent(BatteryLevelEvent event) {
int batteryLevel = event.getBatteryLevel();
// do something with the battery level here.
}
}
如果你想接收所有activity的Event,你可以用寄存器创建一个base class activity,注销,并在上面订阅。然后你可以从那个基础 class 派生出你所有的东西 activity。