Android- BroadCastReceiver 基础学习

1.回顾

   上篇 学习 ContentProvider 实现 两个app应用数据共享 ;

2.重点

   (1)BroadCastReceiver 重点
   (2)生命周期
   (3)具体实现

3.BroadCastReceiver


   (1)Broadcast是一种广泛运用的在应用程序之间传输信息的机制 .(ContentProvider)

  (2)BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件.

  (3)BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动Activity 作为响应,或者通过 NotificationMananger 提醒用户,或者启动 Service 等等。

   (4)生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报错  ANR(Application No

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值