如何在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
}