在Android中如何為廣播接收器註冊自定義Intent過濾器?
在進入示例之前,我們應該瞭解Android中的Intent過濾器是什麼。Intent過濾器是IntentFilter類的例項。在使用隱式Intent時,Intent過濾器很有用,它不會在Java程式碼中處理,我們必須在AndroidManifest.xml中設定它。Android必須知道它正在啟動什麼樣的Intent,因此Intent過濾器向Android提供關於Intent和動作的資訊。
啟動Intent之前,Android將測試action測試、category測試和data測試。本示例演示如何在Android中將自定義Intent過濾器用於廣播接收器。
步驟1 - 在Android Studio中建立一個新專案,轉到檔案⇒新建專案,並填寫所有必需的詳細資訊以建立一個新專案。
步驟2 - 將以下程式碼新增到res/layout/activity_main.xml。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/buton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="intent filter Register button" /> <Button android:id="@+id/buton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="send Data" /> </LinearLayout>
在上面的程式碼中,我們有兩個按鈕,一個是註冊Intent,另一個是向廣播發送資料。
package com.example.andy.myapplication; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.RadioButton; import android.widget.Toast; public class MainActivity extends AppCompatActivity { RadioButton radioButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button button = findViewById(R.id.buton); final Button send = findViewById(R.id.buton1); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent("com.example.andy.CUSTOM_INTENT"); sendBroadcast(intent); } }); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { registerReceiver(mMessageReceiver,new IntentFilter("com.example.andy.CUSTOM_INTENT")); } }); } private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Extract data included in the Intent String message = intent.getAction(); Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show(); } }; @Override protected void onPause() { super.onPause(); unregisterReceiver(mMessageReceiver); } }
單擊按鈕時,它將使用如下所示的自定義廣播操作註冊接收器:
registerReceiver(mMessageReceiver,new IntentFilter("com.example.andy.CUSTOM_INTENT"));
這是一個動態廣播接收器,因此我們應該在onPause()中取消註冊,如下所示:
unregisterReceiver(mMessageReceiver);
還有一個按鈕用於傳送廣播。它將向註冊的接收器傳送操作和資料,如下所示:
Intent intent=new Intent("com.example.andy.CUSTOM_INTENT"); sendBroadcast(intent);
這是一個動態廣播註冊,因此我們不需要為廣播接收器建立一個新的接收器檔案,因此我們已在同一個Activity中宣告廣播接收器,如下所示:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Extract data included in the Intent String message = intent.getAction(); Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show(); } };
在上面的程式碼中,它將從Intent中獲取資料作為操作並在Toast上列印。讓我們嘗試執行您的應用程式。我假設您已將您的實際Android移動裝置連線到您的計算機。要從Android Studio執行應用程式,請開啟您的一個專案活動檔案,然後單擊工具欄中的執行圖示。選擇您的移動裝置作為選項,然後檢查您的移動裝置,它將顯示您的預設螢幕:
首先,我們透過單擊“Intent過濾器註冊按鈕”註冊接收器,然後單擊發送資料以顯示Toast,如下所示:
點選這裡下載專案程式碼