您的位置:首页 > 移动开发 > Android开发

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

2015-11-18 10:41 447 查看

android中自带的广播接受器

在上一篇文章中SD卡的监听

下面我继续来介绍

安装与卸载的监听

我们先了解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中自带的广播接收器,下一篇文章我们来讲无序广播和有序广播

更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: