最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android獲取所在時區(qū)時間的兩種方式

 更新時間:2024年04月12日 08:24:52   作者:走路帶風  
Android獲取所在時區(qū)正確時間的方式有兩種,通過wifi獲取時間和通過通過GPS獲取時間這兩種方式,文中通過代碼示例給大家的介紹的非常詳細,需要的朋友可以參考下

Android獲取所在時區(qū)正確時間的方式有兩種:

一:wifi獲取時間

在聯(lián)網(wǎng)且系統(tǒng)設置了自動獲取時間,自動獲取時區(qū)的系統(tǒng)設置前提下,系統(tǒng)會自動更新正確的時間,當然如果你用了TextClockDateClock也會自動更新。

二:通過GPS獲取時間。

2.1未聯(lián)網(wǎng)且GPS可用的情況下,可以通過獲取原生定位信息來獲取所在地點的時間,實現(xiàn)如下:

注意,下面的代碼時在Fragment里面實現(xiàn)的

/**  
* 用于獲取GPS時間  
*/  
private LocationManager locationManager;  
/**  
* 取消后臺定位的時間  
*/  
private final static int CANCEL_LOCATION_DELAY = 5 * 60 * 1000;  
/**  
* 避免多次取消定位和反注冊  
*/  
private boolean isHadCancelLocation = false;

/**  
* 如果網(wǎng)絡不可用,使用GPS進行刷新系統(tǒng)時間,系統(tǒng)時間更新后會自動更新TextClock和DateClock;如果有網(wǎng)絡,理論上會自動刷新系統(tǒng)時間,所以不處理。  
*/  
private void initSystemTime() {  
    if(!NetworkHelper.isNetworkAvailable(getContext())){  
        getLocationBySystem();
        // 注意,這里請用原始Handler.postDelay代替,我用的自定義延時類。
        ArchTaskExecutor.getInstance().postToMainThreadDelay(cancelLocationRunnable, CANCEL_LOCATION_DELAY);  
    }  
}

// 注意,普通app需要申請定位權(quán)限,我的是系統(tǒng)級app,所以忽略。
@SuppressLint("MissingPermission")  
private void getLocationBySystem() {  
    XLog.i("無網(wǎng)絡啟動獲取Gps定位");  
    locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);  
    // 注冊位置監(jiān)聽器  
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);  
}  

/**  
* 通過GPS獲取定位信息  
*/  
private final LocationListener locationListener = location -> {  
    if(null != location) {  
        // 就這里是關(guān)鍵獲取代碼,其實高德地圖Api能自己觸發(fā)系統(tǒng)時間的更新,不知道怎么實現(xiàn)的,只要打開他們的地圖就可以,不管是第三方的高德地圖app還是自己內(nèi)嵌的高德地圖api模塊,理論上也是location.getTime()獲取到的,不理解的是他們?yōu)槭裁从袡?quán)限更新系統(tǒng)時間。
        long gpsTime = location.getTime();  
        cancelLocationUpdates();  
        XLog.i("Gps定位獲取成功并注銷定位監(jiān)聽,GPS時間 = " + gpsTime);  
        // 用過這個進行模擬測試,resetSystemTime(1712800932000L);顯示的時間是2024-04-11 10:02:12,正確  
        resetSystemTime(gpsTime);  
    }  
};
  
private final Runnable cancelLocationRunnable = () -> {  
    XLog.i("獲取定位超時,注銷定位監(jiān)聽");  
    cancelLocationUpdates();  
};  
  
/**  
* 獲取定位時間成功取消定位  
*/  
public void cancelLocationUpdates() {  
    XLog.i("注銷定位監(jiān)聽" + isHadCancelLocation);  
    if (locationManager != null && !isHadCancelLocation) {  
        locationManager.removeUpdates(locationListener);  
        isHadCancelLocation = true;  
        locationManager = null;  
    }  
}  

