Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發BroadcastReceiver詳解

Android開發BroadcastReceiver詳解

編輯:關於Android編程

Android 內置了很多系統級別的廣播。
廣播的注冊方式有兩種,一種是代碼注冊,另一種是在AndroidManifest.xml 中注冊。當然,前者稱為動態注冊,後者稱為靜態注冊。
下面我們就使用動態注冊來了解一下的廣播的注冊和使用。

創建一個工程BroadcastTest,在MainActivity中創建一個意圖過濾器,指定監測網絡狀態的action。
創建一個NetWorkReceiver類繼承BroadcastReceiver,重寫onReceive()方法。然後注冊廣播。代碼如下:
public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private NetWorkReceiver netWorkReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //意圖過濾器
        intentFilter = new IntentFilter();
        //設置動作
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        //創建NetWorkReceiver對象
        netWorkReceiver = new NetWorkReceiver();
        //注冊廣播
        registerReceiver(netWorkReceiver,intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(netWorkReceiver);
    }

    class NetWorkReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(MainActivity.this,"網絡發生變化了........",Toast.LENGTH_LONG).show();
        }
    }
}
運行程序,進去之後點擊Home鍵返回到桌面,記得不要點擊Back鍵,點擊Back鍵該應用程序就會銷毀。
到桌面之後點擊設置圖標,進入到流量控制的界面。如圖:

圖片<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> 然後點擊關閉流量按鈕。效果如圖:

效果

當然,為了更好的用戶體驗,需要提示用戶當前是否有網絡可用。所以修改NetWorkReceiver類中的代碼如下:
class NetWorkReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
         //   Toast.makeText(MainActivity.this,"網絡發生變化了........",Toast.LENGTH_LONG).show();

            ConnectivityManager connectionManager = (ConnectivityManager)
                    getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isAvailable()) {
                Toast.makeText(MainActivity.this, "當前網絡可用。。。。。。。。。。。。。",
                        Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(MainActivity.this, "當前網絡不可用。。。。。。。。。。。。",
                        Toast.LENGTH_LONG).show();
            }
        }
    }
由於這個會監聽網絡狀態,所以需要添加權限。
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

重新運行程序,然後進入到流量開關界面,點擊開關,效果如下:

這裡寫圖片描述

這裡寫圖片描述

以上就是通過動態注冊廣播來實現網絡狀態的監聽效果。

下面是一個手機電量監控的例子

創建工程BatteryTest,布局文件不懂,修改MainActivity代碼如下,和上述的步驟相似:

public class MainActivity extends AppCompatActivity {

    private BroadcastReceiver broadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.BATTERY_CHANGED");
        broadcastReceiver = new BroadcastReceiver(){
             @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("BroadcastReceiver", "剩余電量: " + percent + "%");
             }
         };
        registerReceiver(broadcastReceiver,intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(broadcastReceiver);
    }
}
運行程序,點擊模擬器右側的 ...按鈕,進入到Battery界面,如圖:

這裡寫圖片描述

然後拖動電量條,Log顯示如下:

15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 99%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 95%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 93%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 91%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 89%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 86%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 84%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 81%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 78%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 75%
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 70%

至此,我們就完成了手機電量狀態的監聽。

使用了動態注冊,當然也需要使用靜態注冊來實戰一下。

我們就做一個開機啟動的功能,首先創建一個工程StartingUpTest,新建一個類StartingUpReceiver。 這裡我只是彈了一個吐司,當然你也在這裡實現開機啟動的功能。

public class StartingUpReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"我開機啟動了......",Toast.LENGTH_LONG).show();
    }
}

在AndroidManifest.xml文件中進行注冊。

<application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN">

                <category android:name="android.intent.category.LAUNCHER">
            </category></action></intent-filter>
        </activity>

        <receiver android:name=".StartingUpReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
    </application>

別忘了權限喔。

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

把程序運行到模擬器上,然後重啟模擬器,效果如下:

這裡寫圖片描述

我們的這個開機啟動到這也就完成了。如有錯誤請指出,謝謝!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved