1》自定义广播
//定义接收器public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"接收我的广播",Toast.LENGTH_LONG).show(); }}
·//注册事件 <receiver android:name=".MyBroadcastReceiver"//类名 android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.broadcasttext.MY_BROADCAST"/>广播名称 </intent-filter> </receiver>
//定义按钮发送广播
Button button=(Button)findViewById(R.id.b1);button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent("com.example.broadcasttext.MY_BROADCAST"); sendBroadcast(intent); }});
广播在另外的程序上进行接收,默认的发送方式是标准广播,若想发送有序广播,需要一点点修改
MainActivity.java
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent("com.example.broadcasttext.MY_BROADCAST"); sendBroadcast(intent); sendOrderedBroadcast(intent,null); }});
加入这一行代码后广播的接收就有了顺序
注册时候可以设置接收广播的优先级
<receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true"> <intent-filter android:priority="100"> <action android:name="com.example.broadcasttext.MY_BROADCAST"/> </intent-filter></receiver>
优先接收到广播后就可以判断是否继续发送广播
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"接收我的广播",Toast.LENGTH_LONG).show(); abortBroadcast(); }}
abortBroadcast();可以截断广播
2》本地广播
上述例子中发送的广播可以被其他程序所接受,这对安全造成了威胁,所以安卓引入了一套本地广播的体制
MainActivity.java
package com.example.guangbo; import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.location.LocationManager;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.NetworkRequest;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast; import java.nio.channels.NetworkChannel; public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; //本地广播 private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //本地广播 localBroadcastManager= LocalBroadcastManager.getInstance(this); intentFilter=new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver=new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver,intentFilter); Button button=(Button)findViewById(R.id.b1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //本地广播 Intent intent=new Intent("com.example.broadcasttext.LOCAL_BROADCAST"); localBroadcastManager.sendBroadcast(intent); } }); //动态注册本地广播 intentFilter=new IntentFilter(); intentFilter.addAction("com.example.broadcasttext.LOCAL_BROADCAST"); localReceiver=new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //本地广播 localBroadcastManager.unregisterReceiver(localReceiver); } class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo(); if(networkInfo!=null&&networkInfo.isAvailable()){ Toast.makeText(context,"网络可用",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(context,"网络不可用",Toast.LENGTH_SHORT).show(); } } } class LocalReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"接收本地广播",Toast.LENGTH_SHORT).show(); } }}
啊本地广播主要是通过LocalBriadcaseManager来进行管理
原文地址:https://www.cnblogs.com/837634902why/p/10336320.html
时间: 2024-10-16 14:14:36