《老罗Android》监听电量变化、Broadcast实现开机启动

来源:互联网 发布:ms sql server 版本 编辑:程序博客网 时间:2024/05/20 22:04
1. Broadcast监听电量变化
   如果我们阅读软件,可能是全屏阅读,这个时候用户就看不到剩余的电量,我们就可以为他们提供电量的信息。要想做到这一点,我们需要接收一条电量变化的广播,然后获取百分比信息.
public class MainActivity extends Activity {private BatteryBroadCastReceiver receiver;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) this.findViewById(R.id.textView1);}public class BatteryBroadCastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {// 获取当前电量int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);// 电量的总刻度int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);textView.setText("电池电量为" + ((level * 100) / scale) + "%");// if (level < 15) {// // dosomething/////// }}}}protected void onResume() {super.onResume();receiver = new BatteryBroadCastReceiver();// 监听电量变化的意图IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);registerReceiver(receiver, filter);}@Overrideprotected void onPause() {super.onPause();unregisterReceiver(receiver);}}
上面是动态注册,也可以采用静态注册:
<receiver android:name=".BatteryBroadCastReceiver">      <intent-filter>          <action android:name="android.intent.action.BATTERY_CHANGED"/>          <category android:name="android.intent.category.DEFAULT" />      </intent-filter>  </receiver>
在Manifest中添加授权:
   <uses-permission android:name="android.permission.BATTERY_STATS"/>
假如你在Activity.onResume()中注册了receiver广播,那么你要在Activtity.onPause()方法中注销它。
      当然,有些时候我们是要立即获取电量的,而不是等电量变化的广播,比如当阅读软件打开时立即显示出电池电量。我们可以按以下方式获取:
Intent batteryIntent = getApplicationContext().registerReceiver(null,          new IntentFilter(Intent.ACTION_BATTERY_CHANGED));  int currLevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);  int total = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);  int percent = currLevel * 100 / total;  Log.i("battery", "battery: " + percent + "%");  

2. Broadcast实现开机启动
    我们经常会有这样的应用场合,比如启动一个Activity,需要实现开机启动的功能。要实现这个功能,我们就可以订阅系统“启动完成”这条广播,接收到这条广播后我们就可以启动自己的服务了。
要实现开机启动,就要在 Manifest中监听:
添加权限:  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
注册 receiver: 

<receiver android:name=".StartBootComplete" >      <intent-filter>       <action android:name="android.intent.action.BOOT_COMPLETED" ></action> <!-- 注册开机广播地址-->       <category android:name="android.intent.category.DEFAULT" ></category>      </intent-filter></receiver>
实现一个广播接收者:
public class StartBootComplete extends BroadcastReceiver {static final String action_boot="android.intent.action.BOOT_COMPLETED"; @Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(action_boot)){             Intent bootStartIntent=new Intent(context,MainActivity.class);             bootStartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);             context.startActivity(bootStartIntent);         }}}
  也可以启动一个service,如消息推送服务:
public void onReceive(Context context, Intent intent) {          Intent service = new Intent(context, MsgPushService.class);          context.startService(service);          Log.i(TAG, "Boot Complete. Starting MsgPushService...");  }  
在这个服务中可以制定你想要的操作:
public class MsgPushService extends Service {      @Override      public void onCreate() {          super.onCreate();          Log.i(TAG, "onCreate called.");      }            @Override      public int onStartCommand(Intent intent, int flags, int startId) {          Log.i(TAG, "onStartCommand called.");          return super.onStartCommand(intent, flags, startId);      }        @Override      public IBinder onBind(Intent arg0) {          return null;      }  } 
记得要在Manifest中加入你的service声明:
<service android:name=".MsgPushService"/>  

1 0
原创粉丝点击