user2533604
user2533604

Reputation: 665

Not getting the flow of below program

public class MainActivity extends Activity {

public TextView batteryTxt;
private BroadcastReceiver receiver;

BroadcastReceiver mybroadcast = new BroadcastReceiver() {


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

        int batterylevel = intent.getIntExtra("level", 0);

        batteryTxt.setText("Battery Level: " + Integer.toString(batterylevel) + "%");
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    batteryTxt = (TextView) findViewById(R.id.textView1);

    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(mybroadcast, filter);
}

}

Eventhough i have not used intent.putExtra() in above program, how intent.getIntExtra("level", 0) is working?

Upvotes: 0

Views: 53

Answers (3)

Nathaniel D. Waggoner
Nathaniel D. Waggoner

Reputation: 2886

You need to read the documentation on BroadcastReceivers and Intents.

http://developer.android.com/reference/android/content/BroadcastReceiver.html

http://developer.android.com/reference/android/content/Intent.html

Essentially these two mechanisms act as Android's preferred method of transferring state between applications and processes.

In short:

Broadcast Receivers are registered for Intents, and whenever an intent is "Fired" or "Launched" which corresponds to the "Mime-Type" for which your intent is registered, that Broadcast Receiver will be activated. At this time your Broadcast Receiver will be given the opportunity to handle state passed to it via the intent which was sent.

In your case:

You have created a Broadcast Receiver which is registered (presumably) for the Battery Service intents. That means every time the battery service sends out an Intent to all interested parties you'll receive an a message. The Battery Service includes in it's intent certain data which is useful to an application,service or process which is interested in the state of the Battery. In this case it is the "level".

Upvotes: 0

Jesus Christ
Jesus Christ

Reputation: 457

The intent is what your BroadcastReceiver receives from the system, when the action "ACTION_BATTERY_CHANGED" is performed. It's the information about battery level in this case, and "0" is the default value (in case there isn't extra named "level"). The intent is not created by any activity in this app.

Upvotes: 0

hichris123
hichris123

Reputation: 10223

It's an IntentFilter, which sends an Intent to the BatteryManager to check ACTION_BATTERY_CHANGED. The BatteryManager then calls intent.putIntExtra to put the int that you're reciving in the Intent.

Upvotes: 1

Related Questions