在 Android 應用中,廣播是一種常用的消息傳遞機制。 Android 框架提供了多個標準廣播,如網路狀態變化、電量變化、時間變化等,在需要的時候我們可以註冊這些廣播,接收對應的事件。
除了使用標準廣播,應用還可以自定義廣播,達到應用內部通信的目的。在本篇文章中,我們將會如何創建自定義廣播、如何發送廣播和如何接收廣播。
一、廣播創建
創建自定義廣播需要以下兩個步驟:
1. 創建自定義的 BroadcastReceiver 清單文件
<receiver android:name=".MyReceiver" android:exported="false"> <intent-filter> <action android:name="com.example.mybroadcast.TEST" /> </intent-filter> </receiver>
2. 創建 BroadcastReceiver 類並實現相應邏輯
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 收到廣播後執行的邏輯 Toast.makeText(context, "收到自定義廣播", Toast.LENGTH_SHORT).show(); } }
在這個例子中,我們創建了一個 MyReceiver 類,並在清單文件中聲明了它。聲明的內容包括名字、廣播的 actions 和條件,以及是否允許其他應用程序接收此廣播。
在 MyReceiver 類中,我們實現了 onReceive() 方法,該方法會在廣播接收到時被調用。在這個例子中,我們只為收到廣播後顯示一個簡單的 Toast 消息。
二、廣播發送
發送廣播需要創建一個 Intent 對象,並在廣播發送前設置相關屬性,包括我們上面創建的廣播的 actions 和數據(可選)。
Intent intent = new Intent("com.example.mybroadcast.TEST"); intent.putExtra("test_data", "Test data"); sendBroadcast(intent);
在這個例子中,我們創建了一個 Intent 對象,並設置了 actions 和數據。通過調用 sendBroadcast() 方法可以將廣播發送到系統,系統會將廣播傳遞給所有註冊了這個廣播的 BroadcastReceiver。
三、廣播接收
接收廣播需要創建一個 BroadcastReceiver 對象,並在其 onReceive() 方法中添加我們的邏輯。
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("test_data"); // 收到廣播後執行的邏輯 Toast.makeText(context, "收到自定義廣播,數據為:" + data, Toast.LENGTH_SHORT).show(); } }
在這個例子中,我們在 onReceive() 方法中獲取我們發送的數據,並將其用於邏輯的執行。這裡,我們將接收到的數據顯示在 Toast 消息中。
四、總結
通過本篇文章,我們已經學會了如何自定義廣播,並在應用內部進行通信。自定義廣播能夠使我們更好的來處理應用內部的信息傳遞,在我們的應用中,我們可以利用廣播來實現許多功能,如應用內部狀態的同步和信息傳遞。
關於本文的完整代碼示例:
清單文件內容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mybroadcast"> <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"> <receiver android:name=".MyReceiver" android:exported="false"> <intent-filter> <action android:name="com.example.mybroadcast.TEST" /> </intent-filter> </receiver> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
MainActivity 類的內容:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button_send); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.mybroadcast.TEST"); intent.putExtra("test_data", "Test data"); sendBroadcast(intent); } }); } }
MyReceiver 類的內容:
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("test_data"); // 收到廣播後執行的邏輯 Toast.makeText(context, "收到自定義廣播,數據為:" + data, Toast.LENGTH_SHORT).show(); } }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242080.html