前言
         欢迎大家我分享和推荐好用的代码段~~
声明
         欢迎转载,但请保留文章原始出处:
         CSDN:
http://www.csdn.net
         雨季o莫忧离:http://blog.csdn.net/luckkof

正文

 

    在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到"Unable to open alarm driver: Permission denied ".这个函数需要signatureOrSystem等级的permission才能使用。有两种方法可以处理,来得到系统权限。
第一个方法直接修改编译,需要在Android系统源码的环境下用make来编译:
   1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。
   2.  修改它的Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
   3.  使用mm命令来编译,生成的apk就有修改系统时间的权限了。
第二个方法使用系统签名文件来处理:
1. 同上,和系统相同的uid. Android 的系统用户id是android.uid.system , 在Manifest里面添加android:sharedUserId="android.uid.system"。
2. 相同的系统签名。包签名需要用到android提供的signapk,但很遗憾,我们的开发包里面并没有,需要您手动的从源码里面编译,在2.2的版本中,源码路径是:froyo\build\tools\signapk。
然后从源码路径froyo\build\target\product\security中取出两个系统签名文件platform.pk8 and platform.x509.pem. 
就可以对eclipse编译好的apk签名了,(注: 编译好的apk在bin目录下)。
形式是:
Java –jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk.
完成这两部后,在运行之前,您还要从模拟器上卸载掉原来的相同程序,因为签名改了,不然会报错不能安装。
对于在模拟器上进行setCurrentTimeMillis 虽然我们能够修改模拟器的时间了,这个方法的返回值仍然是false, 可能是不能真正的修改系统的时钟吧。在Log中的提示是:
08-16 08:29:24.307: WARN/SystemClock(125): Unable to set rtc to 1281918564: Invalid argument. 
这个和android模拟器里面自带的setting里面的修改时间Log提示错误是一样的。

更多相关文章

  1. 【Android】系统构架
  2. linux系统和android系统的区别
  3. 从HandlerThread 的使用来分析HandlerThread的源码
  4. 分别在Linux和Android中用C语言写系统日志
  5. Android 8.0 SystemUI 源码分析(一):图文并茂的介绍 :D

随机推荐

  1. Android之使用HttpPost提交数据到服务器(A
  2. android studio 1.0安装及遇到的问题
  3. Android Eclipse插件TabHost问题(转载)
  4. Android中Json数据解析
  5. 超过 50% 的 Android 设备依然运行 2.2
  6. WindowManagerService原理分析文章合集
  7. 定制Android之4G-LTE模块驱动
  8. RecylcerView中的子view matchParent属性
  9. gradle/gradle plugin/Android(安卓)stud
  10. android定义可以被其他程序调用的activit