1.回顾
2.重点
3.BroadCastReceiver
Response) 的对话框。
(5)分类
1)普通广播
sendBroadcast(intent2);
发送一个广播,所以监听该广播的广播接收者都可以监听到改广播。
2)异步广播
sendStickyBroadcast()
当处理完之后的Intent ,依然存在,这时候registerReceiver(BroadcastReceiver, IntentFilter) 还能收到他的 值,直到你把它去掉 , 不能将处理结果传给下一个接收者 , 无法终止广播 .
3)有序广播
sendOrderBroadcast()
按照接收者的优先级顺序接收广播 , 优先级别在 intent-filter 中的 priority 中声明 ,-1000 到1000 之间 , 值越 大 , 优先级越高 . 可以终止广播意图的继续传播 . 接收者可以篡改内容 .
4.生命周期
生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报错 ANR(Application No
Response) 的对话框。
调用对象 - 实现 onReceive() 方法 - 销毁
5. 静态实现
(1)继承BroadcastReceiver ,实现 onReceive()方法
package com.example.broadcast;
import com.example.boradcastdemo.ContentActivity;
import com.example.boradcastdemo.MainActivity;
import com.example.notification.Ynotification;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.BoringLayout;
import android.util.Log;
public class Tbroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取通知
String msg=intent.getStringExtra("data");
Log.i("MSG","Tbroadcast: "+ msg);
//设置通知
Ynotification ynotification=new Ynotification(context);
Intent intent2= new Intent(context,ContentActivity.class);
intent2.putExtra("data",msg);
ynotification.sendNotification("Receive","Tbroadcast",msg,intent2);
}
}
(2)AndroidMianfest.xml 中注册
<!-- 注册 Receiver -->
<receiver
android:name="com.example.broadcast.Tbroadcast"
>
<intent-filter
android:priority="200"
>
<action android:name="BCD_DEMO"/>
</intent-filter>
</receiver>
6.动态实现
(1)和静态实现 第一步一样
(2)代码实现
//动态注册
IntentFilter filter=new IntentFilter();
filter.addAction("BCD_DEMO");
Mbroadcast mbroadcast=new Mbroadcast();
registerReceiver(mbroadcast, filter);
//发送广播
Intent intent1 = new Intent(MainActivity.this,Mbroadcast.class);
intent1.putExtra("data",editText1.getText().toString());
sendBroadcast(intent1);
7.实例
通过 发送 广播 ,并显示在 通知栏 ;
(1)实现 Notification 类封装
package com.example.notification;
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.Notification.Builder;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import com.example.boradcastdemo.R;
@SuppressLint("NewApi")
public class Ynotification {
private final int NOTIFICATION_ID = 1;
private Context Mcontext;
private NotificationManager manager;
// 初始化
public Ynotification(Context context) {
this.Mcontext = context;
manager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
}
// 发送 通知
public void sendNotification(String ticker, String title, String msg,
Intent intent) {
Builder builder = new Notification.Builder(Mcontext);
// 提醒图标和文字
builder.setTicker(ticker);
builder.setSmallIcon(R.drawable.ic_launcher);
// 通知栏 显示标题和信息
builder.setContentTitle(title);
builder.setContentInfo(msg);
// 设置 震动 ,声音 ,提示灯 (添加权限)
builder.setDefaults(Notification.DEFAULT_ALL);
// 设置 通知 点击后的跳转的页面
PendingIntent pIntent = PendingIntent.getActivity(Mcontext, 0, intent,
0);
builder.setContentIntent(pIntent);
// 建立通知
Notification notification = builder.build();
manager.notify(NOTIFICATION_ID, notification);
}
}
(2)实现 TBroadcastReceive 接收
package com.example.broadcast;
import com.example.boradcastdemo.ContentActivity;
import com.example.boradcastdemo.MainActivity;
import com.example.notification.Ynotification;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.BoringLayout;
import android.util.Log;
public class Tbroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取通知
String msg=intent.getStringExtra("data");
Log.i("MSG","Tbroadcast: "+ msg);
//设置通知
Ynotification ynotification=new Ynotification(context);
Intent intent2= new Intent(context,ContentActivity.class);
intent2.putExtra("data",msg);
ynotification.sendNotification("Receive","Tbroadcast",msg,intent2);
}
}
(3)实现业务代码
// 静态注册 测试 Receiver
Intent intent = new Intent(MainActivity.this,Tbroadcast.class);
intent.putExtra("data",editText1.getText().toString());
intent.setAction("BCD_DEMO");
sendBroadcast(intent);
(4)效果图
8.demo 免积分下载
http://download.youkuaiyun.com/detail/lablenet/9059453