/**
* 注意,我的是系統(tǒng)級app,所以忽略動態(tài)申請權(quán)限,普通應用無法設置系統(tǒng)時間但是可以參考取值。
* 系統(tǒng)級app配置 <uses-permission android:name="android.permission.SET_TIME"/> 權(quán)限即可
**/
@SuppressLint("MissingPermission")  
private void resetSystemTime(Long utcTimeMillis) {  
    try {  
        // 將UTC時間轉(zhuǎn)換為Date對象  
        Date locationTime = new Date(utcTimeMillis);  
        long localTimeMillis = locationTime.getTime();  

        // 獲取AlarmManager實例  
        AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);  
        // 設置系統(tǒng)時間(本地時間)  
        if (alarmManager != null) {  
            alarmManager.setTime(localTimeMillis);  
            XLog.i("重置系統(tǒng)時間成功" + localTimeMillis);  
        }  
     } catch (Exception e){  
        XLog.e("重置系統(tǒng)時間失敗");  
    }  
}

2.2 如果你接入了高德地圖SDK,也可以使用如下api去獲取當前地點的時間:

/**  
* 這里目前獲取到GPS返回的正確的時間  
* @throws Exception  
*/  
@SuppressLint("MissingPermission")  
public void getLocationByAMap() throws Exception {  
    // 高德地圖的api  
    mlocationClient = new AMapLocationClient(getContext());  
    //初始化定位參數(shù)  
    mLocationOption = new AMapLocationClientOption();  
    //設置定位監(jiān)聽  
    mlocationClient.setLocationListener(new AMapLocationListener() {  
    @Override  
    public void onLocationChanged(AMapLocation aMapLocation) {  
        if (aMapLocation != null) {  
            if (aMapLocation.getErrorCode() == 0) {  
                //定位成功回調(diào)信息,設置相關(guān)消息  
                aMapLocation.getLocationType();//獲取當前定位結(jié)果來源,如網(wǎng)絡定位結(jié)果,詳見定位類型表  
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                Toast.makeText(getContext(), "時間戳為:" + aMapLocation.getTime(),Toast.LENGTH_SHORT).show();  
                Date date = new Date(aMapLocation.getTime());  
                String time = df.format(date);//定位時間  


                SimpleDateFormat dateFormat = new SimpleDateFormat("MM月dd日");  
                SimpleDateFormat hourMinuteSecondFormat = new SimpleDateFormat("HH:mm aa");  

                mlocationClient.stopLocation();// 獲取成功停止定位  
                Toast.makeText(getContext(), "時間為:" + time + ";停止了定位并開始設置系統(tǒng)時間" + dateFormat + ";" + hourMinuteSecondFormat,Toast.LENGTH_SHORT).show();  

                // 需要配置 <uses-permission android:name="android.permission.SET_TIME"/>
                resetSystemTime(aMapLocation.getTime());  
            } else {  
                //顯示錯誤信息ErrCode是錯誤碼,errInfo是錯誤信息,詳見錯誤碼表。  
                Log.e("AmapError", "location Error, ErrCode:"  
                + aMapLocation.getErrorCode() + ", errInfo:"  
                + aMapLocation.getErrorInfo());  
            }  
        }  
    }});  
    //設置定位模式為高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅設備模式   mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);  
    //設置定位間隔,單位毫秒,默認為2000ms  
    mLocationOption.setInterval(1000);  
    //設置定位參數(shù)  
    mlocationClient.setLocationOption(mLocationOption);  
    // 此方法為每隔固定時間會發(fā)起一次定位請求,為了減少電量消耗或網(wǎng)絡流量消耗,  
    // 注意設置合適的定位時間的間隔(最小間隔支持為1000ms),并且在合適時間調(diào)用stopLocation()方法來取消定位請求  
    // 在定位結(jié)束后,在合適的生命周期調(diào)用onDestroy()方法  
    // 在單次定位情況下,定位無論成功與否,都無需調(diào)用stopLocation()方法移除請求,定位sdk內(nèi)部會移除  
    //啟動定位  
    mlocationClient.startLocation();  
}

