Android切近实战(九)

  

一个月前还是夏季,如今却已是冬季,西安真的是没有秋季和春季对吧,废话不多说,今天要说的是andriod内部的拨电话广播以及提一下AsyncTask。


咱们在看这篇博客之前,先看看我的那篇& lt; & lt; Windows Mobile 5编程体验3祝辞祝辞。在那篇文章我提到了一个网站,可以获取手机号码归属地,天气预报等等一些webservice。下图是我当时在Windows Mobile模拟器上实现的效果,说到这个移动,我本来是很想去学Windows phone开发的,谁想还要交费买账号,太麻烦了,我放弃了,还不如学安卓呢,写个程序随便放上去了。不说了,看下图

 android切近实战(九)

是不是这样呢,我当时说了,这个号码谁随便输入的,如有雷同,纯属巧合。


好的,我们接下来看看这个网站的WebService网站,进去之后,我们点击国内手机号码归属地查询WEB服务

 Android切近实战(九)”> </p> <p>进去之后,我们查看如下方法getMobileCodeInfo </p> <p> <img src=

好的,我们看到了该网络服务得请求请求参数和响应返回结果。

 Android切近实战(九)”> </p> <p>那好,知道了这些,我们何愁调用呢,接下来就看我们的android客户端如何调用它。</p> <p> <br/> </p> <p>首先我们这次的设计是当活动启动后,我们拿到本机的号码。当用户播出电话的时候,先拿到本机号码归属地,再拿到播出号码的归属地,两个号码归属地进行对比,如果归属地不一致,则加拨17951或17911者。</p> <p>首先来看本机号码的获取,我们现在活动中定义一个公开的变量</p> <p>公共字符串nativePhoneNumber; </p> <p>在OnCreate方法中,我们拿到本机号码</p> <pre类= private  String  GetNativePhoneNumber () {   TelephonyManager  TelephonyManager =(TelephonyManager)   ,,,,,,,.getSystemService (Context.TELEPHONY_SERVICE);      return  telephonyManager.getLine1Number ();   }

好的,拿到本机号码后,我们来看拨打这块的处理。我们知道,android有很多的内部广播,比如电池电量低,打电话,收短信,手机重启等等。这些广播我们都可以接收的到,这样我们就可以实现一些功能,比如IP拨的号,电池电量低自动调整屏幕亮度,切断网络等一些手机管理软件类似于360年上面的一些功能。


这里我们接收拨出电话广播的代码如下

public  class  IpDialBroadCastReceiver  extends  BroadcastReceiver  {   时间=final  String  IPChinaMobilePrefix “17951”;   时间=final  String  IPChinaUnionPrefix “17911”;   final  String 中国移动通信="移动”;   final  String  ChinaUnion="联通”;      @Override   public  void  onReceive (Context 上下文,Intent 意图),{   String  callNumber =, getResultData ();//ProgressDialog  pg=punchinalarm.owner.progressDialog;//new  MobileAdressTask (pg callNumber) . execute (callNumber);      String  nativePhoneNumber =, punchinalarm.owner.nativePhoneNumber;      String  nativeAddress=, punchinalarm.GetMobileAddress (nativePhoneNumber) .toString ();   String  callAddress =, punchinalarm.GetMobileAddress (callNumber) .toString ();      String  newIPPhoneNumber=" ";   如果(! nativeAddress.equalsIgnoreCase (callAddress)) {   如果(nativeAddress.contains(中国移动通信))   {   时间=newIPPhoneNumber  IPChinaMobilePrefix.concat (callNumber);   }   其他的   {   时间=newIPPhoneNumber  IPChinaUnionPrefix.concat (callNumber);   }      setResultData (newIPPhoneNumber);   }   }   }

在这里我们区分了联通和移动。当我们接收到打电话的广播之后,先拿到本机号码的归属地和所播电话的归属地进行对比,如果不一致,则加拨IP。这里主要是看一下punchinalarm。GetMobileAddress这个方法。

public  static  SoapObject  GetMobileAddress (String  mobileNumber), {   SoapObject  request =, new  SoapObject(名称空间,,METHOD_NAME);   PropertyInfo  pi =, new  PropertyInfo ();   pi.setName (“mobileCode”);   pi.setType (String.class);   pi.setValue (mobileNumber);   request.addProperty(π);      π=new  PropertyInfo ();   pi.setName(“标识”);   pi.setType (String.class);   pi.setValue (" ");   request.addProperty(π);      SoapSerializationEnvelope  soapEnvelope =, new  SoapSerializationEnvelope (   SoapEnvelope.VER11);   时间=soapEnvelope.dotNet 真实;   HttpTransportSE  httpTS =, new  HttpTransportSE (URL);   时间=soapEnvelope.bodyOut 请求;   soapEnvelope.setOutputSoapObject(请求);//,设置请求参数      try  {   httpTS.call (SOAP_ACTION, soapEnvelope的);   },catch  (IOException  e), {//,TODO  Auto-generated  catch 块   e.printStackTrace ();   },catch  (XmlPullParserException  e), {//,TODO  Auto-generated  catch 块   e.printStackTrace ();   }      SoapObject  result =, (SoapObject), soapEnvelope.bodyIn;   return 结果;   }

Android切近实战(九)