- 自定义广播
- 发送标准广播(无序广播):
- 清单文件:
<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 context, Intent 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(networkBroadcast, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//关闭动态注册的广播
// unregisterReceiver(networkBroadcast);
}
class NetworkBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent 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 context, Intent 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);
} - 本地广播结束。
- //本地广播,BootCompleteReceiver是我们写的继承BroadcastReceiver,实现广播接收后逻辑代码的一个类
广播机制二(有序广播,无序广播和本地广播)
最新推荐文章于 2023-04-21 16:31:16 发布