如何在Android中使用GPS获取位置



我想检测我的位置,我正在使用 ACCESS_FINE_LOCATION 许可,但是当我运行应用程序时,它会崩溃并在屏幕上发生错误消息:

" appName"已停止工作

以下是我的代码,我用来实现上述说明:

public class MainActivity extends AppCompatActivity {
    LocationManager locationManager;
    Location location;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       locationManager = (LocationManager) 
                       getSystemService(Context.LOCATION_SERVICE);
       if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
           return;
       }
       location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
       Log.v("My Coordinates are: ", location.getLatitude() + " " + location.getLongitude());
    }
}

我在这里做错了什么?

请帮助。

将您的许可放入清单中,因此您不必在其他活动中再次执行该代码

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

实现位置经理:

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

如果启用了GPS,请获得坐标:

LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener);

这是完整实施的示例:

private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location loc) {
        editLocation.setText("");
        pb.setVisibility(View.INVISIBLE);
        Toast.makeText(
                getBaseContext(),
                "Location changed: Lat: " + loc.getLatitude() + " Lng: "
                    + loc.getLongitude(), Toast.LENGTH_SHORT).show();
        String longitude = "Longitude: " + loc.getLongitude();
        Log.v(TAG, longitude);
        String latitude = "Latitude: " + loc.getLatitude();
        Log.v(TAG, latitude);
        /*------- To get city name from coordinates -------- */
        String cityName = null;
        Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
        List<Address> addresses;
        try {
            addresses = gcd.getFromLocation(loc.getLatitude(),
                    loc.getLongitude(), 1);
            if (addresses.size() > 0) {
                System.out.println(addresses.get(0).getLocality());
                cityName = addresses.get(0).getLocality();
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        String s = longitude + "n" + latitude + "nnMy Current City is: "
            + cityName;
        editLocation.setText(s);
    }
    @Override
    public void onProviderDisabled(String provider) {}
    @Override
    public void onProviderEnabled(String provider) {}
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}

最新更新