自定义广播
发送标准广播(无序广播):
清单文件:
<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)
; }本地广播结束。
转载请注明原文地址: https://ju.6miu.com/read-1298580.html