import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Criteria; import android.location.GpsSatellite; import android.location.GpsStatus; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.os.Bundle; import android.provider.Settings; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.util.Log; import android.widget.EditText; import android.widget.Toast; import java.util.Iterator; public class MainActivity extends Activity { private EditText editText; private LocationManager lm; private static final String TAG = "GpsActivity"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.editText); lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText(this, "请开启GPS导航--", Toast.LENGTH_LONG).show(); Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(intent, 0); return; } String bestProvider = lm.getBestProvider(getCriteria(), true); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } Location location = lm.getLastKnownLocation(bestProvider); updateView(location); lm.addGpsStatusListener(listener); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener); } @Override protected void onDestroy() { super.onDestroy(); lm.removeUpdates(locationListener); } private LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { updateView(location); Log.i(TAG, "时间:" + location.getTime()); Log.i(TAG, "经度:" + location.getLongitude()); Log.i(TAG, "纬度:" + location.getLatitude()); Log.i(TAG, "海拔:" + location.getAltitude()); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { switch (status) { case LocationProvider.AVAILABLE: Log.i(TAG, "当前GPS状态为可见状态"); break; case LocationProvider.OUT_OF_SERVICE: Log.i(TAG, "当前GPS状态为服务区外状态"); break; case LocationProvider.TEMPORARILY_UNAVAILABLE: Log.i(TAG, "当前GPS状态为暂停服务状态"); break; } } @Override public void onProviderEnabled(String provider) { if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } Location location = lm.getLastKnownLocation(provider); updateView(location); } @Override public void onProviderDisabled(String provider) { updateView(null); } }; private void updateView(Location location) { if (location != null) { editText.setText("设备位置信息\n\n经度:"); editText.append(String.valueOf(location.getLongitude())); editText.append("\n纬度:"); editText.append(String.valueOf(location.getLatitude())); } else { // 清空EditText对象 editText.getEditableText().clear(); } } private Criteria getCriteria() { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setSpeedRequired(false); criteria.setCostAllowed(false); criteria.setBearingRequired(false); criteria.setAltitudeRequired(false); criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; } GpsStatus.Listener listener = new GpsStatus.Listener() { @Override public void onGpsStatusChanged(int event) { switch (event) { case GpsStatus.GPS_EVENT_FIRST_FIX: Log.i(TAG, "第一次定位"); break; case GpsStatus.GPS_EVENT_SATELLITE_STATUS: Log.i(TAG, "卫星状态改变"); if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } GpsStatus gpsStatus = lm.getGpsStatus(null); int maxSatellite = gpsStatus.getMaxSatellites(); Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator(); int count = 0; while (iters.hasNext() && count <= maxSatellite) { GpsSatellite s = iters.next(); count++; } System.out.println("搜索到:" + count + "颗卫星"); break; case GpsStatus.GPS_EVENT_STARTED: Log.i(TAG, "定位启动"); break; case GpsStatus.GPS_EVENT_STOPPED: Log.i(TAG, "定位结束"); break; } } }; }
android 原生gaps
猜你喜欢
转载自blog.csdn.net/weixin_41069726/article/details/87980130
今日推荐
周排行