欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Android-獲取定位

柚子快報邀請碼778899分享:Android-獲取定位

http://yzkb.51969.com/

在Android應(yīng)用開發(fā)中往往要獲取手機定位功能,我是一名Android開發(fā)初學(xué)者,本篇主要記錄了我學(xué)習(xí)如何獲取定位的學(xué)習(xí)筆記,希望可以給大家以幫助。

本篇參考

首先我也是先查找了相關(guān)的帖子,這是我主要參考的一篇,他是直接在Activity中進(jìn)行了

如何獲取定位權(quán)限和手機定位服務(wù)。因為我是為了要做天氣預(yù)報項目獲取當(dāng)前位置信息,所以全放在Activity中比較臃腫,就采用了Service獲取服務(wù)。

ok話不多說上步驟、上代碼

步驟:

創(chuàng)建服務(wù)->在Activity中獲取定位所需權(quán)限->啟動服務(wù)->服務(wù)運行->得經(jīng)緯度

獲取定位AndroidManifest.xml常需要這兩個權(quán)限:

1、創(chuàng)建LocationService

?首先聲明一個位置管理器(獲取定位),和一個定位提供方(如:GPS/網(wǎng)路)。

private LocationManager locationManager;//位置管理器

private String locationProvider = null;//GPS定位值就是"gps"

?先寫功能其它先不管(初學(xué)很復(fù)雜一步一步來):

?1.1、獲取定位getLocation()

先解釋一下權(quán)限的判斷:

通常用ContextCompat 和ActivityCompat 的checkSelfPermission(Context context, int? permission)來獲取permission的授予狀態(tài),返回值是int,如果結(jié)果和PackageManager.PERMISSION_GRANTED(一個常量權(quán)限被授予的意思)相等就代表該permission已經(jīng)獲取了。

locationManager.requestLocationUpdates(String provider , long minTime , float minDistance , LocationListener listener?)參數(shù):

provide:定位提供者(gps,數(shù)據(jù)或wifi,passive)

minTime(ms):多久更新一次位置

minDistance(m):移動多遠(yuǎn)(位移)更新一次位置

listener:很明顯監(jiān)聽用的,minTime和minDistance都需要監(jiān)聽,并且兩者是”|“關(guān)系。

獲取天氣信息沒必要頻繁地獲取定位,如果在minTime之內(nèi)再次獲取定位,那么就取上次獲取地位置就可以了。

private void getLocation() {

//粗略定位權(quán)限是否獲取

boolean FINE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;

//精確定位權(quán)限是否獲取

boolean COARSE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;

if (FINE_LOCATION && COARSE_LOCATION) {

//獲取上次請求到的位置

Location location = locationManager.getLastKnownLocation(locationProvider);

if (location == null) {//第一次請求、沒有上一次

locationManager.requestLocationUpdates(locationProvider, 30000, 500, locationListener);

} else {

double Longitude = location.getLongitude();

double Latitude = location.getLatitude();

ToastUtil.show(this, Longitude + " " + Latitude);

Log.v("wang", "獲取上次的位置-經(jīng)緯度:" + Longitude + "," + Latitude);

}

} else ToastUtil.show(this, "未獲取定位權(quán)限");

}

getLocation()需要兩個值:locationProvider和locationListener。?

1.2、獲取定位提供者。

?獲取位置提供者:

private void getLocationProvider() {

List providers = locationManager.getProviders(true);

Log.v("wang", "位置提供者包含:" + providers.toString());

if (providers.contains(LocationManager.GPS_PROVIDER)) {

//如果是GPS

locationProvider = LocationManager.GPS_PROVIDER;

Log.v("wang", "定位方式:" + locationProvider);

} else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {

//如果是Network

locationProvider = LocationManager.NETWORK_PROVIDER;

Log.v("wang", "定位方式:" + locationProvider);

} else {

ToastUtil.show(this, "沒有可用的定位提供者");

}

}

1.3、創(chuàng)建位置監(jiān)聽:

private LocationListener locationListener = new LocationListener() {

@Override

public void onLocationChanged(@NonNull Location location) {

double Longitude = location.getLongitude();

double Latitude = location.getLatitude();

//如果位置發(fā)生變化,重新顯示地理位置經(jīng)緯度

Log.v("wang", "監(jiān)視地理位置變化-經(jīng)緯度:" + Longitude + "," + Latitude);

}

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

LocationListener.super.onStatusChanged(provider, status, extras);

}

@Override

public void onProviderEnabled(@NonNull String provider) {

LocationListener.super.onProviderEnabled(provider);

}

@Override

public void onProviderDisabled(@NonNull String provider) {

LocationListener.super.onProviderDisabled(provider);

}

};

這樣我們的功能部分就完成了。

2、在Activity中給定位權(quán)限授權(quán)和檢查授權(quán)

2.1、檢查授權(quán)

//檢查定位權(quán)限是否已獲取

private boolean checkLocationPermission() {

//粗略定位權(quán)限是否獲取

boolean FINE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;

//精確定位權(quán)限是否獲取

boolean COARSE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;

return FINE_LOCATION && COARSE_LOCATION;//是否都已獲取

}

2.2、請求授權(quán)

//請求定位權(quán)限

private void requestLocationPermission() {

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE);

}

??其中地LOCATION_CODE(這里自定義為20)是用來標(biāo)記這次權(quán)限請求的,在處理請求結(jié)果中以此辨別是是哪個請求

2.3、處理授響應(yīng)

//重寫權(quán)限請求的回調(diào)方法

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

//定位權(quán)限請求

switch (requestCode) {

case LOCATION_CODE://定位權(quán)限請求

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

ToastUtil.show(this, "定位權(quán)限已獲取");

startLocationService();

} else {

ToastUtil.show(this, "定位權(quán)限獲取失敗");

}

break;

}

}

private void startLocationService(){

Intent intent = new Intent(this, LocationService.class);

startService(intent);

}

3、在合適地地方啟動service:

if (checkLocationPermission()){

Log.v("wang","已獲取權(quán)限");

startLocationService();

}

else

requestLocationPermission();

歐克、權(quán)限請求和服務(wù)啟動也做好了,但是還沒結(jié)束

4、啟動服務(wù)時執(zhí)行任務(wù)

現(xiàn)在還不能得到結(jié)果:我們用startService(intent)啟動了服務(wù),還沒要讓服務(wù)做什么。

4.1我們需要重寫服務(wù)地onStartCommand()方法,在啟動服務(wù)時執(zhí)行任務(wù)。

//重寫服務(wù)的啟動時回調(diào)方法

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

//1.獲取位置管理器

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

//2.獲取定位提供者GPS/網(wǎng)絡(luò)

getLocationProvider();

//3.獲取位置(經(jīng)緯度)

//粗略定位權(quán)限是否獲取

boolean FINE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;

//精確定位權(quán)限是否獲取

boolean COARSE_LOCATION = ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) ==PackageManager.PERMISSION_GRANTED;

Log.v("wang","粗略定位:"+FINE_LOCATION +"精確定位:"+ COARSE_LOCATION);

if(FINE_LOCATION && COARSE_LOCATION){

getLocation();

}else {

ToastUtil.show(this,"未獲取定位權(quán)限");

stopSelf();

}

return START_STICKY;

}

4.2再重寫服務(wù)的onDestroy()方法,在停止服務(wù)時進(jìn)行銷毀,并移除位置監(jiān)聽

@Override

public void onDestroy() {

super.onDestroy();

locationManager.removeUpdates(locationListener);

}

private void destroyLocationService(){

Intent intent = new Intent(this, LocationService.class);

stopService(intent);

}

?這樣我們就可以在Activity中合適的地方啟動和銷毀該服務(wù)了

運行結(jié)果:

這里沒有獲取地理位置,想知道怎么獲取的可以看地上方的參考篇。

呼~放松一下

柚子快報邀請碼778899分享:Android-獲取定位

http://yzkb.51969.com/

精彩文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19248937.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