在 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/n/242080.html
微信扫一扫
支付宝扫一扫