Android通过应用来设置系统时间
来源:互联网 发布:mac中我的所有文件 编辑:程序博客网 时间:2024/05/16 06:38
原文地址
最近项目要求在App中添加设置时间的功能,谷歌百度一番,找到了一个可行方案,再此记录,以便使用
注意:
本次测试在4.1, 4.2 原生均可用, 需root权限
public class SystemDateTime { static final String TAG = "SystemDateTime"; public static void setDateTime(int year, int month, int day, int hour, int minute) throws IOException, InterruptedException { requestPermission(); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, day); c.set(Calendar.HOUR_OF_DAY, hour); c.set(Calendar.MINUTE, minute); long when = c.getTimeInMillis(); if (when / 1000 < Integer.MAX_VALUE) { SystemClock.setCurrentTimeMillis(when); } long now = Calendar.getInstance().getTimeInMillis(); //Log.d(TAG, "set tm="+when + ", now tm="+now); if (now - when > 1000) throw new IOException("failed to set Date."); } public static void setDate(int year, int month, int day) throws IOException, InterruptedException { requestPermission(); 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); } long now = Calendar.getInstance().getTimeInMillis(); //Log.d(TAG, "set tm="+when + ", now tm="+now); if (now - when > 1000) throw new IOException("failed to set Date."); } public static void setTime(int hour, int minute) throws IOException, InterruptedException { requestPermission(); Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, hour); c.set(Calendar.MINUTE, minute); long when = c.getTimeInMillis(); if (when / 1000 < Integer.MAX_VALUE) { SystemClock.setCurrentTimeMillis(when); } long now = Calendar.getInstance().getTimeInMillis(); //Log.d(TAG, "set tm="+when + ", now tm="+now); if (now - when > 1000) throw new IOException("failed to set Time."); } static void requestPermission() throws InterruptedException, IOException { createSuProcess("chmod 666 /dev/alarm").waitFor(); } static Process createSuProcess() throws IOException { File rootUser = new File("/system/xbin/ru"); if (rootUser.exists()) { return Runtime.getRuntime().exec(rootUser.getAbsolutePath()); } else { return Runtime.getRuntime().exec("su"); } } static Process createSuProcess(String cmd) throws IOException { DataOutputStream os = null; Process process = createSuProcess(); try { os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit $?\n"); } finally { if (os != null) { try { os.close(); } catch (IOException e) { } } } return process; } }
0 0
- Android通过应用来设置系统时间
- Android 通过应用设置系统日期和时间的方法
- Android 通过应用设置系统日期和时间的方法
- Android 通过应用设置系统日期和时间的方法
- Android 通过应用设置系统日期和时间的方法
- 通过Android应用更改系统时间
- Android中通过反射来设置Toast的显示时间
- Android中通过反射来设置Toast的显示时间
- Android 系统时间设置
- Android 设置系统时间
- android设置系统时间
- android设置系统时间
- 设置android系统时间
- Linux下通过命令设置系统时间
- android应用内获取系统权限,来设置一些系统开关
- android通过 哪些变量 来决定 哪些应用 会被编译进系统
- Android设置系统默认时间
- android 设置系统的时间
- JDK1.8新特性
- 使用切片(Slicing)准备按钮模板
- Android 编码规范
- android真机测试时候的遇到问题
- 201 laravel 未解之谜
- Android通过应用来设置系统时间
- Java对象的序列化和反序列化
- 说说还在stage3的async/await
- Android6.0 显示系统(五) SurfaceFlinger服务
- window 应用程序的组成及编程步骤
- linux 修改密码 (三)救援模式
- FragmentActivity + ViewPager + Fragment + FragmentPagerAdapter 数据及时更新
- 138. Copy List with Random Pointer
- 铁饭碗的由来