iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
Mobile Development

Android Studio 學習交流系列 第 19

[Day19]Android學習-類別介紹-BroadcastReceiver

  • 分享至 

  • xImage
  •  

大家好!這篇要為大家分享BroadcastReceiver類別,內部有一個方法為onReceive可以負責接收廣播所傳送的資料,接者,我們就趕緊討論BroadcastReceiver類別!

BroadcastReceiver

BroadcastReceiver是一個基礎的類別用來接收或處理broadcast intents。

註冊

註冊廣播器有分兩種方式:
1.動態註冊
2.靜態註冊

動態註冊

手動註冊的方法,其註冊內容不是寫在AndroidManifest.xml內

常見註冊的方法為registerReceiver()

靜態註冊

其註冊內容事先定義在AndroidManifest.xml內

    //  AndroidManifest.xml
    
    <receiver
        android:name=".Receiver"
        android:enabled="true"/>

IntentFilter

IntentFilter攔截Intent所描述的動作且和攔截的Intent做匹配,IntentFilter攔截的項目有actions, categories,data。

例如:

        //      宣告要匹配的文字
         private static final String FILTER_ACTION="broadcast";
         
        //      建立IntentFilter物件
        IntentFilter filter=new IntentFilter();

        //      filter攔截訊息
        filter.addAction(FILTER_ACTION);
        
        //      filter攔截訊息與接收器一起註冊
        registerReceiver(reciever,filter);

實作廣播

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcastreceiver">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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" />
            </intent-filter>
        </activity>

        <!--靜態註冊-->
        <receiver android:name=".Reciever"
                android:enabled="true"/>

    </application>

</manifest>

Reciever.java

public class Reciever extends BroadcastReceiver {

    public void Receiver(){
        //        建構子
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("Debug","onReceive");

        Toast.makeText(context,"我接收到訊息了",Toast.LENGTH_SHORT).show();

    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
    //      攔截訊息
    private static final String FILTER_ACTION="broadcast";
    Reciever reciever=new Reciever();
    Intent intent =new Intent(FILTER_ACTION);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //      建立IntentFilter物件
        IntentFilter filter=new IntentFilter();

        //      filter攔截訊息
        filter.addAction(FILTER_ACTION);

        //      註冊廣播
        registerReceiver(reciever,filter);

        Log.d("Debug","註冊完畢");
    }

    @Override
    protected void onResume() {
        super.onResume();
        //   廣播
        sendBroadcast(intent);
        Log.d("Debug","傳送訊息");
    }

    @Override
    protected void onPause() {
        super.onPause();

        //      取消註冊廣播
        unregisterReceiver(reciever);
        Log.d("Debug","取消註冊");
    }
}

https://ithelp.ithome.com.tw/upload/images/20191001/20121149bmD8SiOxGL.png

完成了,廣播可以傳送訊息又可以保持相同的頁面,在更新資料上有很大的用途!

/images/emoticon/emoticon42.gif

Thank you for your time!


上一篇
[Day18]Android學習-資料庫介紹-資料庫實作(3)
下一篇
[Day20]Android學習-類別介紹-Notification
系列文
Android Studio 學習交流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言