android - 如何从 Android 中的 GPS 获取坐标?

标签 android gps

这是行不通的:

isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

在这段代码之后,它进入 catch 语句。 另一个问题是解决语句给我错误。它下面有一条红线。

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

上述错误的提示是在 Android Studio 中:

Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential SecurityException

这是我从 Android 手机获取 gps 坐标的全部代码。

public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext
                .getSystemService(LOCATION_SERVICE);

        // getting GPS status
        isGPSEnabled = locationManager
                .isProviderEnabled(LocationManager.GPS_PROVIDER);

        // getting network status
        isNetworkEnabled = locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {

            Toast.makeText(getApplicationContext(), "1111",  Toast.LENGTH_LONG).show();
            // no network provider is enabled
        } else {
            this.canGetLocation = true;

            Toast.makeText(getApplicationContext(), "2222",  Toast.LENGTH_LONG).show();
            // First get location from Network Provider
            if (isNetworkEnabled) {
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Network", "Network");
                if (locationManager != null) {
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }
            // if GPS Enabled get lat/long using GPS Services
            if (isGPSEnabled) {
                if (location == null) {
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return location;
}

最佳答案

根据Requesting Permission :

Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app. This approach streamlines the app install process, since the user does not need to grant permissions when they install or update the app.

有两个区别:

System permissions are divided into two categories, normal and dangerous:

Normal permissions do not directly risk the user's privacy. If your app lists a normal permission in its manifest, the system grants the permission automatically.

Dangerous permissions can give the app access to the user's confidential data. If your app lists a normal permission in its manifest, the system grants the permission automatically. If you list a dangerous permission, the user has to explicitly give approval to your app.

因此,如果您使用的是 API 23,如果您要访问定位服务,则必须检查明确的权限,因此请添加:

if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
        || checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
  //DO OP WITH LOCATION SERVICE
}

我建议您还检查应用程序是否在 API >= 23 的设备上运行:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
  //DO CHECK PERMISSION
}

关于android - 如何从 Android 中的 GPS 获取坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065177/

相关文章:

android - 将我的项目 API 更新为 21 并将 AppCompat 更新为 21.02 后找不到资源

android - 无法在 crashlytics 仪表板中找到崩溃

java - Android videoview 不播放 rtsp

android - 在 SL4a 中使用 Python 读取 GPS 值不起作用

java - 如何检查 GPS 是否已禁用 Android

android - 存储和检索sqlite文件(android编程)

java - Activity B 在调用 finish() 后通知 Activity A

android - 位置管理器显示为空

android - Gps 位置监听器停止

ios - 为什么 EXIF GPS 坐标在 iOS 上被截断?