Android 通过应用设置系统日期和时间的方法

Android 通过应用设置系统日期和时间的方法
android 2.3
android 4.0
测试可行,不过需要ROOT权限.。

然后就不需要任何permission了;

参考来自:http://www.2cto.com/kf/201405/303580.html

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();
		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();
		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();
		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;
	}
}

测试程序:

public class MainActivity extends Activity {

	private TextView textView1;
	private Calendar cal = Calendar.getInstance();
	int year = cal.get(Calendar.YEAR);
	int month = cal.get(Calendar.MONTH);
	int day= cal.get(Calendar.DAY_OF_MONTH);
	int hour= cal.get(Calendar.HOUR_OF_DAY);
	int minute= cal.get(Calendar.MINUTE);
	StringBuffer buffer = new StringBuffer();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView1 = (TextView) findViewById(R.id.textView1);
		textView1.setText(getTime());
		findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				textView1.setText(getTime());
				year = 2014;
				month = 10;
				day = 6;
				hour = 15;
				minute = 23;
				try {
					SystemDateTime.setDateTime(year, month, day, hour, minute);
				} catch (Exception e) {
					textView1.setText(e.toString());
					e.printStackTrace();
				}
				textView1.setText(getTime());
			}
		});
	}
	
	private String getTime(){
		buffer = new StringBuffer();
		buffer.append(year+"-");
		buffer.append(month+"-");
		buffer.append(day+"\t");
		buffer.append(hour+":");
		buffer.append(minute);
		return buffer.toString();
	}
}

再次测试,完全没有问题;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值