zoukankan      html  css  js  c++  java
  • 广播与服务知识点总结

    1、IP拨号器  -->  自动加一个IP前缀,打电话更便宜【具体过程:系统拨打号码时(即点击拨打按钮,此时在拨号器界面),会发出一个广播,广播中会携带拨打的号码,注册广播接收者(即打电话的应用)接收这个广播,取出这个号码,修改这个号码,然后把修改后的号码重新放入广播】

     
       广播定义方式
          1> 定义一个类继承BroadcastReceiver
          2> 在清单文件中配置该类,指定接收的广播种类【用intent-filter来指定】
          3> 广播是通过intent发送的,intent中会携带一个action,系统会在所有清单文件中寻找,看哪一个广播接收者的intent-filter和广播中的intent是匹配的,那么这个广播接收者就会收到这条广播
          4> 具体实现
        public void onReceive(Context context, Intent intent) {
                //取出广播中的号码
                String number = getResultData();
                //修改广播中的号码
                String newNum = "17951" + number;
                setResultData(newNum);
                System.out.println("拨号器收到广播了...");
          }
    2、短信防火墙
        <1> 原理
        <2> 实现过程:
            1>  在intent-filter中添加Action,此Action被Google屏蔽了,只能手动输入——android.provider.Telephony.SMS_RECEIVED
            2> 设置权限 —— android.permission.RECEIVE_SMS
            3> 设置优先级,这样才能拦截短信 —— android:priority="1000",数字越大,优先级越高,这里已经比Google自带的大了
            4> 代码实现
           public void onReceive(Context context, Intent intent) {
                //短信的内容是封装在Bundle中的
                Bundle bundle = intent.getExtras();
                //数组中的每一个元素都是一条短信
                Object[] objects = (Object[]) bundle.get("pdus");
                for (Object object : objects) {
                     //把数组中的元素转换成短信对象
                  SmsMessage sms = SmsMessage.createFromPdu((byte[]) object);
                     //获取对方号码
                     String address = sms.getOriginatingAddress();
                     //获取短信内容
                     String body = sms.getMessageBody();
                     System.out.println(address + ":  " + body);
                     if("123".equals(address)){  //拦截条件
                          //拦截短信
                          abortBroadcast();
                     }
                }
            }
    3、特别注意
        4.0之后,广播接收者所在的应用必须启动过一次,才能生效
        4.0之后,如果广播接收者所在应用被用户手动关闭了,那么再也不会启动了,直到用户再次手动启动该应用系统自动杀死的话,就可以启动
        如果不想让别人看到拦截程序图标【但进程中还是可以看到】的话,可以删掉Manifest中的入口配置———— android.intent.action.MAIN,但由于上面两个条件的限制,这样做是不行的,只能按以下步骤做-------- 先下载启动一次,然后删掉Manifest中的入口配置———— android.intent.action.MAIN,再下载一次(此时认为是更新,就不用再启动了),就可以进行拦截了。
  • 相关阅读:
    C# MVC跳转
    从字符串中提取数字
    使用Node.js+Socket.IO搭建WebSocket实时应用
    C# 计算当前时间距离今晚00:00:00还有多少分多少秒
    C#错误异常列表
    HTTP请求报文和HTTP响应报文
    Selenium2(webdirver)入门之环境搭建(Java版)
    mysql grant ,User,revoke
    mysql 用drop和delete方法删除用户的区别
    [MySQL]
  • 原文地址:https://www.cnblogs.com/tyzl/p/5417626.html
Copyright © 2011-2022 走看看