public class PhoneBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String number = getResultData();
        if("5556".equals(number)){
            setResultData(null);//清除电话号码,不能拨打电话
        }else{
            number = "12593"+ number;
            setResultData(number);//修改电话
        }
    }

}

Android:BroadcastReceiver:采用广播接收者拦截外拔电话、发送广播、其他常用广播、特性_第1张图片



<?xml version="1.0" encoding="utf-8"?>
      package="cn.itcast.smslistener"
      android:versionCode="1"
      android:versionName="1.0">
   
        
            
                
            

        

        
            
                
            

        

   
   





Android:BroadcastReceiver:采用广播接收者拦截外拔电话、发送广播、其他常用广播、特性_第2张图片

可以指定明确的接受者,这样终止这个命令就不好使了


EditText有一个属性:android:inputType设置只能输入什么东西,比如phoneemail



除了短信到来广播Intent,Android还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent

l 接收电池电量变化广播 Intent ,在 AndroidManifest.xml 文件中的 节点里订阅此 Intent:

android:name=".IncomingSMSReceiver">

   

         android:name="android.intent.action.BATTERY_CHANGED"/>

   

l 接收开机启动广播 Intent ,在 AndroidManifest.xml 文件中的 节点里订阅此 Intent:

android:name=".IncomingSMSReceiver">

   

         android:name="android.intent.action.BOOT_COMPLETED"/>

   

并且要进行权限声明:

android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>





Android中,程序的响应(Responsive)被活动管理器(ActivityManager)和窗口管理器(Window Manager)这两个系统服务所监视。当BroadcastReceiver10秒内没有执行完毕,Android会认为该程序无响应。所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANRApplication No Response)的对话框。如果需要完成一项比较耗时的工作,应该通过发送IntentService,由Service来完成。而不是使用子线程的方法来解决,因为BroadcastReceiver的生命周期很短(在onReceive()执行后BroadcastReceiver的实例就会被销毁),子线程可能还没有结束它就先结束了。当然如果BroadcastReceiver结束了,它的宿主进程还在运行,子线程还会继续执行。但宿主进程此时很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。

public class IncomingSMSReceiver extends BroadcastReceiver {

  @Override public void onReceive(Context context, Intent intent) {

            //发送Intent启动服务,由服务来完成比较耗时的操作

            Intent service =new Intent(context, XxxService.class);

            context.startService(service);

  }

}

每次广播消息到来时都会创建 BroadcastReceiver 实例并执行 onReceive () 方法。


更多相关文章

  1. Android 子线程请求ASP.NET后台
  2. 【Android】使用Binder池减少Service进程数
  3. Android 使用AIDL实现守护进程
  4. android之UI线程处理
  5. Android安全模型之Android安全机制(进程沙箱)
  6. android之多线程
  7. Android 中的线程
  8. 浅析android线程模型【Android】
  9. Android底下多线程下载远程图片

随机推荐

  1. 详解MySQL中的pid与socket
  2. MySQL 如何设计统计数据表
  3. 浅谈MySQL 亿级数据分页的优化
  4. 解析MySQL binlog
  5. 详细谈谈MYSQL中的COLLATE是什么
  6. 深入探究Mysql模糊查询是否区分大小写
  7. mysql高效查询left join和group by(加索
  8. 安装配置mysql及Navicat prenium的详细流
  9. mysql 如何获取两个集合的交集/差集/并集
  10. Mysql 如何查询时间段交集