android创建动态广播,Android Studio 学习(三) 广播

本文介绍了在Android中如何动态注册广播监听网络变化,包括在`MainActivity`中创建`IntentFilter`,添加ACTION,注册和注销广播接收器。同时讲解了静态注册广播接收器以实现开机启动,并阐述了发送广播、有序广播的操作。此外,还详细说明了如何使用本地广播及其注册和发送过程。

动态注册监听网络变化

创建intentFilter 并addAction 代表了监听哪个广播

然后使用registerReceiver()方法 将intentFilter 与 自己创建的监听器 传进去

动态注册的 需要unregisterReciver()

权限需要在Mainfest中声明

public class MainActivity extends AppCompatActivity {

private IntentFilter intentFilter;

private NetworkChangedReceiver networkChangedReceiver;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

intentFilter = new IntentFilter();

intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

networkChangedReceiver = new NetworkChangedReceiver();

registerReceiver(networkChangedReceiver,intentFilter);

}

@Override

protected void onDestroy() {

super.onDestroy();

unregisterReceiver(networkChangedReceiver);

}

class NetworkChangedReceiver 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,"good",Toast.LENGTH_LONG).show();

}

else

{

Toast.makeText(context,"bad",Toast.LENGTH_LONG).show();

}

}

}

}

静态注册实现开机启动

new-> other->broadcast receiver 手动创建广播

exported 允许此广播接收本程序外的广播

之后再Mainfest中声明权限

并说明要监听的广播

发送广播

Intent intent = new Intent("com....")

sendBroadcast(intent);

sendOrderedBroadcast(intent,null); 发送有序广播

//设置广播优先级

abortBroadcast() 截断广播

本地广播

public class MainActivity extends AppCompatActivity {

private IntentFilter intentFilter;

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("com.example.broadcasttest.LOCAL_BROADCAST");

localReceiver = new LocalReceiver();

localBroadcastManager.registerReceiver(localReceiver, intentFilter);

//发送本地广播

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");

localBroadcastManager.sendBroadcast(intent);

}

});

}

@Override

protected void onDestroy() {

super.onDestroy();

//取消动态网络变化广播接收器的注册

localBroadcastManager.unregisterReceiver(localReceiver);

}

class LocalReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();

}

}

}

原文:https://www.cnblogs.com/lancelee98/p/9468119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值