如何使Android应用程序获取系统权限 来修改系统时间
昨天搞了setCurrentTimeMillis不能修改时间的问题。不甘心今天上午又搞上了。
主要原因是因为SystemClock的setCurrentTimeMillis的permission是signatureOrSystem等级的,直接使用user-permission没有作用。需要做两方面的事情:
一方面是相同的uid.Android的系统用户id是android.uid.system,在Manifest里面添加android:sharedUserid="android.uid.system"。
二方面是相同的包签名。包签名需要用到android提供的signapk,但很遗憾,我们的开发包里面并没有,需要您手动的从源码里面编译,在2.2的版本中,源码路径是:froyo\build\tools\signapk。
在附件中我已经编译好了。然后从源码路径froyo\build\target\product\security中取出两个系统签名文件platform.pk8andplatform.x509.pem.
就可以对eclipse编译好的apk签名了,(注:编译好的apk在bin目录下)。形式是:
Java–jarsignapk.jarplatform.x509.pemplatform.pk8input.apkoutput.apk.
完成这两部后,在运行之前,您还要从模拟器上卸载掉原来的相同程序,因为签名改了,不然会报错不能安装。
安装完后您就可以使用了。
对于在模拟器上进行setCurrentTimeMillis虽然我们能够修改模拟器的时间了,这个方法的返回值仍然是false,可能是不能真正的修改系统的时钟吧。在Log中的提示是:
08-1608:29:24.307:WARN/SystemClock(125):Unabletosetrtcto1281918564:Invalidargument.
这个和android模拟器里面自带的setting里面的修改时间Log提示错误是一样的。