要使用这项功能必须要越狱(不越狱也有软件但使用不方便而且费电),比如使用kuaidial,它并没有重新编写一个新的电话程序,而是对iPhone现有的通话程序进行改造,使其支持来电显示。
1、打开Cydia,添加软件源
2、添加完成之后,在搜索框中输入kuaidial,选中安装
3、安装完成之后,打开通话程序,拨打电话,就可以看到来电归属地了。短信详情页,也是可以看到相应的号码归属地了。
其实原理非常简单就是在Phone.apk中添加一些代码,在来电号码的下面分配一个显示区域而显示区域的内容来自于归属地数据库中的数据就跟通话记录中的归属地数据显示是一个道理需要使用到工具baksmali及smali或apktoolPhone.apk添加归属地显示代码提取ROM中的Phone.apk用zip解包得到其中的classes.dexsmali解包dex(或者反编译Phone.apk同样可以得到smali)在这个文件夹里classes\smali\com\android\phone找到CallCard.smaliNotepad打开随便找个地方,添加一个类,当然你不能添加到别的类里面了。。。可以在类似于goto :goto_e.end method复制代码的后面添加.method private setGeoDescription(Lcom/android/internal/telephony/CallerInfo)V.locals 3.parameter "info".prologueconst/16 v2, 0x8.line 36if-nez p1, :cond_1.line 51:cond_0:goto_0return-void.line 38:cond_1iget-object v0, p0, Lcom/android/phone/CallCard->mCallTypeLabel:Landroid/widget/TextViewinvoke-virtual {v0}, Landroid/widget/TextView->getVisibility()Imove-result v0if-ne v0, v2, :cond_0.line 39iget-object v0, p1, Lcom/android/internal/telephony/CallerInfo->geoDescription:Ljava/lang/Stringinvoke-static {v0}, Landroid/text/TextUtils->isEmpty(Ljava/lang/CharSequence)Zmove-result v0if-eqz v0, :cond_2.line 40invoke-virtual {p0}, Lcom/android/phone/CallCard->getContext()Landroid/content/Contextmove-result-object v0iget-object v1, p1, Lcom/android/internal/telephony/CallerInfo->phoneNumber:Ljava/lang/Stringinvoke-virtual {p1, v0, v1}, Lcom/android/internal/telephony/CallerInfo->updateGeoDescription(Landroid/content/ContextLjava/lang/String)V.line 42:cond_2iget-object v0, p1, Lcom/android/internal/telephony/CallerInfo->geoDescription:Ljava/lang/Stringinvoke-static {v0}, Landroid/text/TextUtils->isEmpty(Ljava/lang/CharSequence)Zmove-result v0if-nez v0, :cond_0.line 43iget-object v0, p0, Lcom/android/phone/CallCard->mCallTypeLabel:Landroid/widget/TextViewconst/4 v1, 0x0invoke-virtual {v0, v1}, Landroid/widget/TextView->setVisibility(I)V.line 44iget-object v0, p0, Lcom/android/phone/CallCard->mCallTypeLabel:Landroid/widget/TextViewiget-object v1, p1, Lcom/android/internal/telephony/CallerInfo->geoDescription:Ljava/lang/Stringinvoke-virtual {v0, v1}, Landroid/widget/TextView->setText(Ljava/lang/CharSequence)V.line 45iget-object v0, p0, Lcom/android/phone/CallCard->mCallTypeLabel:Landroid/widget/TextViewconst v1, -0xd75f35invoke-virtual {v0, v1}, Landroid/widget/TextView->setTextColor(I)V.line 46iget-object v0, p1, Lcom/android/internal/telephony/CallerInfo->geoDescription:Ljava/lang/Stringiget-object v1, p0, Lcom/android/phone/CallCard->mPhoneNumber:Landroid/widget/TextViewinvoke-virtual {v1}, Landroid/widget/TextView->getText()Ljava/lang/CharSequencemove-result-object v1invoke-virtual {v0, v1}, Ljava/lang/String->equals(Ljava/lang/Object)Zmove-result v0if-eqz v0, :cond_0.line 47iget-object v0, p0, Lcom/android/phone/CallCard->mPhoneNumber:Landroid/widget/TextViewinvoke-virtual {v0, v2}, Landroid/widget/TextView->setVisibility(I)Vgoto :goto_0.end method复制代码以上代码第71行为归属地颜色,默认为Holoblue,不喜欢可以自己替换其他颜色,自己查色表,我就不给了查找如下代码invoke-direct {p0, p4}, Lcom/android/phone/CallCard->updateCallTypeLabel(Lcom/android/internal/telephony/Call)V复制代码在其下面添加move-object/from16 v0, p1invoke-direct {p0, p1}, Lcom/android/phone/CallCard->setGeoDescription(Lcom/android/internal/telephony/CallerInfo)V复制代码bingo,打包dex,重新命名为classes.dex用zip打开Phone.apk用刚做好的classes.dex替换(当然,如果你用的反编译过来的smali的话,直接回编译更方便,不过重新编译的Phone.apk需要重新签名,不能直接替换原来的文件)第三节 增加中文归属地数据下载ext.jarzip打开ext.jar提取com/android/i18n/phonenumbers/geocoding/data/中的86_zh提取系统中system\framework中ext.jar用zip把86_zh(中国地区的归属地数据)替换到到原来的ext.jar中okay,结束。第四节 工具下载 下载baksmali&smali欢迎分享,转载请注明来源:内存溢出
评论列表(0条)