Java – how do I set alerts that are always displayed?
Now, I just want to get some kind of battery status indication when the user accesses the application For example, if the device is plugged in, the device should say charge and its level If the device is unplugged, nothing should be displayed If the device is not charged and the battery is low, a low battery indication shall be displayed
I set up most of the code, but the problem is, for example, if I run the application and the device is plugged in, the charging instruction will be displayed on the screen If I unplug the device, charging will no longer be displayed, but if I re plug the device, charging will still not be displayed A battery alarm shall always be displayed when the device is plugged in or unplugged and the battery is low or low The message change should always be displayed
So this is my broadcast receiver:
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() { @Override public void onReceive(Context arg0,Intent intent) { //Battery level int level = intent.getIntExtra("level",0); //Plugged in Status int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1); //Battery Status int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,-1); //If the device is charging or contains a full status,it's charging boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; //If the device isCharging and plugged in,then show that the battery is charging TextView batteryTextView = ((TextView) findViewById(R.id.charging)); TextView batteryLowTextView = ((TextView) findViewById(R.id.low_battery)); ImageView batteryLowImageView= ((ImageView) findViewById(R.id.low_battery_icon)); ImageView batteryImageView =((ImageView) findViewById(R.id.charging_battery_icon)); if (isCharging && plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB) { //Gets the 'last synced' string and sets to datetime of the last sync Resources resources = context.getResources(); String chargingString = String.format(resources.getString(R.string.charging),level); //Dynamically sets the value of the battery level batteryLowTextView.setVisibility(TextView.INVISIBLE); batteryLowImageView.setVisibility(ImageView.INVISIBLE); batteryTextView.setText(chargingString + "%"); } else if (level < LOW_BATTERY_LEVEL && !isCharging) { Resources resources = context.getResources(); String lowBatteryString = String.format(resources.getString(R.string.low_battery)); batteryTextView.setVisibility(TextView.INVISIBLE); batteryImageView.setVisibility(ImageView.INVISIBLE); batteryLowTextView.setText(lowBatteryString); } else if (!isCharging && level > LOW_BATTERY_LEVEL) { //do nothing batteryTextView.setVisibility(TextView.GONE); batteryImageView.setVisibility(ImageView.GONE); } } };
In my oncreate method, I call
//calls registerReceiver to receive the broadcast for the state of battery this.registerReceiver(this.mBatInfoReceiver,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
So, I want to know what I did wrong? Bools?
Solution
>There are many loopholes in your if then else logic (and there are problems mentioned by @ Vikram) This may cause the receiver to end up doing nothing Try to simplify the logic to remove all vulnerabilities
This is an alternative to if then else logic:
if (isCharging) { //Gets the 'last synced' string and sets to datetime of the last sync Resources resources = context.getResources(); String chargingString = String.format(resources.getString(R.string.charging),level); //Dynamically sets the value of the battery level batteryLowTextView.setVisibility(TextView.INVISIBLE); batteryLowImageView.setVisibility(ImageView.INVISIBLE); batteryTextView.setText(chargingString + "%"); batteryTextView.setVisibility(TextView.VISIBLE); batteryImageView.setVisibility(ImageView.VISIBLE); } else if (level <= LOW_BATTERY_LEVEL) { Resources resources = context.getResources(); String lowBatteryString = String.format(resources.getString(R.string.low_battery)); batteryTextView.setVisibility(TextView.INVISIBLE); batteryImageView.setVisibility(ImageView.INVISIBLE); batteryLowTextView.setText(lowBatteryString); batteryLowTextView.setVisibility(TextView.VISIBLE); batteryLowImageView.setVisibility(ImageView.VISIBLE); } else { //show nothing batteryTextView.setVisibility(TextView.GONE); batteryImageView.setVisibility(ImageView.GONE); batteryLowTextView.setVisibility(TextView.GONE); batteryLowImageView.setVisibility(ImageView.GONE); }