欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 广播

程序员文章站 2024-03-24 23:36:10
...

Android进阶--广播

广播机制概述

Android 广播分为两个方面,广播发送者和广播接收者,通常情况下BroadcastReceiver指的就是广播接收者。
广播作为Android组件间的通讯方式,可以使用的场景如下:
1.同一App内部的同一组件之间的消息通讯,单个或多个线程之间。
2.同一App内部不同组件之间的消息通讯。
3.不同App之间的组件之间消息通讯。
4.Android系统在特定情况下与App之间消息通信。

自定义BroadcastReceiver

自定义广播接收器需要继承基类BroadcastReceiver,并实现抽象方法onReceive(context,context)方法。广播接收器接收到相应广播后,会自动回到onReceiver(…)方法。

public class MyBroadercastReceiver extends BroadcastReceiver{
   public static final String TAG="MyBroadcastRececiver";//名称
   @Override
   public void onReceive(Context context,Intent intent) {
      String name=intent.getStringExtra("name");
      Log.e(TAG,"name:"+name);
   }
}

BroadcastReceiver注册类型

总体可以分为两中注册类型,静态注册和动态注册。
1.静态注册

 <receiver android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</receiver>

android:name --此broadcastReceiver类名
android:permission --如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接受

常见的注册形式:

<receiver android:name=".MyBroadcastReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

2.动态注册:

动态注册时,无须再AndroidManifest中注册《receiver/》组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册

public class MainActivity extends Activity {
      public static final String BROADCAST_ACTION = "com.example.corn";
      private BroadcastReceiver mBroadcastReceiver;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
         mBroadcastReceiver = new MyBroadcastReceiver();
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(BROADCAST_ACTION);
         registerReceiver(mBroadcastReceiver, intentFilter);
     }
     
     @Override
     protected void onDestroy() {
         super.onDestroy();
        unregisterReceiver(mBroadcastReceiver);
     }
 
 }