Android 广播接收者

一、简介

  [ 7 ] 在4.0谷歌工程师要求,第一次安装应用的时候必须得有界面,这样广播接受这才生效

  [ 8 ] 在设置页面有一个强行停止的按钮,如果说用户点击了,那么广播接受者也不生效

  [ 9 ] 在2.3点手机上没有这样的安全设计

 二、ip拨号器

1.定义广播接收者      相当于买了一个收音机

      定义一个类继承BroadcastReceiver

2.在清单文件中配置       相当于安装了一块电池

3.清单文件中定义接收的类型     相当于调了一个合适的频道


    

4.加权限

5.实现逻辑

public class OutGoingCallReceiver extends BroadcastReceiver {

    //四大组件要在清单文件中配置,配置的

三、sd卡状态的监听

与ip拨号器思路大同小异

1. 配置清单文件时要加上

   //挂载
 //卸载
                                  //不加会接收不到

2.逻辑实现

public class OutGoingCallReceiver extends BroadcastReceiver {

    //四大组件要在清单文件中配置,配置的

四、短信监听器

1.配置清单文件

 2.添加权限

3.当广播到来的时候,获取发送者的号码和发送内容

Object objects[] = (Object[]) intent.getExtras().get("pdus");

for(Object obj : objects){

    //【1】获取smsmessage实例
    SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
    //【2】获取发送短信的内容
    String messageBody = smsMessage.getMessageBody();
    String address = smsMessage.getOriginatingAddress();

    System.out.println("body:"+messageBody+"------"+address);

}

五、应用卸载安装

1.清单文件,要加一个

      //安装了
    //卸载了

2.实现逻辑

@Override
public void onReceive(Context context,Intent intent){

    //获取当前广播事件类型
    String action = intent.getAction();

    if("android.intent.action.PACKAGE_ADDED".equals(action)){
        System.out.println("应用安装了");
    }else if("android.intent.action.PACKAGE_REMOVED".equals(action)){
        System.out.println("应用卸载了"+intent.getData());    //可以获取包名
    }

}

3.用处:大数据挖掘,获取应用安装卸载的数据

六、手机开机启动案例

1.清单文件配置

2.需要权限

 3.开机启动

@Override
public void onReceive(Context context,Intent intent){

    //在这个方法里面开启Activity,以实现开机启动
    Intent intent2 = new Intent(context,MainActivity.class);

    //★★★★注意,不能在广播接收者里面直接开启Activity,需要添加一个任务栈的标记
    intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TESK);

    //开启Activity
    context.startActivity(intent2);

}

七、自定义发送广播

1.无序广播:比如新闻联播,明天晚上7点准时开播

      1)创建一个Android项目,定义一个按钮,功能点击发送广播,因为广播接收者要在清单文件配置接受广播类型,所以发送广播的时候要设置Intent的Action

public void click(View v){

    Intent intent = new Intent();
    
    intent.setAction("com.pqx.send");

    intent.putExtra("name","新闻联播每天晚上7点准时播放");

    sendBroadcast(intent);//发送无序广播

}

       2)广播接收者接收

//清单文件配置
@Override
public void onReceive(Context context,Intent intent){

    String content = intent.getStringExtra("name");

    Toast.makeText(context,content,Toast.LENGTH_SHORT).show();

}

2.有序广播。类似中央发送红头文件,按照一定优先级进行接收

      1)发送有序广播

//点击按钮发送有序广播  发大米
    public void click(View v){

        Intent intent = new Intent();
        intent.setAction("com.pqx.xdd");
        /*
        * 第一个参数:意图
        * 第二个参数:接收的权限
        * 第三个参数:最终的receiver
        * 第四个参数:handler
        * 第五个参数:初始码
        * 第六个参数:初始化数据
        * 第七个参数:额外的数据
        * */
        sendOrderedBroadcast(intent,null,new ResultReceiver(),null,1,"习大大给每个村民发了1000斤大米",null);
    }

      2) 接收者清单文件配置


            //设置优先级
        
    

      3)接收广播

public class Sheng extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        //接收数据
        String content = getResultData();

        //终止广播
        //abortBroadcast();

        Toast.makeText(context,"省:"+content,Toast.LENGTH_SHORT).show();

        //修改接收数据
        setResultData("习大大给每个村民发了500斤大米");
    }
}

       4)最终的receiver,在发送广播的项目中创建,不需要在清单文件中配置,只需在发送广播时添加为参数

3.有序广播与无序

      【1】有序广播可以被终止,无序广播不可以

      【2】有序广播的数据可以被修改,无序广播不可以

八、特殊的广播接收者

1.操作特别频繁的广播事件。比如:屏幕的锁屏和解锁、电池电量的变化--------这种事件的广播在清单文件里面注册无效

2.注册广播接收者的两种方式

      1)动态注册:通过代码的方式注册

      2)在清单文件通过receiver  tag  节点静态发布

3.自定义ScreenReceiver 

package com.example.register;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
 
public class ScreenReceiver extends BroadcastReceiver {
 
	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		if (Intent.ACTION_SCREEN_OFF.equals(action)) {
			System.out.println("屏幕关闭了");
		} else if (Intent.ACTION_SCREEN_ON.equals(action)) {
			System.out.println("屏幕开启了");
		}
 
	}
 
}

4.动态注册广播接收者

ScreenRecriver screenRecriver;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    screenRecriver = new ScreenRecriver();

    //创建IntentFileter对象
    IntentFilter filter = new IntentFilter();
    //添加要注册的action
    filter.addAction("android.intent.action.SCREEN_OFF");
    filter.addAction("android.intent.action.SCREEN_ON");
    //动态注册广播接收者
    registerReceiver(screenRecriver,filter);

}

5.当Activity销毁的时候要取消注册广播接收者

@Override
protected void onDestroy() {
    
    unregisterReceiver(screenRecriver);
    
    super.onDestroy();
}

 

你可能感兴趣的:(Android)