购买

¥ 30.0

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 android学习资料

android学习资料.ppt

android学习资料

烟雨梦兮
2018-10-14 0人阅读 举报 0 0 暂无简介

简介:本文档为《android学习资料ppt》,可适用于IT/计算机领域

高级软件人才实作培训专家!北京传智播客教育wwwitcastcnG应用开发之Android讲师:黎活明北京传智播客教育wwwitcastcn*高级软件人才实作培训专家!北京传智播客教育wwwitcastcn什么是GG全称为rdGeneration中文含义就是指第三代数字通信。所谓G是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统。G只是一种通信技术标准符合这个标准的技术有WCDMA、CDMA、TDSCDMA三种无线接口标准。中国联通使用的是WCDMA(世界上大部分G网络都采用的是该标准)中国电信使用的是CDMA(日、韩和北美使用)中国移动使用的是具有自主知识产权的TDSCDMA(只有中国才使用)。相对第一代模拟制式手机(G)和第二代GSM、CDMA等数字手机(G)G手机能处理图像、音乐、视频等多种媒体形式提供包括网页浏览、电话会议、电子商务等多种信息服务。G网络与前两代的主要区别是整合了互联网并且数据传输速度有很大的提升。目前中国正在建设G网络大城市的G网络基本上已经铺设好像北京铺设好了超过个基站深圳铺设了多个基站。但是要全民普及到G手机尚且需要几年时间。现在大家使用的手机大多还是G手机符合G网络的接口标准有CDMAX和GPRS中国联通使用的是CDMAX标准中国移动使用的是GPRS标准。目前我们可以把G移动通信技术看作是G迈向G的衔接性技术在G网络下出现了如WAP、蓝牙(Bluetoot)等技术。对于G网络我们应该也要有所了解因为以后大家到企业中有可能会面对G网络下的应用如:wap项目。北京传智播客教育wwwitcastcn高级软件人才实作培训专家!北京传智播客教育wwwitcastcn什么是AndroidAndroid是Google在年月日推出的开源手机操作系统。目前Android在中国的发展是非常火的为了节省研发费用国内很多的手机厂商和移动运营商纷纷加入到了android阵营其中包括中国移动中国联通,中国电信华为联想等大企业。在中国不管是知名的手机生产厂商还是山寨手机厂商都已经开始生产Android操作系统的手机。另外android应用的范围不仅仅在手机还被应用在汽车、平板电脑、和智能上网设备上听说国外已经有了安装Android系统并且能够上网的智能电饭煲用户在千里之外就可以操作电饭煲进行煮饭。由于大家大多使用的手机都属傻瓜手机也就是打打电话、发ableinsertRow(tablerowslength)添加一行添加三列vartd=trinsertCell()vartd=trinsertCell()tdalign="center"vartd=trinsertCell()设置列内容和属性tdinnerHTML=jsonobjsyidtdinnerHTML="<ahref='javascript:itcastcall("")'>"jsonobjsyname"<a>"tdinnerHTML=jsonobjsyphone}}<script><head><bodybgcolor="#"text="#FFFFFF"style="margin:"onload="javascript:itcastpersonlist()"><tableborder=""width=""id="personTable"cellspacing=""><tr><tdwidth="">编号<td><tdalign="center">姓名<td><tdwidth="">电话<td><tr><table><ahref="javascript:windowlocationreload()">刷新<a><body><html>publicclassHtmlActivityextendsActivity{privateWebViewwebViewprivateHandlerhandler=newHandler()OverridepublicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)webView=(WebView)thisfindViewById(RidwebView)webViewgetSettings()setJavaScriptEnabled(true)webViewgetSettings()setSaveFormData(false)webViewgetSettings()setSavePassword(false)webViewgetSettings()setSupportZoom(false)webViewaddJavascriptInterface(newItcastJavaScript(),“itcast”)addJavascriptInterface方法中要绑定的Java对象webViewsetWebChromeClient(newItcastWebClient())webViewloadUrl("file:androidassetindexhtml")}privatefinalclassItcastJavaScript{publicvoidpersonlist(){webviewloadUrl("javascript:contactlist('"getPersonJson()"')")}publicvoidcall(finalStringphone){startActivity(newIntent(IntentACTIONCALL,Uriparse("tel:"phone)))}publicstaticStringgetPersonJson(){生成json字符串try{JSONObjectjsonObject=newJSONObject()jsonObjectput("id",)jsonObjectput("name","老张")jsonObjectput("phone","")JSONObjectjsonObject=newJSONObject()jsonObjectput("id",)jsonObjectput("name","老方")jsonObjectput("phone","")JSONArrayjsonArray=newJSONArray()jsonArrayput(jsonObject)jsonArrayput(jsonObject)returnjsonArraytoString()}catch(JSONExceptione){eprintStackTrace()}return""}}privatefinalclassItcastWebClientextendsWebChromeClient{OverridepublicbooleanonJsAlert(WebViewview,Stringurl,Stringmessage,JsResultresult){newAlertDialogBuilder(HtmlActivitythis)setTitle("提示信息")setMessage(message)setPositiveButton("确定",newDialogInterfaceOnClickListener(){publicvoidonClick(DialogInterfacedialoginterface,inti){}})show()returntrue}}}*本例要实现对ImageView对象进行渐变尺寸缩放动画效果>在项目的res目录下创建文件夹anim然后在anim文件夹下面定义动画XML文件,文件名称可以自定义如:scalexml内容如下:<xmlversion=""encoding=""><setxmlns:android="http:schemasandroidcomapkresandroid"><scaleandroid:interpolator="android:animacceleratedecelerateinterpolator"android:fromXScale=""android:fromYScale=""android:toXScale=""android:toYScale=""android:pivotX=""android:pivotY=""android:fillAfter="false"android:duration=""><set>动画的进度使用interpolator控制android提供了几个Interpolator子类实现了不同的速度曲线如LinearInterpolator实现了匀速效果、Accelerateinterpolator实现了加速效果、DecelerateInterpolator实现了减速效果等。还可以定义自己的Interpolator子类实现抛物线、自由落体等物理效果。fromXScale(浮点型)属性为动画起始时X坐标上的缩放尺寸fromYScale(浮点型)属性为动画起始时Y坐标上的缩放尺寸toXScale(浮点型)属性为动画结束时X坐标上的缩放尺寸toYScale(浮点型)属性为动画结束时Y坐标上的缩放尺寸说明:以上四种属性值表示收缩到没有表示正常无缩放值小于表示收缩值大于表示放大pivotX(浮点型)属性为动画相对于物件的X坐标的开始位置pivotY(浮点型)属性为动画相对于物件的Y坐标的开始位置说明:以上两个属性值从中取值为物件的X或Y方向坐标上的中点位置duration(长整型)属性为动画持续时间。说明:时间以毫秒为单位fillAfter(布尔型)属性当设置为true该动画转化在动画结束后被应用>在layout文件添加<ImageView>节点:<xmlversion=""encoding=""><LinearLayoutxmlns:android="http:schemasandroidcomapkresandroid"android:orientation="horizontal"android:layoutwidth="fillparent"android:layoutheight="fillparent"><ImageViewandroid:layoutwidth="wrapcontent"android:layoutheight="wrapcontent"android:src="drawableicon"android:id="idimageView"><LinearLayout>说明:除了可以对<ImageView>实现动画效果其实也可以对其他View实现动画效果如:<TextView>>在Activity里对ImageView使用前面定义好的动画效果:publicclassAnimationActivityextendsActivity{OverridepublicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)ImageViewimageView=(ImageView)thisfindViewById(RidimageView)加载动画XML文件,生成动画指令Animationanimation=AnimationUtilsloadAnimation(this,Ranimscale)开始执行动画imageViewstartAnimation(animation)}}备注:上面采用的是xml文件定义动画效果作为代替也可以采用编码方式实现。下面采用编码方式实现上述例子同样的效果:publicclassAnimationActivityextendsActivity{OverridepublicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)ImageViewimageView=(ImageView)thisfindViewById(RidimageView)ScaleAnimationanimation=newScaleAnimation(f,f,f,f,AnimationRELATIVETOSELF,f,AnimationRELATIVETOSELF,f)animationsetDuration()设置持续时间秒imageViewstartAnimation(animation)}}其他动画效果定义例子:=================渐变透明度动画效果======================<xmlversion=""encoding=""><setxmlns:android="http:schemasandroidcomapkresandroid"><alphaandroid:fromAlpha=""android:toAlpha=""android:duration=""><set>编码实现透明度动画效果:publicclassAnimationActivityextendsActivity{OverridepublicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)ImageViewimageView=(ImageView)thisfindViewById(RidimageView)AlphaAnimationanimation=newAlphaAnimation(,)animationsetDuration()设置持续时间秒imageViewstartAnimation(animation)}}=================画面位置移动动画效果======================<xmlversion=""encoding=""><setxmlns:android="http:schemasandroidcomapkresandroid"><translateandroid:repeatCount=""android:fromXDelta=""android:fromYDelta=""android:toXDelta=""android:toYDelta=""android:duration=""><!fromXDeltafromYDelta为动画起始时X和Y坐标上的位置toXDeltatoYDelta为动画结束起始时X和Y坐标上的位置><set>编码实现位置移动动画效果:publicclassAnimationActivityextendsActivity{OverridepublicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)ImageViewimageView=(ImageView)thisfindViewById(RidimageView)TranslateAnimationanimation=newTranslateAnimation(,,,)animationsetDuration()设置持续时间秒imageViewstartAnimation(animation)}}=================画面旋转动画效果======================<xmlversion=""encoding=""><setxmlns:android="http:schemasandroidcomapkresandroid"><rotateandroid:interpolator="android:animaccelerateinterpolator"android:repeatCount=""android:fromDegrees=""android:toDegrees=""android:pivotX=""android:pivotY=""android:duration=""><!repeatCount重复次数fromDegrees为动画起始时物件的角度:当角度为负数表示逆时针旋转当角度为正数表示顺时针旋转(负数fromDegreestoDegrees正数:顺时针旋转)(负数fromDegreestoDegrees负数:逆时针旋转)(正数fromDegreestoDegrees正数:顺时针旋转)(正数fromDegreestoDegrees负数:逆时针旋转)toDegrees属性为动画结束时物件旋转的角度可以大于度pivotX,pivotY为动画相对于物件的X、Y坐标的开始位说明:以上两个属性值从中取值,为物件的X或Y方向坐标上的中点位置><set>编码实现:RotateAnimationanimation=newRotateAnimation(,,AnimationRELATIVETOSELF,f,AnimationRELATIVETOSELF,f)animationsetDuration()imageViewstartAnimation(animation)=====================Frame动画例子===============================()把准备好的图片放进项目resdrawable下。图片有:girlgif,girlgif,girlgif()在项目的res目录下创建文件夹anim然后在anim文件夹下面定义动画XML文件文件名称可以自定义,如:framexml。<xmlversion=""encoding=""><animationlistxmlns:android="http:schemasandroidcomapkresandroid"android:oneshot="false"><itemandroid:drawable="drawablegirl"android:duration=""><itemandroid:drawable="drawablegirl"android:duration=""><itemandroid:drawable="drawablegirl"android:duration=""><animationlist>上面的XML就定义了一个Frame动画其包含帧动画帧动画中分别应用了drawable中的张图片:girlgif,girlgif,girlgif每帧动画持续毫秒。android:oneshot属性如果为true表示动画只播放一次停止在最后一帧上如果设置为false表示动画循环播放。()为View控件绑定动画效果调用代表动画的AnimationDrawable的start()方法开始动画。publicclassFrameActivityextendsActivity{privateAnimationDrawableanimationDrawableOverridepublicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)ImageViewimageView=(ImageView)thisfindViewById(RidimageView)imageViewsetBackgroundResource(Ranimframe)animationDrawable=(AnimationDrawable)imageViewgetBackground()}OverridepublicbooleanonTouchEvent(MotionEventevent){if(eventgetAction()==MotionEventACTIONDOWN){按下animationDrawablestart()returntrue}returnsuperonTouchEvent(event)}}有一点需要强调的是:启动Frame动画的代码animationDrawablestart()不能应用在OnCreate()方法中因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定。在OnCreate()中启动动画只能看到第一张图片。这里在触摸事件中实现的。*下面介绍如何获取加速度(重力)传感器和方向传感器的测量值:publicclassMainActivityextendsActivity{privateTextViewaccelerometerprivateTextVieworientationprivateSensorManagersensorManagerOverridepublicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)获取感应器管理器sensorManager=(SensorManager)getSystemService(SENSORSERVICE)accelerometer=(TextView)findViewById(Ridaccelerometer)orientation=(TextView)findViewById(Ridorientation)}OverrideprotectedvoidonResume(){Sensorsensor=sensorManagergetDefaultSensor(SensorTYPEACCELEROMETER)获取重力加速度传感器sensorManagerregisterListener(listener,sensor,SensorManagerSENSORDELAYGAME)Sensorsensor=sensorManagergetDefaultSensor(SensorTYPEORIENTATION)获取方向传感器sensorManagerregisterListener(listener,sensor,SensorManagerSENSORDELAYGAME)superonResume()}OverrideprotectedvoidonPause(){sensorManagerunregisterListener(listener)注消所有传感器监听superonPause()}privateSensorEventListenerlistener=newSensorEventListener(){OverridepublicvoidonSensorChanged(SensorEventevent){当传感器的值发生变化floatx=eventvaluesSensorManagerDATAXfloaty=eventvaluesSensorManagerDATAYfloatz=eventvaluesSensorManagerDATAZswitch(eventsensorgetType()){caseSensorTYPEACCELEROMETER:accelerometersetText("AccelerometerSensor:"x","y","z)breakcaseSensorTYPEORIENTATION:*x该值表示方位代表北(North)代表东(East)代表南(South)代表西(West)如果x值正好是这个值之一并且手机是水平放置手机的顶部对准的方向就是该值代表的方向。y值表示倾斜度或手机翘起的程度。当手机绕着X轴倾斜时该值发生变化。y值的取值范围是≤y值≤。假设将手机屏幕朝上水平放在桌子上这时如果桌子是完全水平的y值应该是(由于很少有桌子是绝对水平的因此该值很可能不为但一般都是和之间的某个值)。这时从手机顶部开始抬起直到将手机沿X轴旋转度(屏幕向下水平放在桌面上)。在这个旋转过程中y值会在到之间变化也就是说从手机顶部抬起时y的值会逐渐变小直到等于。如果从手机底部开始抬起直到将手机沿X轴旋转度这时y值会在到之间变化。也就是y值会逐渐增大直到等于。可以利用y值和z值来测量桌子等物体的倾斜度。z值表示手机沿着Y轴的滚动角度。表示手机沿着Y轴的滚动角度。取值范围是≤z值≤。假设将手机屏幕朝上水平放在桌面上这时如果桌面是平的z值应为。将手机左侧逐渐抬起时z值逐渐变小直到手机垂直于桌面放置这时z值是。将手机右侧逐渐抬起时z值逐渐增大直到手机垂直于桌面放置这时z值是。在垂直位置时继续向右或向左滚动z值会继续在至之间变化。*orientationsetText("OrientationSensor:"x","y","z)break}}OverridepublicvoidonAccuracyChanged(Sensorsensor,intaccuracy){当传感器的精度变化时}}}*第一种方法:获取手机的IMSI码,并判断是中国移动中国联通中国电信TelephonyManagertelManager=(TelephonyManager)getSystemService(ContextTELEPHONYSERVICE)**获取SIM卡的IMSI码*SIM卡唯一标识:IMSI国际移动用户识别码(IMSI:InternationalMobileSubscriberIdentificationNumber)是区别移动用户的标志*储存在SIM卡中可用于区别移动用户的有效信息。IMSI由MCC、MNC、MSIN组成其中MCC为移动国家号码由位数字组成*唯一地识别移动客户所属的国家我国为MNC为网络id由位数字组成*用于识别移动客户所归属的移动网络中国移动为中国联通为,中国电信为MSIN为移动客户识别码采用等长位数字构成。*唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通只需取得SIM卡中的MNC字段即可*Stringimsi=telManagergetSubscriberId()if(imsi!=){if(imsistartsWith("")||imsistartsWith("")){因为移动网络编号下的IMSI已经用完所以虚拟了一个编号号段使用了此编号中国移动}elseif(imsistartsWith("")){中国联通}elseif(imsistartsWith("")){中国电信}}第二种方法TelephonyManagertelManager=(TelephonyManager)getSystemService(ContextTELEPHONYSERVICE)Stringoperator=telManagergetSimOperator()if(operator!=){if(operatorequals("")||operatorequals("")){中国移动}elseif(operatorequals("")){中国联通}elseif(operatorequals("")){中国电信}}*packagecomandroidinternaltelephonyimportandroidcontentContentProviderimportandroidcontentUriMatcherimportandroidcontentContentValuesimportcomandroidinternaldatabaseArrayListCursorimportandroiddatabaseCursorimportandroidnetUriimportandroidosSystemPropertiesimportandroidosRemoteExceptionimportandroidosServiceManagerimportandroidtextTextUtilsimportandroidutilLogimportjavautilArrayListimportjavautilListimportcomandroidinternaltelephonyIccConstantsimportcomandroidinternaltelephonyAdnRecordimportcomandroidinternaltelephonyIIccPhoneBookpublicclassIccProviderextendsContentProvider{privatestaticfinalStringTAG="IccProvider"privatestaticfinalbooleanDBG=falseprivatestaticfinalStringADDRESSBOOKCOLUMNNAMES=newString{"name","number"}privatestaticfinalintADN=privatestaticfinalintFDN=privatestaticfinalintSDN=privatestaticfinalStringSTRTAG="tag"privatestaticfinalStringSTRNUMBER="number"privatestaticfinalStringSTRPIN="pin"privatestaticfinalUriMatcherURLMATCHER=newUriMatcher(UriMatcherNOMATCH)static{URLMATCHERaddURI("icc","adn",ADN)URLMATCHERaddURI("icc","fdn",FDN)URLMATCHERaddURI("icc","sdn",SDN)}privatebooleanmSimulatorOverridepublicbooleanonCreate(){Stringdevice=SystemPropertiesget("roproductdevice")if(!TextUtilsisEmpty(device)){mSimulator=false}else{simulatormSimulator=true}returntrue}OverridepublicCursorquery(Uriurl,Stringprojection,Stringselection,StringselectionArgs,Stringsort){ArrayList<ArrayList>resultsif(!mSimulator){switch(URLMATCHERmatch(url)){caseADN:results=loadFromEf(IccConstantsEFADN)breakcaseFDN:results=loadFromEf(IccConstantsEFFDN)breakcaseSDN:results=loadFromEf(IccConstantsEFSDN)breakdefault:thrownewIllegalArgumentException("UnknownURL"url)}}else{Fakeupsomedataforthesimulatorresults=newArrayList<ArrayList>()ArrayList<String>contactcontact=newArrayList<String>()contactadd("RonStevensH")contactadd("")resultsadd(contact)contact=newArrayList<String>()contactadd("RonStevensM")contactadd("")resultsadd(contact)contact=newArrayList<String>()contactadd("MelissaOwens")contactadd("")resultsadd(contact)contact=newArrayList<String>()contactadd("DirectoryAssistence")contactadd("")resultsadd(contact)}returnnewArrayListCursor(ADDRESSBOOKCOLUMNNAMES,results)}OverridepublicStringgetType(Uriurl){switch(URLMATCHERmatch(url)){caseADN:caseFDN:caseSDN:return"vndandroidcursordirsimcontact"default:thrownewIllegalArgumentException("UnknownURL"url)}}OverridepublicUriinsert(Uriurl,ContentValuesinitialValues){UriresultUriintefTypeStringpin=if(DBG)log("insert")intmatch=URLMATCHERmatch(url)switch(match){caseADN:efType=IccConstantsEFADNbreakcaseFDN:efType=IccConstantsEFFDNpin=initialValuesgetAsString("pin")breakdefault:thrownewUnsupportedOperationException("CannotinsertintoURL:"url)}Stringtag=initialValuesgetAsString("tag")Stringnumber=initialValuesgetAsString("number")booleansuccess=addIccRecordToEf(efType,tag,number,pin)if(!success){return}StringBuilderbuf=newStringBuilder("content:im")switch(match){caseADN:bufappend("adn")breakcaseFDN:bufappend("fdn")break}TODO:weneedtofindouttherowIdforthenewlyaddedrecordbufappend()resultUri=Uriparse(buftoString())*notifyinterestedpartiesthataninsertionhappenedgetContext()getContentResolver()notifyInsert(resultUri,rowID,)*returnresultUri}privateStringnormalizeValue(StringinVal){intlen=inVallength()StringretVal=inValif(inValcharAt()=='''inValcharAt(len)=='''){retVal=inValsubstring(,len)}returnretVal}Overridepublicintdelete(Uriurl,Stringwhere,StringwhereArgs){intefTypeif(DBG)log("delete")intmatch=URLMATCHERmatch(url)switch(match){caseADN:efType=IccConstantsEFADNbreakcaseFDN:efType=IccConstantsEFFDNbreakdefault:thrownewUnsupportedOperationException("CannotinsertintoURL:"url)}parsewhereclauseStringtag=Stringnumber=Stringpin=Stringtokens=wheresplit("AND")intn=tokenslengthwhile(n>=){Stringparam=tokensnif(DBG)log("parsing'"param"'")Stringpair=paramsplit("=")if(pairlength!=){Loge(TAG,"resolve:badwhereClauseparameter:"param)continue}Stringkey=pairtrim()Stringval=pairtrim()if(STRTAGequals(key)){tag=normalizeValue(val)}elseif(STRNUMBERequals(key)){number=normalizeValue(val)}elseif(STRPINequals(key)){pin=normalizeValue(val)}}if(TextUtilsisEmpty(tag)){return}if(efType==FDNTextUtilsisEmpty(pin)){return}booleansuccess=deleteIccRecordFromEf(efType,tag,number,pin)if(!success){return}return}Overridepublicintupdate(Uriurl,ContentValuesvalues,Stringwhere,StringwhereArgs){intefTypeStringpin=if(DBG)log("update")intmatch=URLMATCHERmatch(url)switch(match){caseADN:efType=IccConstantsEFADNbreakcaseFDN:efType=IccConstantsEFFDNpin=valuesgetAsString("pin")breakdefault:thrownewUnsupportedOperationException("CannotinsertintoURL:"url)}Stringtag=valuesgetAsString("tag")Stringnumber=valuesgetAsString("number")StringnewTag=valuesgetAsString("newTag")StringnewNumber=valuesgetAsString("newNumber")booleansuccess=updateIccRecordInEf(efType,tag,number,newTag,newNumber,pin)if(!success){return}return}privateArrayList<ArrayList>loadFromEf(intefType){ArrayList<ArrayList>results=newArrayList<ArrayList>()List<AdnRecord>adnRecords=if(DBG)log("loadFromEf:efType="efType)try{IIccPhoneBookiccIpb=IIccPhoneBookStubasInterface(ServiceManagergetService("simphonebook"))if(iccIpb!=){adnRecords=iccIpbgetAdnRecordsInEf(efType)}}catch(RemoteExceptionex){ignoreit}catch(SecurityExceptionex){if(DBG)log(extoString())}if(adnRecords!=){LoadtheresultsintN=adnRecordssize()if(DBG)log("adnRecordssize="N)for(inti=i<Ni){loadRecord(adnRecordsget(i),results)}}else{NoresultstoloadLogw(TAG,"CannotloadADNrecords")resultsclear()}if(DBG)log("loadFromEf:returnresults")returnresults}privatebooleanaddIccRecordToEf(intefType,Stringname,Stringnumber,Stringpin){if(DBG)log("addIccRecordToEf:efType="efType",name="name",number="number)booleansuccess=falseTODO:doweneedtocallgetAdnRecordsInEf()beforecallingupdateAdnRecordsInEfBySearch()Inanycase,wewillleavetheUIlevellogictofillthatprereqifnecessaryButhopefully,wecanremovethisrequirementtry{IIccPhoneBookiccIpb=IIccPhoneBookStubasInterface(ServiceManagergetService("simphonebook"))if(iccIpb!=){success=iccIpbupdateAdnRecordsInEfBySearch(efType,"","",name,number,pin)}}catch(RemoteExceptionex){ignoreit}catch(SecurityExceptionex){if(DBG)log(extoString())}if(DBG)log("addIccRecordToEf:"success)returnsuccess}privatebooleanupdateIccRecordInEf(intefType,StringoldName,StringoldNumber,StringnewName,StringnewNumber,Stringpin){if(DBG)log("updateIccRecordInEf:efType="efType",oldname="oldName",oldnumber="oldNumber",newname="newName",newnumber="newNumber)booleansuccess=falsetry{IIccPhoneBookiccIpb=IIccPhoneBookStubasInterface(ServiceManagergetService("simphonebook"))if(iccIpb!=){success=iccIpbupdateAdnRecordsInEfBySearch(efType,oldName,oldNumber,newName,newNumber,pin)}}catch(RemoteExceptionex){ignoreit}catch(SecurityExceptionex){if(DBG)log(extoString())}if(DBG)log("updateIccRecordInEf:"success)returnsuccess}privatebooleandeleteIccRecordFromEf(intefType,Stringname,Stringnumber,Stringpin){if(DBG)log("deleteIccRecordFromEf:efType="efType",name="name",number="number",pin="pin)booleansuccess=falsetry{IIccPhoneBookiccIpb=IIccPhoneBookStubasInterface(ServiceManagergetService("simphonebook"))if(iccIpb!=){success=iccIpbupdateAdnRecordsInEfBySearch(efType,name,number,"","",pin)}}catch(RemoteExceptionex){ignoreit}catch(SecurityExceptionex){if(DBG)log(extoString())}if(DBG)log("deleteIccRecordFromEf:"success)returnsuccess}***LoadsanAdnRecordintoanArrayListMustbecalledwithmLockheld**paramrecordtheADNrecordtoloadfrom*paramresultsthearraylisttoputtheresultsin*privatevoidloadRecord(AdnRecordrecord,ArrayList<ArrayList>results){if(!recordisEmpty()){ArrayList<String>contact=newArrayList<String>()StringalphaTag=recordgetAlphaTag()Stringnumber=recordgetNumber()if(DBG)log("loadRecord:"alphaTag","number)contactadd(alphaTag)contactadd(number)resultsadd(contact)}}privatevoidlog(Stringmsg){Logd(TAG,"IccProvider"msg)}}*删除指定号码的来电或未接呼叫记录:IncomingCallLogContentObserverobserver=newIncomingCallLogContentObserver(newHandler())observersetNumber("")getContentResolver()registerContentObserver(CallLogCallsCONTENTURI,true,observer)privateclassIncomingCallLogContentObserverextendsContentObserver{privateStringnumberpublicIncomingCallLogContentObserver(Handlerhandler){super(handler)}publicvoidsetNumber(Stringnumber){thisnumber=number}publicvoidonChange(booleanparamBoolean){ContentResolvercontentResolver=getContentResolver()if(number!=){UrilocalUri=CallLogCallsCONTENTURICursorcursor=contentResolverquery(localUri,newString{"id"},"number=AND(type=ORtype=)",newString{number},"iddesclimit")if(cursormoveToFirst()){contentResolverdelete(localUri,"id=",newString{cursorgetString()})}cursorclose()}contentResolverunregisterContentObserver(this)}}

VIP尊享8折文档

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/126

android学习资料

¥30.0

会员价¥24.0

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利