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();
}
}
再次测试,完全没有问题;