android BroadcastReceiver详细讲解1-自带的广播接受器-拨号、短信、卸载/安装、开机启动

来源:互联网 发布:网络词cp是什么意思 编辑:程序博客网 时间:2024/05/21 04:41

android中自带的广播接受器

在上一篇文章中SD卡的监听
下面我继续来介绍

安装与卸载的监听

  1. 我们先了解android中安装与卸载的action
<intent-filter >                <action android:name="android.intent.action.PACKAGE_REMOVED"/>                <action android:name="android.intent.action.PACKAGE_ADDED"/>                <data android:scheme="package"></data> </intent-filter>

将上段代码,添加到我们注册的广播接收器中 在AndroidManifest.xml

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

2.我们新建一个广播接收器java类

public class IntallReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {    String packageName = intent.getData().toString();    String action = intent.getAction();    // 如果是卸载if ("android.intent.action.PACKAGE_REMOVED".equals(action)) {            Toast.makeText(context, packageName+"应用程序被卸载", 1).show();            System.out.println(packageName+"已删除");        } else if ("android.intent.action.PACKAGE_ADDED".equals(action)) {            Toast.makeText(context, packageName+"应用程序安装", 1).show();            System.out.println(packageName + "已安装");        }    }}

然后运行我们的程序
这里写图片描述
这是监听卸载

监听拨打电话

1 还是先了解一下android的拨打电话action

 <!-- 属性代表着给当前接收者设置优先级,优先级越高越优先接收到广播。 -->            <intent-filter android:priority="1000" >                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />            </intent-filter>

注意还有相应的权限

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

2 新建一个广播接收器java类 继承BroadcastReceiver

public class IPCallReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        //获取拨打电话的号码        String call=getResultData();        //在电话号码前加上110,然后返回数据        setResultData("110"+call);    }}

我们看一下运行的结果
我们拨打 789-看图片显示的是110789
//在电话号码前加上110,然后返回数据
setResultData(“110”+call);
这里写图片描述

监听开机启动

1 注册广播接受器

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

2 权限

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

3 类

public class BootCompeletedReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "开机启动已完成", 1).show();    }}

短信拦截器

1 注册广播接受器

<receiver android:name="SmsReceiver">            <intent-filter android:priority="1000">                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>            </intent-filter>        </receiver>

2 权限

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

3 类

public class SmsReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // 获取短信 pdus : 短信集合        Object[] object = (Object[]) intent.getExtras().get("pdus");        for (Object pdus : object) {            // 获取短信的对象            // //通过Android API中的SmsMessage类将短信字节数组转化为短信对象            SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus);            // 获取短信的来源            String address = message.getOriginatingAddress();            // 获取短信的内容            String body;            body = message.getMessageBody();            String string2;            try {                string2 = new String(body.getBytes(),"gbk");                Toast.makeText(context, address + "----" + string2, 1).show();                System.out.println(address + "----" + string2);            } catch (UnsupportedEncodingException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }}

ok,以上是android中自带的广播接收器,下一篇文章我们来讲无序广播和有序广播
更多

1 0
原创粉丝点击