Android开发之Broadcast

接收系统广播:


动态注册:


创建IntentFilter实例,调用IntentFilter的addAction(String action)方法添加要接收的广播内容。


然后调用registerReceiver(Class,IntentFilter)注册广播,方法的第一个参数是广播的监听类。


创建一个继承BroadcastReceiver的广播监听类。重写onReceiver(Context context,Intent intent)方法。


注意,注册了监听类,最后要取消注册,所以重写onDestroy()方法,调用unregisterReciever(Class)方法。


静态注册:


在AndroidMenifest.xml文件中注册

<receiver
        android:name=".MyBroadcastReceiver"
        android:enabled="true"
        android:exported="true">
        <intentFilter>
               <action= android:name="android.intent.action.BOOT_COMPLETED"/>	//开机启动广播
        </IntentFilter>
</receiver>


送自定义广播:

类似于静态接收系统广播,不同的是要加一条发送广播命令,且在AndroidManifest中改自定义广播内容为要接收的广播。代码如下:


MainActivity.class:

Intent intent;
intent=new Intent("MyBroadcast");
sendBroadcast(intents);


Broadcast.class:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Broadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context,"MyBroadcast!",Toast.LENGTH_SHORT).show();
    }
}


AndroidMenifest.xml:

<receiver
        android:name=".Broadcast"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="MyBroadcast"/>
        </intent-filter>
 </receiver>



发送有序广播:

类似于发送自定义广播,不同的是把发送广播的方法改为sendOrderBroadcast; 且在AndroidManifest中设置优先级,可以在接收器中阻断广播的继续传播。代码如下:

ActivityMain.class:

Intent intents=new Intent("MyBroadcast");
sendOrderedBroadcast(intents,null);  //发送有序广播sendOrderedBroadcast(Intent intent,String receiverPermission)


Broadcast.class:

import android.content.BroadcastReceiver;
        import android.content.Context;
        import android.content.Intent;
        import android.widget.Toast;

public class Broadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context,"MyBroadcast!",Toast.LENGTH_SHORT).show();
        abortBroadcast(); //阻断广播的继续传播
    }
}


AndroidManifest.xml:

<receiver
       android:name=".Broadcast"
       android:enabled="true"
       android:exported="true">
       <intent-filter android:priority="100">
            <action android:name="MyBroadcast"/>
       </intent-filter>
</receiver>


本地广播:


本地广播可以保护广播不被外部应用截获。


先获取本地广播监听器实例,再给IntentFilter添加广播内容,然后注册广播管理器。


编写一个继承于BroadcastReceiver的监听器类,里面编写收到广播后要执行的操作,最后发送广播。


LocalManager localManager=LocalManager.getInstance();
Intent intent=new Intent("MyBroadcast");
localManager.sendBroadcast(intent);



BroadCastReceiver

是接收sendBroacast()方法发送广播的基类

当注册了广播监听器后,要在Activity.onPause中取消注册,而不能在Activity.OnSaveInstanceState(当用户返回历史堆栈时该方法不会被调用)中取消,

普通广播:完全异步,但不能被使用结果(即不能将结果传送给下一个接收者)或中断广播

有时普通广播也会只发送给一个接收者,但仍然保持普通广播的特性:结果不能被使用,不能被中断

有序广播:一次只能给一个接收者发送广播,且可以将结果传给下一个接收者,也可以中断该广播的传播。其优先顺序由Android:priority设置,值越大优先程度越高,当值相同时将随机选择。

BroadcastReceiver无法查看和捕获startActivity使用的Intent,启动Activity的是前台操作,而广播的Intent则是后台操作


ConnectivityManager

与网络状态有关的类,当网络发生变化时会通知应用程序,其通过ConnectivityManager.getSystemService(Context,CONECTIVITY_SERVICE)实例化


NetworkInfo

描述网络接口的状态,通过getActivityNetworkInfo()(该方法为ConnectivityManager对象的方法)来获取实例


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值