2.网络状态变化java
在某些场合,好比用户浏览网络信息时,网络忽然断开,咱们要及时地提醒用户网络已断开。要实现这个功能,咱们能够接收网络状态改变这样一条广播,当由链接状态变为断开状态时,系统就会发送一条广播,咱们接收到以后,再经过网络的状态作出相应的操做。下面就来实现一下这个功能:android
package com.scott.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; import android.widget.Toast; public class NetworkStateReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "network state changed."); if (!isNetworkAvailable(context)) { Toast.makeText(context, "network disconnected!", 0).show(); } } /** * 网络是否可用 * * @param context * @return */ public static boolean isNetworkAvailable(Context context) { ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] info = mgr.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } return false; } }
再注册一下这个接收者的信息:网络
<receiver android:name=".NetworkStateReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
由于在isNetworkAvailable方法中咱们使用到了网络状态相关的API,因此须要声明相关的权限才行,下面就是对应的权限声明:ide
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>测试
咱们能够测试一下,好比关闭WiFi,看看有什么效果。spa
3.电量变化.net
若是咱们阅读软件,多是全屏阅读,这个时候用户就看不到剩余的电量,咱们就能够为他们提供电量的信息。要想作到这一点,咱们须要接收一条电量变化的广播,而后获取百分比信息,这听上去挺简单的,咱们就来实现如下:code
package com.scott.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.BatteryManager; import android.util.Log; public class BatteryChangedReceiver extends BroadcastReceiver { private static final String TAG = "BatteryChangedReceiver"; @Override public void onReceive(Context context, Intent intent) { int currLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); //当前电量 int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1); //总电量 int percent = currLevel * 100 / total; Log.i(TAG, "battery: " + percent + "%"); } }
而后再注册一下广播接地址信息就能够了:orm
<receiver android:name=".BatteryChangedReceiver"> <intent-filter> <action android:name="android.intent.action.BATTERY_CHANGED"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
固然,有些时候咱们是要当即获取电量的,而不是等电量变化的广播,好比当阅读软件打开时当即显示出电池电量。咱们能够按如下方式获取:get
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 + "%");