標籤:
1.廣播接受者
>什麼是廣播。收音機。
電台:對外發送訊號。
收音機:接收電台的訊號。
>在android系統裡面,系統有很多重要的事件: 電池電量低,插入充電器,sd卡被移除,有電話打出去,有簡訊發送進來。
使用廣播機制步驟:
(1)買收音機
public class SDStatusReceiver extends BroadcastReceiver
(2)裝電池
<receiver android:name="com.itheima.sdstatus.SDStatusReceiver" >
(3)調頻道,調到你關心的頻道
<intent-filter >
<!-- 3.調頻道 -->
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
<data android:scheme="file"/>
</intent-filter>
2.廣播事件的兩種類型。
(1) 有序廣播
> 接受者有優先順序,接受按照先後順序接受,類似中央向下傳檔案。高優先順序的接受者可以把廣播訊息給攔截,還可以修改廣播的資料。
(2)無序廣播
> 接受者沒有優先順序,沒有先後順序。類似聽廣播,看新聞聯播。不可以被攔截。
> sendBroadcast(intent)
3.有序廣播和無序廣播沒有什麼本質的區別,
相同點:
無序廣播也是按照先後順序接受的
不同點:
無序廣播如果攔截,會攔截失敗。
不可以修改資料。
4.下面查看這個廣播接收者案例:
下面是工程:
這裡我們MainActivity.java和activity_main.xml檔案,我們不做什麼修改。
主要還是按照上面的使用廣播機制步驟:
(1)買收音機,自訂一個SDStatusReceiver類,它繼承自BroadcastReceiver(BroadcastReceiver是提供的基類API介面)
onReceive方法是接收到廣播執行的操作內容。
package com.itheima.sdstatus;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;/** * 1.買好了一個收音機 */public class SDStatusReceiver extends BroadcastReceiver { // 用來接收廣播事件的,一旦廣播訊息到來,就會執行onreceive方法 @Override public void onReceive(Context context, Intent intent) {
//public String getAction():返回一個action的名稱 String action = intent.getAction(); if ("android.intent.action.MEDIA_UNMOUNTED".equals(action)) { System.out.println("哈哈哈----SD卡被卸載了。"); Toast.makeText(context, "哈哈哈----SD卡被卸載了,頭像暫不可用", 0).show(); }else if("android.intent.action.MEDIA_MOUNTED".equals(action)){ Toast.makeText(context, "哈哈哈----SD卡被掛載了", 0).show(); } }}
(2)(3)裝電池、調頻道,在AndroidManifest.xml資訊清單檔中進行配置。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.sdstatus" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itheima.sdstatus.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 2.裝電池 --> <receiver android:name="com.itheima.sdstatus.SDStatusReceiver" > <intent-filter > <!-- 3.調頻道,這裡我們可以設定多個action,監聽多個廣播頻道 --> <action android:name="android.intent.action.MEDIA_MOUNTED"/> <action android:name="android.intent.action.MEDIA_UNMOUNTED"/> <data android:scheme="file"/> </intent-filter> </receiver> </application></manifest>
注意:就算是我們的應用程式沒有啟動運行,只要SD卡卸載或者安裝,就會促使應用程式啟動線程運行,這樣的話運行onReceive()裡面的代碼。這裡採用是註冊事件的機制,一旦系統檢查到SD卡卸載或者安裝,Android系統會主動註冊監聽(SD卡卸載或者安裝)的應用程式。
Android(java)學習筆記173:Sd卡狀態廣播接收者