50e990c64f
Change-Id: Idc55a0b368c1d2c1e7d4999601b739dd57f08eb3
65 lines
2.5 KiB
Plaintext
65 lines
2.5 KiB
Plaintext
page.title=Manipulating Broadcast Receivers On Demand
|
|
parent.title=Optimizing Battery Life
|
|
parent.link=index.html
|
|
|
|
trainingnavtop=true
|
|
|
|
previous.title=Determining and Monitoring the Connectivity Status
|
|
previous.link=connectivity-monitoring.html
|
|
|
|
@jd:body
|
|
|
|
<div id="tb-wrapper">
|
|
<div id="tb">
|
|
|
|
<h2>This lesson teaches you to</h2>
|
|
<ol>
|
|
<li><a href="#ToggleReceivers">Toggle and Cascade State Change Receivers to Improve
|
|
Efficiency</a></li>
|
|
</ol>
|
|
|
|
|
|
<h2>You should also read</h2>
|
|
<ul>
|
|
<li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<p>The simplest way to monitor device state changes is to create a {@link
|
|
android.content.BroadcastReceiver} for each state you're monitoring and register each of them in
|
|
your application manifest. Then within each of these receivers you simply reschedule your recurring
|
|
alarms based on the current device state.</p>
|
|
|
|
<p>A side-effect of this approach is that your app will wake the device each time any of these
|
|
receivers is triggered—potentially much more frequently than required.</p>
|
|
|
|
<p>A better approach is to disable or enable the broadcast receivers at runtime. That way you can
|
|
use the receivers you declared in the manifest as passive alarms that are triggered by system events
|
|
only when necessary.</p>
|
|
|
|
|
|
<h2 id="ToggleReceivers">Toggle and Cascade State Change Receivers to Improve Efficiency </h2>
|
|
|
|
<p>Use can use the {@link android.content.pm.PackageManager} to toggle the enabled state on any
|
|
component defined in the manifest, including whichever broadcast receivers you wish to enable or
|
|
disable as shown in the snippet below:</p>
|
|
|
|
<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
|
|
|
|
PackageManager pm = context.getPackageManager();
|
|
|
|
pm.setComponentEnabledSetting(receiver,
|
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
|
PackageManager.DONT_KILL_APP)</pre>
|
|
|
|
<p>Using this technique, if you determine that connectivity has been lost, you can disable all of
|
|
your receivers except the connectivity-change receiver. Conversely, once you are connected you can
|
|
stop listening for connectivity changes and simply check to see if you're online immediately before
|
|
performing an update and rescheduling a recurring update alarm.</p>
|
|
|
|
<p>You can use the same technique to delay a download that requires higher bandwidth to complete.
|
|
Simply enable a broadcast receiver that listens for connectivity changes and initiates the
|
|
download only after you are connected to Wi-Fi.</p>
|