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
原创粉丝点击