Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中从GPS获取坐标?_Android_Gps - Fatal编程技术网

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

如何在Android中从GPS获取坐标?,android,gps,Android,Gps,这不起作用: isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 在这段代码之后,它转到catch语句。 另一个问题是解决语句给了我错误。下面有一条红线 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_

这不起作用:

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

这是我从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;
}

您应该将以下行添加到
AndroidManifest.xml

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

请也包括您的清单代码,您是否添加了这些权限

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

根据以下内容:

从Android 6.0(API级别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
}