2015年5月11日 星期一

Android Internet Time 取得 網路 時間

Candy Crush APP就是抓取手機的時間,所以修改手機時間能獲得能量,有些APP則不能,因為抓取的為網路時間
1.AndroidManifest.xml加入網路權限
    
    
2.下載commons-net-3.1.jar
在專案建立libs資料夾,放至libs資料夾裡面

3./res/layout/activity_main.xml


    

        
        

        
        
    

    

        
        

        
        
    

    

    


4.MainActivity.java
package tw.android;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.net.time.TimeTCPClient;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.provider.Settings;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
 private TextView tvPhoneTime, tvInternetTime;
 private Button btUpdateTime, btChangeTime;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads().detectDiskWrites().detectNetwork()
    .penaltyLog().build());
  StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
    .build());

  tvPhoneTime = (TextView) findViewById(R.id.tvPhoneTime);
  tvInternetTime = (TextView) findViewById(R.id.tvInternetTime);
  btUpdateTime = (Button) findViewById(R.id.btUpdateTime);
  btChangeTime = (Button) findViewById(R.id.btChangeTime);

  /* 更新時間 */
  btUpdateTime.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v) {
    updateTime();
   }
  });

  /* 前往修改手機時間 */
  btChangeTime.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v) {
    Intent intent = new Intent(Settings.ACTION_DATE_SETTINGS);
    startActivity(intent);
   }
  });
 }

 @SuppressLint("SimpleDateFormat")
 private void updateTime() {
  /* 手機時間 */
  SimpleDateFormat sTime = new SimpleDateFormat("HH:mm:ss");
  String time = sTime.format(new java.util.Date()); // 現在時間
  tvPhoneTime.setText(time);

  /* 網路時間 */
  try {
   TimeTCPClient client = new TimeTCPClient();
   try {
    client.setDefaultTimeout(60000); // 設定最長等待時間為60秒
    /* 可以前往 http://tf.nist.gov/tf-cgi/servers.cgi 選擇可用的連結點 */
    client.connect("time-nw.nist.gov"); // 取得網路時間
    String iT = sTime.format(client.getDate());// 格式處理

    tvInternetTime.setText(iT);
   } finally {
    client.disconnect(); // 關掉連結
   }
  } catch (IOException e) {
   e.printStackTrace();
  }

 }

}

檔案下載:
 https://github.com/terryyamg/InternetTimeTest
參考連結:
http://stackoverflow.com/questions/13064750/how-to-get-current-time-from-internet-in-android
http://tf.nist.gov/tf-cgi/servers.cgi
http://grepcode.com/snapshot/repo1.maven.org/maven2/commons-net/commons-net/3.1

沒有留言 :

張貼留言