您的位置:首页 > 移动开发 > Android开发

android中的广播--BroadcastReceiver

2016-07-01 14:11 357 查看
1:显示意图发送广播-----携带数据!--------正常广播[/u]

public void go1(View view) {
Toast.makeText(this, "发送广播1", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, MyReceiver1.class);
//广播发送消息哦哦----显示意图的广播发送!
intent.putExtra("data", "落霞与孤鹜齐飞,秋水共长天一色");
this.sendBroadcast(intent);


}
//在广播的onReceive的方法中接受广播的通知消息!
//广播的onReceive方法是在主线程中执行的,所以不能存在耗时的操作哦!
//广播的生命周期只有一个方法onReceive方法,执行完之后,广播就完蛋咯!
//由于广播的生命周期比较短,所以不推荐在广播中开启子线程,(进程等级决定)
//过分的耗时操作还是在子线程中,子线程还是写在服务Service中哦!
//广播不是上下文哦!参数中存在上下文哦!

@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "1111111111111111" + intent.getStringExtra("data"), Toast.LENGTH_SHORT).show();
}

2:隐士意图的广播的发送与接受哦!-----正常广播!
        action----category---data的匹配操作!
Intent intent = new Intent();
//通过隐士意图完成跳转哦哦!
//匹配多个广播接收者哦,同时发送消息哦!
intent.setAction("love");
this.sendBroadcast(intent);


在manifest中设置广播的清单文件哦!--------priority设置广播的执行等级
默认的接收广播的顺序是在注册清单中的顺序广播哦!------可以通过等级设置,来控制接收广播的顺序哦哦!

<receiver
android:name=".MyReceiver1"
android:enabled="true"
android:exported="false">
<intent-filter
android:priority="1">
<action android:name="love"/>
<category android:name="tong"/>
<data android:scheme="you"/>
</intent-filter>
</receiver>

3:---有序广播》[/u]

public void go3(View view) {
Toast.makeText(this, "有序广播哦!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction("love");
this.sendOrderedBroadcast(intent,null);
}


  广播的拦截------abortBroadcast----终止发送哦哦![/u]

@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "222222222222222", Toast.LENGTH_SHORT).show();
this.abortBroadcast();//拦截广播哦!
}

     @@ 可以通过priority来控制广播的先后顺序哦!
     @@先收到广播的BroadcastReceiver可以拦截广播的继续发送哦哦!

4:静态注册--[/u]-----常驻型的注册方式哦!------直接在manifest的清单文件中注册的哦哦!
    动态注册-(可控的生命周期)-[/u]------非常驻型的注册方式哦!--不在manifest中注册,手动在程序中注册,发广播消息以及解注册等系列操作哦!

@@注册

IntentFilter intentFilter = new IntentFilter();//创建IntentFilter对象!
intentFilter.addAction("aa.bb.cc");//添加action属性哦!
this.registerReceiver(mMyBroadcastReceriver, intentFilter);//注册广播

@@发送广播消息

Intent intent = new Intent();
intent.putExtra("data", "落霞与孤鹜齐飞");
intent.setAction("aa.bb.cc");
this.sendBroadcast(intent);

@@解注册

//解注册的操作---一般在ondestroy中进行解注册的操作哦哦!
this.unregisterReceiver(mMyBroadcastReceriver);


5:广播的特殊作用------用于各个组件之间的通信哦![/u]
        @@有一个Activity
        @@有一个Service
        @@在Service中存在一个Thread
        @@在Activity中动态注册一个广播,该广播为Activity的一个内部类(为了方便调用数据)
        @@保持广播的生命周期和Activity的生命周期是同步的,即为在onCreate中注册,在onDestroy中解注册哦!
        @@在Service中的Thread子线程中不断地发送目标广播给Activity哦(即为目标数据)!
        @@在广播中就可以接受来自Service中Thread子线程的目标广播数据哦哦!因为数据在广播内部,而广播在Activity内部,
                    那么Activity就可以获取该数据,进行一定的设置,即完成了通信咯!

6:系统广播---android系统作为广播的发送者,我们要做的就是接受这些广播消息哦哦 ![/u]
        @@监听电量的变化哦哦!

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BATTERY_LOW")) {
Toast.makeText(context, "电量低嘀嘀嘀嘀嘀嘀嘀嘀嘀", Toast.LENGTH_SHORT).show();
}
if (intent.getAction().equals("android.intent.action.BATTERY_OKAY")) {
Toast.makeText(context, "电量好", Toast.LENGTH_SHORT).show();
}
if (intent.getAction().equals("android.intent.action.BATTERY_CHANGED")) {
Toast.makeText(context, "电量变啦哦哦哦!", Toast.LENGTH_SHORT).show();
}
}


         @@卸载APK的操作变化哦哦!

<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>


        @@开机自启动的操作变化哦!

<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>


各项操作的权限的声明哦!

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>


=====================================================================
7:了解短信的监听提醒哦哦![/u]
        
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>


<uses-permission android:name="android.permission.RECEIVE_SMS"/>


@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
//通过键“pdus”来获取消息!
Object[] objectArray = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[objectArray.length];
for (int i = 0; i < objectArray.length; i++) {
message[i] = SmsMessage.createFromPdu((byte[]) objectArray[i]);

StringBuffer str=new StringBuffer("from:");
str.append(message[i].getDisplayOriginatingAddress());
str.append("\nmessage:\n");
str.append(message[i].getDisplayMessageBody());
Toast.makeText(context, str.toString(), Toast.LENGTH_SHORT).show();
}
}


8:Sticky广播---可以在注册时,取回最近错过的一条广播!
        添加权限

<uses-permission android:name="android.permission.BROADCAST_STICKY"/>

重新设置发送广播的方式

this.sendStickyBroadcast(intent);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: