一、獲取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