三:注意,預加載 GPS 并不是解決 Android 時間顯示不準確的最佳方法。雖然 GPS 可以提供精確的時間和位置信息,但在大多數(shù)情況下,并不需要通過 GPS 來確保時間的準確性。通常,Android 設備會自動從網(wǎng)絡提供商(例如移動網(wǎng)絡或Wi-Fi連接)獲取準確的時間和時區(qū)信息。這個過程通常稱為網(wǎng)絡時間同步。因此,如果你的自定義 Launcher 在獲取時間時不準確,很可能是由于設備的網(wǎng)絡時間同步設置出現(xiàn)了問題,而不是時區(qū)設置的問題。

以上就是Android獲取所在時區(qū)時間的兩種方式的詳細內(nèi)容,更多關(guān)于Android獲取時間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • android中SQLite使用及特點

    android中SQLite使用及特點

    SQLite是一個輕量級數(shù)據(jù)庫,它設計目標是嵌入式的,而且占用資源非常低,本文重點給大家介紹android中SQLite使用及特點,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • Android中可以作為Log開關(guān)的一些操作及安全性詳解

    Android中可以作為Log開關(guān)的一些操作及安全性詳解

    Android的調(diào)試好伙伴Log在調(diào)試時非常有用,基本可以看Log而無需單點調(diào)試,尤其對實時大數(shù)據(jù)量的設備調(diào)試尤其有效,下面這篇文章就來給大家詳細介紹關(guān)于Android中可以作為Log開關(guān)的一些操作及安全性的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • Android?Studio開發(fā)實現(xiàn)簡單計算器功能

    Android?Studio開發(fā)實現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細介紹了Android?Studio開發(fā)實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 快速解決進入fragment時不能彈出軟件盤的問題

    快速解決進入fragment時不能彈出軟件盤的問題

    下面小編就為大家?guī)硪黄焖俳鉀Q進入fragment時不能彈出軟件盤的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • ScrollView嵌套ListView滑動沖突的解決方法

    ScrollView嵌套ListView滑動沖突的解決方法

    這篇文章主要介紹了ScrollView嵌套ListView滑動沖突的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android畫圖并保存圖片的具體實現(xiàn)代碼

    Android畫圖并保存圖片的具體實現(xiàn)代碼

    這篇文章介紹了在Android中畫圖并保存圖片的實例,以下是具體的實現(xiàn)方法,有需要的朋友可以參考一下
    2013-07-07
  • 如何利用Flutter實現(xiàn)酷狗流暢Tabbar效果

    如何利用Flutter實現(xiàn)酷狗流暢Tabbar效果

    這篇文章主要給大家介紹了關(guān)于如何利用Flutter實現(xiàn)酷狗流暢Tabbar效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • android 關(guān)于webview 加載h5網(wǎng)頁開啟定位的方法

    android 關(guān)于webview 加載h5網(wǎng)頁開啟定位的方法

    今天小編就為大家分享一篇android 關(guān)于webview 加載h5網(wǎng)頁開啟定位的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Android TV 焦點框移動的實現(xiàn)方法

    Android TV 焦點框移動的實現(xiàn)方法

    本篇文章主要介紹了Android TV 焦點框移動的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Android數(shù)據(jù)存儲之SQLite使用

    Android數(shù)據(jù)存儲之SQLite使用

    SQLite是D.Richard Hipp用C語言編寫的開源嵌入式數(shù)據(jù)庫引擎。它支持大多數(shù)的SQL92標準,并且可以在所有主要的操作系統(tǒng)上運行
    2016-01-01

最新評論

罗山县| 鲜城| 林西县| 潍坊市| 昆明市| 抚顺市| 遵义市| 蒙阴县| 云南省| 丽江市| 襄垣县| 庆城县| 岢岚县| 揭阳市| 会宁县| 安仁县| 金阳县| 信宜市| 民权县| 连城县| 盐边县| 清河县| 泸定县| 临清市| 海盐县| 南宫市| 西安市| 博乐市| 亚东县| 沾化县| 鹤壁市| 阿克苏市| 景泰县| 庆元县| 合阳县| 和顺县| 尚志市| 昌黎县| 扬州市| 衡山县| 晋中市|