1. 程式人生 > >Android Studio 單刷《第一行程式碼》系列 07 —— Broadcast 廣播

Android Studio 單刷《第一行程式碼》系列 07 —— Broadcast 廣播

前情提要(Previously)

本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。
PS:其實我就是現學現賣,希望我能堅持刷完。

系列目錄在此:

系統廣播

Android 內建了很多系統級別的廣播,通過監聽這些廣播可以得到相關的系統狀態資訊。例如:

  • 系統啟動完成
  • 開啟、關閉飛航模式
  • 電量低
  • 記憶體不足
  • 網路變化

動態註冊

下面是監聽網路變化的例子,新建一個 BroadcastTest 專案。

  • 在 MainActivity 中定義一個內部類繼承自 BroadcastingReceiver,程式碼如下:
class NetworkChangeReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
    }
}
  • 在 onCreate() 方法中註冊,程式碼如下:
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    intentFilter = new IntentFilter();
    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    networkChangeReceiver = new NetworkChangeReceiver();
    registerReceiver(networkChangeReceiver, intentFilter);
}
  • 在 onDestroy() 方法中取消註冊,程式碼如下:
@Override
protected void onDestroy(){
    super.onDestroy();
    unregisterReceiver(networkChangeReceiver);
}
  • OK,執行一下,會發現程式啟動時會彈出一個提示;按 Home 回到主介面,並嘗試開關網路,會發現有提示彈出。

靜態註冊

下面是監聽系統啟動的例子。

  • 在 MainActivity 中新建一個 public 類繼承自 BroadcastingReceiver,程式碼如下:
public class BootCompleteReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context, "Boot complete", Toast.LENGTH_SHORT).show();
    }
}
  • 在 AndroidManifest.xml 中靜態註冊,增加 receiver 程式碼如下:
<receiver android:name=".MainActivity$BootCompleteReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>
  • 監聽系統開機廣播需要許可權,在 AndroidManifest.xml 中新增許可權宣告,程式碼如下:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
  • OK,執行程式,到設定 → 應用程式裡找到我們的 Broadcast,點選開啟會看到程式擁有了開機啟動的許可權。重啟機器或模擬器就可以收到開機廣播啦。

自定義廣播

下面是在程式中傳送自定義廣播並接收的例子。

  • 在 MainActivity 中新建一個 MyBroadcastReceiver,程式碼如下:
public static class MyBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
    }
}
  • 在 AndroidManifest.xml 中註冊,程式碼如下:
<receiver android:name=".MainActivity$MyBroadcastReceiver">
    <intent-filter>
        <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
    </intent-filter>
</receiver>

讓 MyBroadcastReceiver 接收一條 com.example.broadcasttest.MY_BROADCAST 的廣播。

  • 給 MainActivity 增加一個按鈕,並在 onCreate() 方法中新增點選事件,程式碼如下:
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
        sendBroadcast(intent);
    }
});
  • OK,執行一下,點選按鈕,就會收到我們發出的廣播。

本地廣播 LocalBroadcast

前面用到的都是全域性廣播,可以被其他任何程式接收到,會引起一些安全性問題。下面是一個傳送接收本地廣播的例子。

  • 定義一個 LocalReceiver ,程式碼如下:
public static class LocalReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();
    }
}
  • 使用 LocalBroadcastManager 來註冊接收器、傳送廣播,程式碼如下:
private IntentFilter intentFilter;
private LocalReceiver localReceiver;
private LocalBroadcastManager localBroadcastManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    localBroadcastManager = localBroadcastManager.getInstance(this);
    Button button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
            localBroadcastManager.sendBroadcast(intent);
        }
    });

    intentFilter = new IntentFilter();
    intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
    localReceiver = new LocalReceiver();
    localBroadcastManager.registerReceiver(localReceiver, intentFilter);
}
  • 別忘了取消註冊,程式碼如下:
@Override
protected void onDestroy(){
    super.onDestroy();
    localBroadcastManager.unregisterReceiver(localReceiver);
}
  • OK,執行一下,點選按鈕,就會接收到我們發出的本地廣播啦。

PS:本地廣播無法通過靜態註冊的方式接收。

其它(Miscellaneous)

最近家裡事情太多,除我之外的大人小孩都生病了。有大病也有小病,反正就是各種跑醫院,深深的感覺到健康的重要。

附送段子一個:
今天有人問我去過高消費場所麼?
我想了想問他:“醫院算麼?”

儘管我試圖在本文中儘量完整的進行描述,但受限於篇幅和我的個人水平,本文難免有所遺漏,歡迎在評論中指出。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!

關於作者(About Me)

本文謝絕轉載,如需轉載需徵得作者本人同意,謝謝。

相關推薦

Android Studio 第一程式碼系列 05 —— Fragment 基礎

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 在

