广播消息机制用于进行系统级别的消息通知,每个应用程序可以对感兴趣的广播进行注册,并且将接收广播的方法定义在广播接收器中(Broadcast)。
广播可以分为标准广播和有序广播。
注册广播的方法可以动态注册(在代码中进行注册)和静态注册(在清单文件中注册)
我们也可以发布自己定义的广播,并接收。
1.动态注册
动态注册的过程:
1)先自己定义一个广播接收者,继承Broadcast。重写onReceive()方法。
2)创建IntentFilter类,并添加要收听的广播。
3)创建自定义的广播接收者,并进行注册。(一般都是在oncreate()方法中实现)
4)取消注册广播接收者。(一般在onDestroy()方法中实现。
下面看具体实现的代码。
1 public class MainActivity extends AppCompatActivity { 2 3 4 IntentFilter intentFilter; 5 MyBroadcastReceiver myBroadcastReceiver; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 12 intentFilter = new IntentFilter(); 13 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); 14 15 myBroadcastReceiver = new MyBroadcastReceiver(); 16 registerReceiver(myBroadcastReceiver,intentFilter); 17 } 18 19 20 21 22 @Override 23 protected void onDestroy() { 24 super.onDestroy(); 25 unregisterReceiver(myBroadcastReceiver); 26 27 } 28 29 class MyBroadcastReceiver extends BroadcastReceiver{ 30 31 @Override 32 public void onReceive(Context context, Intent intent) { 33 Toast.makeText(context,"network is changed",Toast.LENGTH_LONG).show(); 34 } 35 } 36 }
2.静态注册
静态注册过程比动态注册简单,只需要2步
1)自己定义一个接收者类,继承Broadcast。
2)在清单文件(AndroidManifest.XML)文件中添加相应的要接受的广播。
具体的代码如下
Java代码
1 public class PowerConnReceiver extends BroadcastReceiver { 2 @Override 3 public void onReceive(Context context, Intent intent) { 4 5 Toast.makeText(context,"power is connected ",Toast.LENGTH_LONG).show(); 6 } 7 }
PowerConnReceiver
AndroidManifest.XML中的代码
1 <application 2 android:allowBackup="true" 3 android:icon="@mipmap/ic_launcher" 4 android:label="@string/app_name" 5 android:theme="@style/AppTheme" > 6 <activity 7 android:name=".MainActivity" 8 android:label="@string/app_name" > 9 <intent-filter> 10 <action android:name="android.intent.action.MAIN" /> 11 12 <category android:name="android.intent.category.LAUNCHER" /> 13 </intent-filter> 14 15 16 </activity> 17 18 <receiver android:name=".PowerConnReceiver"> 19 <intent-filter> 20 <action android:name="ANDROID.INTENT.ACTION.ACTION_POWER_CONNECTED"/> 21 </intent-filter> 22 </receiver> 23 </application>
我们还可以自己定义广播,进行发送。不同的进程之间可以通过广播通讯,当然这是不被提倡的。
时间: 2024-10-11 04:32:39