0

I want to get battery level percentage from one activity to another.

I can't get it from "BroadcastReciver" and also I can't extract it from text view.

this is my Broadcast Reciever :

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);      

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

        float percentage = level/ (float) scale;                          

        int mProgressStatus = (int)((percentage)*100);                       

        bl.setText("" + mProgressStatus + "%");        

    }
};

And this is how I am extracting it:

public int batt(){

        String input = bl.getText().toString();
        input = input.replace( "\n", "" );
        input = input.replace( " ", "" );
        int total = getValue(input);


        return total;
    }

    public int getValue(String line){
        int  value = 0;

        if( line.contains( "+" ) ) {
            String[] lines = line.split( "\\+" );
            value += getValue( lines[0] );

            for( int i = 1; i < lines.length; i++ )
                value += getValue( lines[i] );

            return value;
        }

        if( line.contains( "-" ) ) {
            String[] lines = line.split( "\\-" );
            value += getValue( lines[0] );

            for( int i = 1; i < lines.length; i++ )
                value -= getValue( lines[i] );

            return value;
        }

        if( line.contains( "*" ) ) {
            String[] lines = line.split( "\\*" );
            value += getValue( lines[0] );

            for( int i = 1; i < lines.length; i++ )
                value *= getValue( lines[i] );

            return value;
        }

        if( line.contains( "/" ) ) {
            String[] lines = line.split( "\\/" );
            value += getValue( lines[0] );

            for( int i = 1; i < lines.length; i++ )
                value /= getValue( lines[i] );

            return value;
        }

        return Integer.parseInt( line );
    } 
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245

2 Answers2

2

Android 2.0 or higher, you can make the following changes to the battery level method of the BatterLevelActivity class:

private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                batterLevel.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

More details about whole project: battery-level-and-state.

Or Simply you can check if the above does not working,SirDarius gave answer, broadcast receiver for the ACTION_BATTERY_CHANGED intent is set up dynamically.

public class Main extends Activity {
  private TextView batteryTxt;
  private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context ctxt, Intent intent) {
      int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
      batteryTxt.setText(String.valueOf(level) + "%");
    }
  };

  @Override
  public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.main);
    batteryTxt = (TextView) this.findViewById(R.id.batteryTxt);
    this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
  }
}
Horrorgoogle
  • 7,858
  • 11
  • 48
  • 81
0

To transfer data from one activity to other, you can either do this

Intent intent = new Intent(getBaseContext(), NewActivity.class);
intent.putExtra("BATTERY_LEVEL", mProgressStatus);
startActivity(intent);

Then in new activity

String s = getIntent().getStringExtra("BATTERY_LEVEL");

OR
You can use sharedpreferences
You can read more about shared preferences here https://developer.android.com/reference/android/content/SharedPreferences.html

Tanuj Yadav
  • 1,259
  • 13
  • 21