Android Studio 第一程式碼系列 04 —— Activity 相關

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 系

Android Studio 第一程式碼系列 02 —— 日誌工具 LogCat

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 在

Android Studio 第一程式碼系列 01 —— 第一戰 HelloWorld

前言(Prologue) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持

Android Studio 第一程式碼系列 06 —— Fragment 生命週期

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望

Android Studio 第一程式碼系列目錄

前言(Prologue) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 關鍵詞 《第一行程式碼》:C

Android Studio 第一程式碼系列 07 —— Broadcast 廣播

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 系列目錄在此: 系

Android Studio 第一程式碼系列 03 —— Activity 基礎

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 在 Day 1、Da

Android 學習之《第一程式碼》第二版 筆記(十)探究碎片(二)

一個簡易版的新聞應用 同時相容手機和平板的應用程式 一、佈局 news_content_frag.xml額我的程式碼裡面是news_content_fragment.xml,圖片打錯了 二、程式碼編寫 1. 實體類(News.java) //新聞實體類 pub

Android 學習之《第一程式碼》第二版 筆記(九)探究碎片(一)

一、碎片 1. 碎片是什麼: 碎片(Fragment)是一種可以嵌入在活動當中的UI片段,能讓程式更加合理和充分地利用大螢幕的空間。(可以理解成迷你型活動) 2. 簡單用法: 在一個活動當中新增兩個碎片,並讓這兩個碎片平分活動空間。 1.)效果圖(沒錢買平板,CPU不支援

Android 學習之《第一程式碼》第二版 筆記(十一)詳解廣播機制(一)

一、廣播機制簡介 1. 四大元件之一 2. Android 提供了一套完整的API,允許應用程式自由地傳送和接收廣播。 A. 傳送廣播藉助Intent B. 接收廣播藉助廣播接收器(Broadcast Receiver) 3. 廣播型別: A. 標準廣播: 完全非同步執行

Android 學習之《第一程式碼》第二版 筆記(十二)詳解廣播機制(二)

廣播的最佳實踐——實現強制下線功能 思路:在介面上彈出一個對話方塊,讓使用者無法進行任何操作,必須點選對話方塊中的確定按鈕,然後回到登入介面即可。 一、效果圖 1. 登入介面並輸入賬號密碼 2. 登陸後的介面 3. 強制下線 4. 退回登陸的介面

Android 學習之《第一程式碼》第二版 筆記(十五)執行時許可權

一、執行時許可權功能 使用者不需要在安裝軟體的時候一次性授權所有申請的許可權,而是可以在軟體的使用過程中再對某一項許可權申請進行授權。 分類:普通許可權和危險許可權 我們在進行執行時許可權處理時使用的是許可權名,但是使用者一旦同意授權了,那麼該許可權所對應的

Android學習筆記(第一程式碼) 做一個簡單的登入介面

一.建立xml檔案 1.賬戶輸入框和密碼輸入框的編寫 <TextView android:layout_height="wrap_content" android:text="@string/LG_name" />

第一程式碼系列第二章——更多隱式Intent用法(開啟網頁)

效果圖 修改FirstActivity中按鈕事件 Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new OnClickListener() {

Android Studio 手動建立活動(Activity) 第一程式碼 第二章

活動概念:是一種可以包含使用者介面的元件,主要用於和使用者進行互動 手動建立活動:新建一個Android專案,專案名為ActivityTest,包名使用預設值com.example.activitytest 1.新建Android Studio專案 點選Start a

第一程式碼筆記系列-廣播1)android 廣播動態註冊和靜態註冊有什麼區別及基本用法

新建一個BroadcastTest專案,然後修改MainActivity中的程式碼,如下所示: public class MainActivity extends Activity { private IntentFilter intentFilter; private NetworkChange

Android studio 入門第二天《第一程式碼

一,建立和載入佈局 app/src/main/res/new/directory,建立一個名為layout的目錄,然後右擊/layout resource file/ 新增按鈕程式碼 <LinearLayout xmlns:android="http://sche

第一程式碼Android》學習總結第三章 自定義佈局與控制元件

1、View是Android中最基本的元件,它可以在螢幕上繪製一塊矩形區域,並在這塊區域內響應各種事件。所有控制元件都直接或間接繼承自View。 2、ViewGroup是一種特殊的View,可以包含很多子View和子ViewGroup,是一個用於放置控制元件和佈局的容器。所有佈局都直接或間

第一程式碼Android》學習總結第三章 常用控制元件使用方法

1、TextView match_parent:表示讓父佈局決定當前控制元件大小,當前控制元件大小與父佈局大小一樣。 wrap_content:表示讓空間內容決定當前控制元件大小讓當前控制元件大小能夠剛好包含住控制元件內的內容。         對控