一个月前还是夏季,如今却已是冬季,西安真的是没有秋季和春季对吧,废话不多说,今天要说的是andriod内部的拨电话广播以及提一下AsyncTask。
咱们在看这篇博客之前,先看看我的那篇& lt; & lt; Windows Mobile 5编程体验3祝辞祝辞。在那篇文章我提到了一个网站,可以获取手机号码归属地,天气预报等等一些webservice。下图是我当时在Windows Mobile模拟器上实现的效果,说到这个移动,我本来是很想去学Windows phone开发的,谁想还要交费买账号,太麻烦了,我放弃了,还不如学安卓呢,写个程序随便放上去了。不说了,看下图
是不是这样呢,我当时说了,这个号码谁随便输入的,如有雷同,纯属巧合。
好的,我们接下来看看这个网站的WebService网站,进去之后,我们点击国内手机号码归属地查询WEB服务
好的,我们看到了该网络服务得请求请求参数和响应返回结果。
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切近实战(九)