Android 广播BroadCastReceiver

建立一个广播接收器的步骤:android

1.建立一个类 extends BroadCastReceiver,重写onReceive()方法安全

2.注册广播网络

3.发送广播线程

context.sendBroadcast(new Intent("action"));        //    广播的频道生命周期

 

注册广播的两种方式:get

1.全局广播:it

注册在清单配置文件,关闭应用后仍在监听io

<receiver android:name="全路径">ast

    <intent-filter>test

        <action android:name="xxx"/>        //    能够为全路径的小写

    </intent-filter>

</receiver>

2.动态注册

MainActivity ——> onCreate() {

    IntentFilter filter = new IntentFilter();

    filter.addAction(MY_ACTION);

    receiver = new MyBroadCast();

    registerReceiver(receiver, filter);

}

onDestroy(){        unregisterReceiver(receiver);    }

 

系统广播:

Intent.ACTION_BATTERY_LOW                        低电量提醒广播

Intent.ACTION_BATTERY_CHANGED

Intent.ACTION_BOOT_COMPLETED                开机完成

Intent.ACTION_SHUTDOWN                           关机提醒

Intent.ACTION_SCREEN_OFF                           屏幕关闭

Intent.ACTION_SCREEN_ON

Intent.ACTION_USER_PRESENT                        屏幕解锁

Intent.ACTION_NEW_OUTGOING_CALL            拨号广播

TelephoneManager.ACTION_PHONE_STATE_CHANGED        来电时电话状态改变(如响铃、空置、挂断)

Telephone.Sms.Intent_SMS_RECEIVED_ACTION            接收短信

ConnectivityManager.CONNECTIVITY_ACTION            网络状态改变

 

example:

ConnectivityManager.CONNECTIVITY_ACTION            网络状态改变

onReceive(Context context, Intent intent) {

    ConnectivityManager manager = (ConnectivityManager)context.getSystenService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = manager.getActiveNetworkInfo();

    if(networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnectedOrConnecting()) {

        String name = networkInfo.getTypeName();

    }else {

        context.Toast.makeText(context, "没有网络",Toast.LENTH_LONG).show();

    }

}

 

广播的生命周期短暂:接收到广播时建立,onReceive()方法结束时销毁,不要在广播接收者中作一些耗时或建立子线程耗时操做,应在服务Service中完成

 

有序广播(action同样)

context.sendOrderedBroadcast(intent, 权限str);

1.按照注册顺序

2.按大小        <intent-filter android:property="100">        //    1000最高,-1000最低

3.中断低的广播接收器接收广播

onReceiver() {

    ...

    abortBroadcast();

}

 

广播的安全性:

发送端:

1.指定接收广播的应用包名:

intent.putPackage("com.fgl.test");

2.发送带权限的广播:

定义权限:<permisson android:name = "com.fgl.testsafetypermission"/>

<use-permission android:name = "com.fgl.testsafetypermission"/>

sendBroadcast(intent, "com.fgl.testsafetypermission");

接收端:不接收外部应用的广播        <receiver ... android:exported="false">

相关文章
相关标签/搜索