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 + "%");