一、獲取GPS信息
Android提供了LocationManager類來獲取GPS信息,首先需要檢查是否存在GPS模塊,並且需要為程序添加獲取GPS信息的許可權。
1、檢查是否存在GPS模塊
boolean hasGps = context.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
if (!hasGps) {
// 沒有GPS模塊
}
2、添加許可權
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
二、位置更新
使用LocationManager的requestLocationUpdates方法獲取GPS信息,並且設置更新時間和距離。
1、啟動位置更新
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, locationListener);
2、停止位置更新
locationManager.removeUpdates(locationListener);
三、位置監聽
添加LocationListener監聽GPS信息的變化,並在回調方法中處理相關邏輯。
1、添加監聽器
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// 處理定位變化邏輯
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
2、獲取位置信息
Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
四、完整代碼示例
public class MainActivity extends AppCompatActivity implements LocationListener {
private static final int MIN_TIME = 1000;
private static final int MIN_DISTANCE = 10;
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, this);
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
1);
}
}
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, this);
}
}
}
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// 處理定位變化邏輯
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
原創文章,作者:HIVAR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333028.html
微信掃一掃
支付寶掃一掃