昨天写应用,涉及到需要修改系统时间等操作,查了一下Android 的设置源码,里面的一个方法如下:

Java代码

  1. public void onDateSet(DatePicker view, int year, int month, int day) {
  2. Calendar c = Calendar.getInstance();
  3. c.set(Calendar.YEAR, year);
  4. c.set(Calendar.MONTH, month);
  5. c.set(Calendar.DAY_OF_MONTH, day);
  6. long when = c.getTimeInMillis();
  7. if (when / 1000 < Integer.MAX_VALUE) {
  8. SystemClock.setCurrentTimeMillis(when);
  9. }
  10. updateTimeAndDateDisplay();
  11. }
public void onDateSet(DatePicker view, int year, int month, int day) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); c.set(Calendar.DAY_OF_MONTH, day); long when = c.getTimeInMillis(); if (when / 1000 < Integer.MAX_VALUE) { SystemClock.setCurrentTimeMillis(when); } updateTimeAndDateDisplay(); }

从上面的 Android 应用程序源码可以看出,修改系统日期需要为Calendar 设置年月日,然后通过调用 SystemClock.setCurrentTimeMillis 方法,设置系统日期,既然源码是这样写的,那我们也依样画葫芦来学一下吧,下面是通过使用datePicker修改日期的代码:

Java代码

  1. canlendar = Calendar.getInstance();
  2. year = datePicker.getYear();
  3. month = datePicker.getMonth();
  4. day = datePicker.getDayOfMonth();
  5. canlendar.set(Calendar.YEAR, year);
  6. canlendar.set(Calendar.MONTH, month);
  7. canlendar.set(Calendar.DAY_OF_MONTH, day);
  8. long when = canlendar.getTimeInMillis();
  9. if (when / 1000 < Integer.MAX_VALUE) {
  10. SystemClock.setCurrentTimeMillis(when);
  11. tv_date.setText(canlendar.get(Calendar.YEAR) + "/"
  12. + ((canlendar.get(Calendar.MONTH) + 1)) + "/"
  13. + canlendar.get(Calendar.DAY_OF_MONTH));
  14. }
canlendar = Calendar.getInstance(); year = datePicker.getYear(); month = datePicker.getMonth(); day = datePicker.getDayOfMonth(); canlendar.set(Calendar.YEAR, year); canlendar.set(Calendar.MONTH, month); canlendar.set(Calendar.DAY_OF_MONTH, day); long when = canlendar.getTimeInMillis(); if (when / 1000 < Integer.MAX_VALUE) { SystemClock.setCurrentTimeMillis(when); tv_date.setText(canlendar.get(Calendar.YEAR) + "/" + ((canlendar.get(Calendar.MONTH) + 1)) + "/" + canlendar.get(Calendar.DAY_OF_MONTH)); }

Tip:每次需要使用Calendar 必须获得一次实例,否则会它会使用上一次获取实例的日期格式,修改的时候可能会有点小问题

可是,照着上面的代码敲了之后,运行却出现如下的警告:

网上查了一下,说SystemClock.setCurrentTimeMillis 这个函数需要root 权限或者运行在系统进程中才可以用,通过参考了这一篇文章我得到了解决办法:http://dev.10086.cn/blog/?uid-49302-action-viewspace-itemid-907 ,不过这篇文章的第二个办法说得有点不是很清楚,这里我重新为大家详细说一下

先进入 Android 源码目录 F:\android_source\build\target\product\security ,具体机器目录自己选择。找到 【platform.pk8】和【platform.x509.pem】这两个文件,这里为了方便将它们复制到根目录,如:F:\sign 文件夹内,本来下一步就是需要打包jar 包了,不过里我们在android系统的源码内找到 out 编绎目录下

signApk.jar 这个包,可以自行打jar 包或者下载我这个jar 包都是可以的,下载地址:signapk 请自行将后缀名改为.jar 格式,把此jar 包放于F:\sign 文件内,打开dos 操作界面,定们到F:\sign,如下:

,接着输入如下命令:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk ,在dos 命令名如下图:

,其中set.apk 是指我们要签名的原始文件apk,后面setnew.apk 是指我们签名后输出的apk文件的名称

Tip:在签名的时候必须将set.apk事先用rar 文件打开,进入META-INF目录下,将CERT.SF和CERT.RSA这两个文件删除掉,再执行如上操作。到了这一步,程序己经可以正常安装了。

如果提示 FaiLure [INSTALL_FAILED_ALREADY_EXISTS],请使用如下命令,将应用程序移除:

,uninstall 后面字符是指应用程序所在的包名,再运行adb install [package name] 就可以安装成功。

Tip:不要忘了在你的manifest文件下注册android:sharedUserId="android.uid.system" 。

如果你照着如上的步骤一步一步写的话,保证可以成功修改系统的时间或者日期等操作。

更多相关文章

  1. Android下pm 命令详解
  2. 短视频app开源源码android 给图片加文字、图片水印
  3. Android下的应用编程——用HTTP协议实现文件上传功能
  4. Android(安卓)代码实现logcat输出到文件
  5. android Immutable bitmap passed to Canvas constructor异常
  6. 模拟器无法启动,卡在android字样的界面上
  7. android开发环境之ADT安装,卸载,更新
  8. android 文件上传
  9. NPM 和webpack 的基础使用

随机推荐

  1. 个人信息表的网页
  2. 实例演示选择器的优先级,id,class,tag
  3. PHP开源项目网址大全
  4. Flex术语 属性总结
  5. 2021年全自动最新引流神器大数据获客系统
  6. Ajax的get,post请求
  7. 轮播图和懒加载
  8. jQuery常用方法
  9. $.get,$.post,$ajax与Vue基本术语
  10. Vue常用指令及方法