博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
25、BroadCastRecevier
阅读量:7157 次
发布时间:2019-06-29

本文共 6615 字,大约阅读时间需要 22 分钟。

BroadCastRecevier 有两种注册方式

1. 清单文件里注册: 一旦应用程序被部署到手机, 广播接受者就会生效

2. 代码里面注册: 一旦代码所在的进程被杀死了, 广播接受者就失效了.

 广播接受者分为两种类型:

1. 有序的广播. 短信到来的广播 电话拨打的广播

-1000~1000 设置广播的优先级
android:priority="1000"

从高优先级->低优先级 依次传递

abortbroadcast() 方法 可以终止广播事件。

2. 无序广播.

没有优先级 任何人 注册广播接受者的人,都可以接收到广播.
没有abortboradcast()方法。

sendBroadcast(intent); // 发送一条广播

sendOrderedBroadcast(intent, receiverPermission); // 发送一条有序广播

sendOrderedBroadcast(intent, receiverPermission, resultReceiver,

    scheduler, initialCode, initialData, initialExtras)

如果发送广播的时候 使用的 上面的api发送出去的广播 第三个参数 resultReceiver 指定了广播的接受者

即便是中间我把广播给终止 abortbroadcast()resultReceiver 还是会接受到广播时间。

setResultData(null);   设置广播中的数据为空。

案例:通过广播接受者监听用户的短信

1 import java.net.HttpURLConnection; 2 import java.net.URL; 3  4 import android.content.BroadcastReceiver; 5 import android.content.Context; 6 import android.content.Intent; 7 import android.telephony.SmsManager; 8 import android.telephony.SmsMessage; 9 10 /**11  * 通过广播接受者监听用户的短信12  * @author dr13  */14 public class SmsReceiver extends BroadcastReceiver {15 16     // 当接受到短信的时候17     // android.provider.Telephony.SMS_RECEIVED18     @Override19     public void onReceive(Context context, Intent intent) {20 21         // 阻塞时间超过10秒 很容易anr 异常22         System.out.println("thread name =" + Thread.currentThread().getName());23 24         // intent 存放的有接收到的短信的内容25         Object[] pdus = (Object[]) intent.getExtras().get("pdus");26         for (Object pdu : pdus) {27 28             SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);29             // 获取短信的正文内容30             final String content = message.getMessageBody();31             // 获取短信的发送者32             final String address = message.getOriginatingAddress();33             System.out.println(content);34             System.out.println(address);35             36             // 把收到短信的系统的广播事件给结束37             if ("15555215556".equals(address)) {38                 abortBroadcast();  // 把收到短信的系统的广播事件给结束39 40                 SmsManager manager = SmsManager.getDefault();41                 manager.sendTextMessage(address, null,42                         "ni qu siba ,wo yijing xihuan le xxx", null, null);43             }44 45             // 因为广播接受者的生命周期非常的端 ,广播接受者所在的进程很有可能会别系统回收46             // 子线程也会被销毁.47             // service48             new Thread() {49 50                 @Override51                 public void run() {52                     String path = "http://192.168.1.247:8080/web/SmsServlet?address="53                             + address + "&content=" + content;54                     try {55                         URL url = new URL(path);56                         HttpURLConnection conn = (HttpURLConnection) url57                                 .openConnection();58                         conn.setRequestMethod("GET");59                         conn.setConnectTimeout(5000);60                         System.out.println(conn.getResponseCode());61                     } catch (Exception e) {62                         // TODO Auto-generated catch block63                         e.printStackTrace();64                     }65                     super.run();66                 }67             }.start();68 69         }70     }71 72 }
1 
2
6 7
8 9
10
11
12 13
16
17
18
19
20
21 22 23

 

案例:修改号码为ip拨号

1 
2
6
10
16
1 import android.app.Activity; 2 import android.content.Context; 3 import android.content.SharedPreferences; 4 import android.content.SharedPreferences.Editor; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.EditText; 8  9 /**10  * 实现自动ip拨号。比如:添加一个17951后。11  * 然后你在拨打电话的时候,默认在你拨打的电话前面加上17951。12  * 13  * @author dr14  */15 public class IpcallActivity extends Activity {16     @Override17     public void onCreate(Bundle savedInstanceState) {18         super.onCreate(savedInstanceState);19         setContentView(R.layout.main);20     }21 22     public void click(View view) {23         EditText et = (EditText) this.findViewById(R.id.et_ipnumber);24         String ipnumber = et.getText().toString().trim();25         SharedPreferences sp = getSharedPreferences("config",26                 Context.MODE_PRIVATE);27         Editor editor = sp.edit();28         editor.putString("ipnumber", ipnumber);29         editor.commit();30     }31 }
1 import android.content.BroadcastReceiver; 2 import android.content.Context; 3 import android.content.Intent; 4 import android.content.SharedPreferences; 5  6 public class OutGoingCallReceiver extends BroadcastReceiver { 7  8     @Override 9     public void onReceive(Context context, Intent intent) {10         // getResultData():得到当前拨打的电话号码。11         System.out.println(getResultData());12         // abortBroadcast();13         SharedPreferences sp = context.getSharedPreferences("config",14                 Context.MODE_PRIVATE);15         String ipnumber = sp.getString("ipnumber", "");16         17         // 修改广播中的数据(修改电话号码)。18         setResultData(ipnumber + getResultData());19     }20 21 }
1 
2
6 7
8 9
10 11
14
17
18
19
20
21 22 23
24
25
26
27
28
29 30 31

范例:广播接收者的类型

1 import android.app.Activity; 2 import android.content.BroadcastReceiver; 3 import android.content.Context; 4 import android.content.Intent; 5 import android.content.IntentFilter; 6 import android.os.Bundle; 7 import android.view.View; 8  9 /**10  * 广播接收者的类型11  * @author dr12  */13 public class SmslistenercodeActivity extends Activity {14     @Override15     public void onCreate(Bundle savedInstanceState) {16         super.onCreate(savedInstanceState);17         setContentView(R.layout.main);18     }19 20     public void register(View view) {21         IntentFilter filter = new IntentFilter(22                 "android.provider.Telephony.SMS_RECEIVED");23         SmsReceiver receiver = new SmsReceiver();24         registerReceiver(receiver, filter);25     }26 27     class SmsReceiver extends BroadcastReceiver {28         @Override29         public void onReceive(Context context, Intent intent) {30             System.out.println("接收到了广播");31         }32     }33     34 }
1 

 

转载地址:http://yrhgl.baihongyu.com/

你可能感兴趣的文章
Windows下Eclipse 安装 android maven插件教程
查看>>
简明vim练级攻略
查看>>
slidingmenu使用说明
查看>>
nginx配置摘要
查看>>
传输音频
查看>>
CentOS6 图形界面(gnome)安装
查看>>
CMakeLists 可以设置的参数
查看>>
Android 6.0 解决Recyclerview 在 Scrollview 中不能高度自适应问题
查看>>
WebView Cache 缓存清除
查看>>
spring boot 源码分析(九) 事件机制 之 BootstrapApplicationListener
查看>>
Android实现号码归属地查询
查看>>
Python 爬虫实现
查看>>
java日期循环
查看>>
我的友情链接
查看>>
HttpClient调用wsdl协议
查看>>
Ansible 必须安装sshpass计划(you must install the sshpass program)
查看>>
我的友情链接
查看>>
三剑客之sed牛刀小试(二)
查看>>
查询DB version
查看>>
spring环境搭建
查看>>