关闭

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

标签: androidbroadcastreceiver短信
679人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:37005次
    • 积分:845
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:5篇
    • 译文:0篇
    • 评论:1条
    欢迎来Star
    博客专栏