vivoy20t有视频来电大头贴汉化吗

9362人阅读
本文分三篇。本篇介绍更复杂的定制过程。
(接下来进一步细化上一篇的修改,前六节请参见:)
7、一些遗留问题的修改
上面是最简版本,只是为了突出核心功能的实现,但实际留下的问题还是不少的。下面一一道来。
1) 呀。是成功了呢,不过一会儿就被改回来了。
[修改, 。方法名写错的,应该是updateInCallBackground(),而不是updateScreen()]
这并不是普遍性的问题,有些拔号面板是有背景的,有些则是背景透明而直接显示桌面的。对于有背景的拔号面板,Phone.apk通常会在InCallScreen.smali中有一个updateInCallBackground()方法,找到它的几处调用,注释掉即可。或者干脆把updateInCallBackground()改成空函数就好了。
如果找不到updateInCallBackground()函数,则尝试找一个setBackgroundResource()这个方法,看哪里重绘了mMainFrame的背景即可。
2) 下一次电话呼入的时候,会残留上一个电话使用的大头贴
是的。这应该在此次电话结束时清理掉。这很简单,修改InCallScreen.smali,找到
.method private delayedCleanupAfterDisconnect()V
这个方法。然后找到其中return-void这行代码,往上数几行找个地方插入如下代码即可:
## fixed by aimingoo
## 重置背景
const/4 v0, 0x0
iget-object v1, p0, Lcom/android/phone/InCallS-&mMainFrame:Landroid/view/ViewG
invoke-virtual {v1, v0}, Landroid/view/ViewG-&setBackgroundResource(I)V
## 这里参见本遗留问题第5项有关setPersonInfoStyle()的说明
const/4 v0, 0x1
iget-object v1, p0, Lcom/android/phone/InCallS-&mCallCard:Lcom/android/phone/CallC
invoke-virtual {v1, v0}, Lcom/android/phone/CallC-&setPersonInfoStyle(Z)V
##end fix.
return-void
## &&- 注意从这行代码往上找
3) 好象原来的头像还是会闪一下?
原来的头像是这样的一个获得过程:
& - 首先开始接听或拔打电话
& - 拔号程序显示面板,面板中头像位置显示为“无头像”的icon
& - 异步发起调用,从联系人数据库中读取头像
& - 当上述异步调用返回时,更新显示上面的“无头像”icon为真正的头像图片
所以事实上原生的应用在“显示头像”时都会是两步,这是为了更快地绘制出拨号面板以便用户操作。而们的代码事实上也是依赖这个原理,在上述的过程异步得到“高清大头贴”的数据之后,显示在背景上的。
那么总的来说,事实上头像总会闪一下。并且在异步读取到头像之前,原生界面上就是会显示一个“无头像”的icon。尽管这个过程通常很短,多数时候在你抓过来电话之前就已经闪过去了,但是对于那些正盯着电话看效果的玩实来说,这还是不爽的。
基本上来说,可以注释掉所有修改mPhoto的地方。如果必要,保留一些用于在没有大头贴的情况下显示原有的mPhoto的代码是可以的。作为一个示例,一个简单的地方就是修改showCachedImage()。这首先在CallCard.smail中找到showCachedImage(),然后注释掉其中下面的两行:
# 不必在得到头像时更新cardCard中的头像
.method private static final showCachedImage(Landroid/widget/ImageVLcom/android/internal/telephony/CallerI)Z
iget-object v0, p1, Lcom/android/internal/telephony/CallerI-&cachedPhoto:Landroid/graphics/drawable/D
invoke-static {p0, v0}, Lcom/android/phone/CallC-&showImage(Landroid/widget/ImageVLandroid/graphics/drawable/D)V
这里直接修改showCachedImage(),是因为Phone.apk只为mPhoto成员调用showCachedImage(),其它的会直接调用showImage()。
4) 界面上大头贴显示不全,被一些元素遮住了。要是它们有透明度就好了。
有些时候,界面上的元素是通过贴图来绘制的,也就是在资源文件中,它的背景是一张图片。对于指定颜色的背景,例如#xxRRGGBB,我们可以在资源文件中通过指定xx值来使它透明化。但如果背景是图,那么在较低的android版本的资源文件中又不支持alpha属性,那么就只能在源代码中通过setAlpha()来使之透明了。
后面这种情况(也包括前面这种设置color代码的情况)可以在CallCard.smali与InCallTouchUi.smali中添加代码来实现,某些情况下,你也可能要改到InCallScreen.smali中的代码的。但总的来说,都与具体的Phone.apk有关。下面是我在修改Mokee的Phone.apk中使用的代码。注意,这些代码都应该写在onFinishInflate()方法里,这里刚好初始化完界面,并将界面元素关联到Java对象的成员上。
#---------
# 在完成初始化后,处理一些背景
- CallCard.smali
#---------
.method protected onFinishInflate()V
iput-object v0, p0, Lcom/android/phone/CallC-&mPrimaryCallInfo:Landroid/view/ViewG
## fixed by aimingoo
## for callCardPersonInfo.clild(0)
const v0, 0x7f070020
invoke-virtual {p0, v0}, Lcom/android/phone/CallC-&findViewById(I)Landroid/view/V
move-result-object v0
check-cast v0, Landroid/view/ViewG
const v1, 0x0
invoke-virtual {v0, v1}, Landroid/view/ViewG-&getChildAt(I)Landroid/view/V
move-result-object v0
invoke-virtual {v0}, Landroid/view/V-&getBackground()Landroid/graphics/drawable/D
move-result-object v0
const/16 v1, 0x40
invoke-virtual {v0, v1}, Landroid/graphics/drawable/D-&setAlpha(I)V
## for phoneMsgContainer
const v0, 0x7f070028
invoke-virtual {p0, v0}, Lcom/android/phone/CallC-&findViewById(I)Landroid/view/V
move-result-object v0
invoke-virtual {v0}, Landroid/view/V-&getBackground()Landroid/graphics/drawable/D
move-result-object v0
invoke-virtual {v0, v1}, Landroid/graphics/drawable/D-&setAlpha(I)V
## end fix.
#---------
# 在完成初始化后,处理一些背景
- InCallTouchUi.smali
#---------
.method protected onFinishInflate()V
iput-object v1, p0, Lcom/android/phone/InCallTouchUi;-&stop_layout:Landroid/widget/LinearL
## fixed by aimingoo
## for bottomButtons @ mInCallControls
iget-object v1, p0, Lcom/android/phone/InCallTouchUi;-&mInCallControls:Landroid/view/V
const v2, 0x7f070074
invoke-virtual {v1, v2}, Landroid/view/V-&findViewById(I)Landroid/view/V
move-result-object v0
const/16 v1, 0x40
invoke-virtual {v0}, Landroid/view/V-&getBackground()Landroid/graphics/drawable/D
move-result-object v0
invoke-virtual {v0, v1}, Landroid/graphics/drawable/D-&setAlpha(I)V
## for endButton @ mEndButton
iget-object v1, p0, Lcom/android/phone/InCallTouchUi;-&mEndButton:Landroid/widget/B
invoke-virtual {v1}, Landroid/widget/B-&getBackground()Landroid/graphics/drawable/D
move-result-object v0
const/16 v1, 0x60
invoke-virtual {v0, v1}, Landroid/graphics/drawable/D-&setAlpha(I)V
## end fix.
5) 上面那个mPhoto的确不显示了,但好象还占着位置,还是很难看。
【话说,真的有必要通过汇编代码来调样式哇?GG,你直接改资源文件不好哇?】
如果我们真的要实现:
& - 有大头贴时,不显示小小的头像mPhoto
& - 没有大头贴时,显示一下“无头像”icon,或者
& - 因为头像图片不够大,所以某些时候还是显示图片到头像mPhoto中间去更好看
事实上,前面showCachedBackground()的实现代码中,还确实检查了头像图片的大小,当它长宽之一小于240px,我们就不作为全屏大头贴来显示了。所以,我们的确还是要将mPhoto处理成:有大头贴时隐藏,否则在必要时还得显示。
这个,改资源文件还真不成。还得动代码。
上面我们在showCachedBackground()中留下了一个setPersonInfoStyle()没做说明。那个方法,其实就是留给这里用的。传入参数toDefault。当toDefault为false时,就显示我们定制的大头贴界面,否则就切回原生界面(就是小头像)来显示。这个方法就与具体的Phone.apk有关了,因为每个Phone.apk的来电面板界面都不一样,显示哪些,不显示哪些,其实都要靠程序员分析着资源文件一点点来改。尽管麻烦,但效果也确实惊人。下面是我为Lezo界面写的一个setPersonInfoStyle()方法:
.method public setPersonInfoStyle(Z)V
.parameter &toDefault&
if-nez p1, :cond_0
const/high16 v0, 0x4228
## CallCard.pA == mName
iget-object v1, p0, Lcom/android/phone/CallC-&pA:Landroid/widget/TextV
invoke-virtual {v1, v0}, Landroid/widget/TextV-&setTextSize(F)V
const/high16 v0, 0x41b8
## CallCard.pC == mPhoneNumber
iget-object v1, p0, Lcom/android/phone/CallC-&pC:Landroid/widget/TextV
invoke-virtual {v1, v0}, Landroid/widget/TextV-&setTextSize(F)V
## CallCard.pB == mLocation
iget-object v1, p0, Lcom/android/phone/CallC-&pB:Landroid/widget/TextV
invoke-virtual {v1, v0}, Landroid/widget/TextV-&setTextSize(F)V
## bacground
const v0, 0x80CCCCCC
invoke-virtual {v1}, Landroid/widget/TextV-&getParent()Landroid/view/ViewP
move-result-object v1
check-cast v1, Landroid/view/ViewG
invoke-virtual {v1, v0}, Landroid/view/ViewG-&setBackgroundColor(I)V
return-void
const/high16 v0, 0x41c8
## CallCard.pA == mName
iget-object v1, p0, Lcom/android/phone/CallC-&pA:Landroid/widget/TextV
invoke-virtual {v1, v0}, Landroid/widget/TextV-&setTextSize(F)V
const/high16 v0, 0x4190
## CallCard.pC == mPhoneNumber
iget-object v1, p0, Lcom/android/phone/CallC-&pC:Landroid/widget/TextV
invoke-virtual {v1, v0}, Landroid/widget/TextV-&setTextSize(F)V
## CallCard.pB == mLocation
iget-object v1, p0, Lcom/android/phone/CallC-&pB:Landroid/widget/TextV
invoke-virtual {v1, v0}, Landroid/widget/TextV-&setTextSize(F)V
## bacground
const v0, 0x0
invoke-virtual {v1}, Landroid/widget/TextV-&getParent()Landroid/view/ViewP
move-result-object v1
check-cast v1, Landroid/view/ViewG
invoke-virtual {v1, v0}, Landroid/view/ViewG-&setBackgroundResource(I)V
goto :goto_0
.end method
这个setPersonInfoStyle()函数会在showCachedBackground()中调用并传入false值,另外也应该在InCallScreen.smali的delayedCleanupAfterDisconnect()方法中调用。后一种情况应传入true值,以使得“下一次”来电面板将以缺省形式打开。
6) 全屏!!要真的全屏!!!
其实大多数拨号面板是并不支持“全屏”的,它通常会留下状态栏。既然我们这里说的是“全屏来电大头贴”,那么就加上下面这段代码好了:
#---------
# 使拔号面板全屏
- in InCallScreen.smali
- 修改代码必须位于InCallS-&setContentView()调用之前!!!
#---------
.method protected onCreate(Landroid/os/B)V
## fixed by aimingoo.
invoke-virtual {p0}, Lcom/android/phone/InCallS-&getWindow()Landroid/view/W
move-result-object v2
const/16 v1, 0x400
invoke-virtual {v2, v1, v1}, Landroid/view/W-&setFlags(II)V
## fix end.
const v1, 0x7f030012
invoke-virtual {p0, v1}, Lcom/android/phone/InCallS-&setContentView(I)V
7) 好象你忘了说HD Contact Photos怎么改了!
嗯嗯。是的是的,不好意思。补过。
其实很简单。反编译它,然后找到
smali\com\jgarrison\hdcontacts\NewEntry.smali
这个文件。将下面的代码注释掉,就可以了:
##---------
## 注释掉下面的代码,使打开图片选取时显示一个“自由的”截图框
.line xxx这样的代码可能与具体的反编译有关,不必在意。
##---------
const-string v12, &outputX&
const/16 v13, 0x100
invoke-virtual {v8, v12, v13}, Landroid/content/I-&putExtra(Ljava/lang/SI)Landroid/content/I
const-string v12, &outputY&
const/16 v13, 0x100
invoke-virtual {v8, v12, v13}, Landroid/content/I-&putExtra(Ljava/lang/SI)Landroid/content/I
const-string v12, &aspectX&
const/4 v13, 0x1
invoke-virtual {v8, v12, v13}, Landroid/content/I-&putExtra(Ljava/lang/SI)Landroid/content/I
const-string v12, &aspectY&
const/4 v13, 0x1
invoke-virtual {v8, v12, v13}, Landroid/content/I-&putExtra(Ljava/lang/SI)Landroid/content/I
然后重编译它,这样在用它设置大头贴时,我们可以自由选取图片大小。当然,为了得到“正好是一个全屏大小”的大头贴,我们也可以借助一下工具。这里强烈推荐“快图浏览”,它在截取时可以按大小(像素数)和长宽比来设置截取框。如果你按大小来设置,比如480x800的屏幕大小,那么无论你截选图片多大,最终都会等比缩放到这个大小——相当好用!
n) 其它之其它
!强调!!!
1:永远记住:插入代码的时候,要确认你在使用着合适的寄存器!
2:不同的Phone.apk是不一样的,上面的代码主要基于CyanogenMod及其衍生版的ROM,大致在它们之间都是可以通用的。但要注意细节上的差异,尤其(再次强调)寄存器在反汇编代码中是可能不同的!
3:非常多的ROM衍生自CyanogenMod,包括Lewa、Lezo、DianxinOS、Mokee、Shendu、Norma、Joyos,以及部分Miui的定制版。
4:不同版本ROM中的Phone.apk,多数都是不能换在其它ROM中用的。主要的原因之一,是Phone.apk依赖framework-res.apk中的资源来实现了锁屏状态下的接听面板(TouchUi),而不用ROM的framework-res差异较大。另外,也可能是它们用到的TelephonyProvider.apk版本不一致,试试换个看,试试手气呵。
5:一定要用platform.*的两个key来签名Phone.apk,它要求必须是这个权限的签名。
6:没必要去尝试改原厂的Phone.apk,例如sesen原生界面的。因为你拿不到他们私有的platform keys。于是你签不了名,于是你改了也放不到原生ROM中去。用到别的ROM?你忘了,framework-res还不一样呢。
7:写程序嘛,不过是汇编嘛,不怕不怕啦!
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1161802次
积分:13630
积分:13630
排名:第311名
原创:194篇
评论:1572条
(1)(1)(1)(6)(3)(5)(1)(1)(3)(1)(1)(2)(4)(4)(1)(1)(2)(5)(1)(1)(4)(1)(1)(3)(5)(1)(2)(10)(5)(1)(2)(7)(9)(2)(2)(2)(5)(1)(2)(3)(3)(2)(1)(2)(6)(5)(6)(1)(2)(2)(2)(4)(1)(4)(7)(5)(13)(11)(4)vivoy20t手机通讯录怎样设置来电照片_百度知道
vivoy20t手机通讯录怎样设置来电照片
③号码不能同时保存在手机和sim卡上,导入方法,如果您的号码是保存在手机卡上的话,建议您删除,选择手机上的号码打开,如果sim卡上也有同样的号码的话,然后再点击联系人的头像就可以从图库中选择照片或者直接拍照设置头像,您需要先将号码导入到手机中才可以,祝您生活愉快。 ②导入完后;导出-从SIM卡导入即可:进入联系人-左键菜单-导入&#47,点击右上角的编辑您好!①首先号码是保存在手机上的才可以设置头像。非常感谢您对我们vivo的支持。如果有任何问题可以随时来咨询我们的
已回答225008
响应时间&9小时
其他类似问题
按默认排序
其他1条回答
你说的是来电大头贴吗
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁来电大头贴可以全屏吗_百度知道
来电大头贴可以全屏吗
提问者采纳
可用于设置短信大头贴; 支持显示呼叫者号码支持来电/ 支持来电/ 可设置来电视频大头贴; 支持显示呼叫者姓名;去电大头贴;低分辨率大头贴显示;去电视频; 支持高&#47
其他类似问题
7人觉得有用
来电大头贴的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁怎么把手机电话簿里的来电大头贴复制到储存卡_百度知道
怎么把手机电话簿里的来电大头贴复制到储存卡
储存卡的原图已删除
手机是诺基亚的2690,那X-PORE是什么能用上吗
提问者采纳
*。如果有就用搜索.php应该能找出来,电话簿里的来电大头贴缓存在某个地方吧有用X-pore吗.jpg或*
其他类似问题
来电大头贴的相关知识
其他3条回答
先解锁后复制。
我是开发的 怎么把手
直接点连系人,操作,图像操作,图像选项,选择储存图像就行了,但图片会小很多,没原图好了。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁三星I9300没有自动开关机和来电大头贴功能吗?_百度知道
建议您可以下载支持apk格式的第三方软件操作:将联系人存储至话机--打开某一个联系人--点击菜单-编辑-选择图片即可,
非常抱歉;来电大头贴设置方法,该手机不支持定时开关机功能您好。
感谢支持三星产品
非常感谢对之前问题的回答!还有个问题要请教:想下一些东西在手机里,为什么手机用电脑连接数据线在电脑上什么也看不见,只有一个图标,而进去后什么也看不见!以下为图标的图片!以前照的相片和录像怎么找不到了,没有删除过,貌似第一天照的,第二天就找不到了!什么原因?
您好,如果该手机连接电脑拷贝多媒体文件时,建议您登录三星官网下载samsung kies驱动后再进行连接。下载地址:
已回答630151
响应时间&44小时
其他类似问题
按默认排序
其他2条回答
貌似是闹钟前三分钟自动开机,视频放进去有时候就是自动删除了,也不知道为什么,然后在闹钟那里设置一下闹钟前开机的。那你要设置闹钟我的手机也是这款
我想现在你应该会用了吧,不过这个答案可以给后面刚买的朋友解答一下,可以从电脑下个,91助手或者豌豆荚,不过我现在一直在用360手机助手,只要下载任意一款,可以从里面下载任意软件用,还有什么不懂我们可以讨论一下,我也是这款手机
您可能关注的推广回答者:
三星i9300的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 视频来电大头贴汉化 的文章

 

随机推荐