广播机制二(有序广播,无序广播和本地广播)

    xiaoxiao2025-04-29  7

    自定义广播 发送标准广播(无序广播): 清单文件: <receiver android:name=".BootCompleteReceiver">     <intent-filter>         <action android:name="android.intent.action.BOOT_COMPLETED" />         <!--自己定义的一个广播-->         <action android:name="android.intent.action.CUSTOM_BROADCAST" />     </intent-filter> </receiver>然后新建一个类,继承BroadcastReceiver类,在onReceiver()中实现逻辑代码: package com.example.mac.broadcast_demo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /**  * Created by mac on 16/8/13.  */ public class BootCompleteReceiver extends BroadcastReceiver {     @Override     public void onReceive(Context contextIntent intent) {         Log.d("zlx""自定义标准广播已接收" );     } } 最后在MainActivity中使用Intent发送这个广播就可以了: package com.example.mac.broadcast_demo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity {     private IntentFilter intentFilter;     private NetworkBroadcast networkBroadcast;     //     private Button button;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         button= (Button) findViewById(R.id.bt_sendBroadcast);         button.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 Intent intent=new Intent("android.intent.action.CUSTOM_BROADCAST");                 sendBroadcast(intent);             }         });         //调用动态注册 //        NetworkRecevier();     }     //添加动态注册     public void NetworkRecevier() {         intentFilter new IntentFilter();         networkBroadcast new NetworkBroadcast();         //添加动作,检测网络状态         intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");         //启动服务         registerReceiver(networkBroadcastintentFilter);     }     @Override     protected void onDestroy() {         super.onDestroy();         //关闭动态注册的广播 //        unregisterReceiver(networkBroadcast);     }     class NetworkBroadcast extends BroadcastReceiver {         @Override         public void onReceive(Context contextIntent intent) {             //通过getSystemService得到ConnectivityManager的实例(系统服务类中专门管理网络连接的),             // 调用getActiveNetworkInfo可以得到NetworkInfo的实例。             //通过isAvailable判断是否有网络连接             ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);             NetworkInfo networkInfo = manager.getActiveNetworkInfo();             if (networkInfo != null && networkInfo.isAvailable()) {                 Log.d("zlx""亲,你可以上网了呢");            else {                 Log.d("zlx""亲,没有网络连接哦");             }         }     } } 发送有序广播: 既然是有序,那么应该就是至少有两个广播接收器。所以我门就再新建个项目,同样,注册一个和上面这个一样的广播。代码略。第一步:发送广播:    //发送标准广播 //                sendBroadcast(intent); //                发送无序广播 //                直接亮瞎,这样就可以发送无序的广播了,但是优先级得去清单文件中修改,毕竟,你是再清单文件中注册得麻。                 sendOrderedBroadcast(intent,null);再清单文件中修改: <receiver android:name=".BootCompleteReceiver" >     <!--android:priority="1"这个就是设置优先级了,1是低优先级。之前得尝试,发送广播得项目,会先Toast。所以需要给他一个低优先级-->     <intent-filter android:priority="1">         <action android:name="android.intent.action.BOOT_COMPLETED" />         <!--自己定义的一个广播-->         <action android:name="android.intent.action.CUSTOM_BROADCAST" />     </intent-filter>如果有需求,可以在接收器中,把广播中断: @Override public void onReceive(Context contextIntent intent) {     Toast.makeText(context,"已接收,我是Broadcast_demo",Toast.LENGTH_LONG).show();     //终止广播。     abortBroadcast(); }有序广播没了。 本地广播,因为广播机制决定了,其面向所有的程序,这个一个项目的安全性带来了考验,android推出本地广播机制,本地广播,只能在本项目使用(本地广播只有动态注册,没有静态注册)。 //本地广播,BootCompleteReceiver是我们写的继承BroadcastReceiver,实现广播接收后逻辑代码的一个类 private LocalBroadcastManager localBroadcastManager; private BootCompleteReceiver receiver;  localBroadcastManager=LocalBroadcastManager.getInstance(this);// 获得实例         button= (Button) findViewById(R.id.bt_sendBroadcast);         button.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 Intent intent=new Intent("android.intent.action.CUSTOM_BROADCAST");                 //发送标准广播 //                sendBroadcast(intent); //                发送无序广播 //                直接亮瞎,这样就可以发送无序的广播了,但是优先级得去清单文件中修改,毕竟,你是再清单文件中注册得麻。 //                sendOrderedBroadcast(intent,null); //                发送本地广播                 localBroadcastManager.sendBroadcast(intent);             }         });         //调用动态注册 //        NetworkRecevier(); //        调用本地广播接收器         LocalBroadcast();//添加本地广播接收器 public void LocalBroadcast(){     intentFilter=new IntentFilter();     intentFilter.addAction("android.intent.action.CUSTOM_BROADCAST" );     receiver=new BootCompleteReceiver();     localBroadcastManager.registerReceiver(receiver,intentFilter); }本地广播结束。
    转载请注明原文地址: https://ju.6miu.com/read-1298580.html
    最新回复(0)