欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一:wifi獲取時間

在聯(lián)網(wǎng)且系統(tǒng)設(shè)置了自動獲取時間自動獲取時區(qū)的系統(tǒng)設(shè)置前提下,系統(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)絡(luò)不可用,使用GPS進行刷新系統(tǒng)時間,系統(tǒng)時間更新后會自動更新TextClock和DateClock;如果有網(wǎng)絡(luò),理論上會自動刷新系統(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)絡(luò)啟動獲取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)限,普通應(yīng)用無法設(shè)置系統(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);  
        // 設(shè)置系統(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();  
    //設(shè)置定位監(jiān)聽  
    mlocationClient.setLocationListener(new AMapLocationListener() {  
    @Override  
    public void onLocationChanged(AMapLocation aMapLocation) {  
        if (aMapLocation != null) {  
            if (aMapLocation.getErrorCode() == 0) {  
                //定位成功回調(diào)信息,設(shè)置相關(guān)消息  
                aMapLocation.getLocationType();//獲取當前定位結(jié)果來源,如網(wǎng)絡(luò)定位結(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 + ";停止了定位并開始設(shè)置系統(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());  
            }  
        }  
    }});  
    //設(shè)置定位模式為高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅設(shè)備模式   mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);  
    //設(shè)置定位間隔,單位毫秒,默認為2000ms  
    mLocationOption.setInterval(1000);  
    //設(shè)置定位參數(shù)  
    mlocationClient.setLocationOption(mLocationOption);  
    // 此方法為每隔固定時間會發(fā)起一次定位請求,為了減少電量消耗或網(wǎng)絡(luò)流量消耗,  
    // 注意設(shè)置合適的定位時間的間隔(最小間隔支持為1000ms),并且在合適時間調(diào)用stopLocation()方法來取消定位請求  
    // 在定位結(jié)束后,在合適的生命周期調(diào)用onDestroy()方法  
    // 在單次定位情況下,定位無論成功與否,都無需調(diào)用stopLocation()方法移除請求,定位sdk內(nèi)部會移除  
    //啟動定位  
    mlocationClient.startLocation();  
}

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

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

相關(guān)文章

  • Android自定義View實現(xiàn)進度條動畫

    Android自定義View實現(xiàn)進度條動畫

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)進度條動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 淺析Android中常見三種彈框在項目中的應(yīng)用

    淺析Android中常見三種彈框在項目中的應(yīng)用

    這篇文章主要介紹了淺析Android中常見三種彈框在項目中的應(yīng)用,需要的朋友可以參考下
    2017-03-03
  • Android自定義ListView單擊事件失效的解決方法

    Android自定義ListView單擊事件失效的解決方法

    這篇文章主要為大家詳細介紹了Android自定義ListView單擊事件失效的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android 中Handler引起的內(nèi)存泄露

    Android 中Handler引起的內(nèi)存泄露

    本文主要介紹Android中Handler引起的內(nèi)存泄露,在實際開發(fā)中經(jīng)常會遇到使用Handler來寫異步操作的功能,如果引起內(nèi)存泄漏,看看怎么解決
    2016-08-08
  • Android自定義豎排TextView實現(xiàn)實例

    Android自定義豎排TextView實現(xiàn)實例

    這篇文章主要介紹了Android自定義豎排TextView實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android中Hilt的使用詳解

    Android中Hilt的使用詳解

    Hilt?是?Android?的依賴項注入庫,可減少在項目中執(zhí)行手動依賴項注入的樣板代碼,本文就來為大家介紹一下Hilt的具體使用吧,希望對大家有所幫助
    2023-06-06
  • android SectorMenuView底部導(dǎo)航扇形菜單的實現(xiàn)代碼

    android SectorMenuView底部導(dǎo)航扇形菜單的實現(xiàn)代碼

    這篇文章主要介紹了android SectorMenuView底部導(dǎo)航扇形菜單的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Android 無障礙全局懸浮窗實現(xiàn)示例

    Android 無障礙全局懸浮窗實現(xiàn)示例

    本文主要介紹了Android 無障礙全局懸浮窗實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • android PopupWindow 和 Activity彈出窗口實現(xiàn)方式

    android PopupWindow 和 Activity彈出窗口實現(xiàn)方式

    本人小菜一個。目前只見過兩種彈出框的實現(xiàn)方式,第一種是最常見的PopupWindow,第二種也就是Activity的方式是前幾天才見識過,需要的朋友可以參考下
    2012-11-11
  • Android framework ATMS啟動流程

    Android framework ATMS啟動流程

    這篇文章主要為大家介紹了Android framework ATMS啟動流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論