如何在Android中从GPS获取坐标?

3

这个不起作用:

isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

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

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

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

调用需要权限,用户可能会拒绝:代码应当显式检查权限是否可用(使用 checkPermission)或显式处理潜在的 SecurityException

这是我从安卓手机获取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;
}
3个回答

6
根据请求权限页面所述:
从 Android 6.0(API level 23) 开始,用户会在应用程序运行时而非安装应用程序时授予权限。这种方法简化了应用程序的安装过程,因为用户不需要在安装或更新应用程序时授予权限。
有两种不同的权限:
系统权限分为两类:常规和危险的。
- 普通权限不会直接危及用户的隐私。如果您的应用在其清单中列出普通权限,则系统将自动授予权限。 - 危险权限可能会让应用访问用户的机密数据。如果您的应用在其清单中列出危险权限,则系统将不会自动授予权限,用户必须明确批准您的应用。
因此,如果您正在使用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
}

0
您应该将以下代码行添加到您的AndroidManifest.xml文件中:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

0

请同时包含您的清单代码,您是否已添加这些权限?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接