我在Android应用中获得gps位置有些困难。
在manifest.xml中的我把:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
在我的Activity Class中的片段代码:
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
try {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
} catch (SecurityException secEx) {
}
if (mLastLocation != null) {
String mLatitudeText = new String(String.valueOf(mLastLocation.getLatitude()));
String mLongitudeText = new String(String.valueOf(mLastLocation.getLongitude()));
}
方法覆盖(空,因为我不知道我是否应该写一些其他代码):
@Override
public void onConnected(@Nullable Bundle bundle) {
try {
if (mLastLocation == null) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
} catch (SecurityException secEx) {
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
mLastLocation为空!
有什么想法吗? 看看底部图像上的APP权限。
答案 0 :(得分:2)
您需要覆盖 onConnected 方法,一旦连接到Google Play服务和位置服务API,您就可以获得用户设备的最后已知位置。当您的应用程序连接到这些应用程序时,您可以使用融合位置提供程序的getLastLocation()方法来检索设备位置。此调用返回的位置精度由您在应用清单中放置的权限设置决定,如本文档的“指定应用程序权限”部分所述。
要请求上一个已知位置,请调用getLastLocation()方法,并将其传递给GoogleApiClient对象的实例。在Google API客户端提供的onConnected()回调中执行此操作,该回调在客户端准备就绪时调用。以下代码段说明了请求和响应的简单处理:
public class MainActivity extends ActionBarActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
@Override
public void onConnected(Bundle connectionHint) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
String mLatitudeText = mLastLocation.getLatitude());
String mLongitudeText= mLastLocation.getLongitude());
}
}
}
了解更多信息,请参阅:https://developer.android.com/training/location/retrieve-current.html
注意:
如果您使用的是API 23及更高版本,请尝试查找问题 从API降级到22.Android 6.0显然没有产生任何效果 权限失败时出现错误消息。
答案 1 :(得分:1)
如果API级别> = 23,则需要检查权限,如果不是,则需要授予权限。像这样,
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, ...},200);
return;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if(requestCode==200){
if(grantResults[0] == PackageManager.PERMISSION_GRANTED);
//your work
}
}
在onConntected方法触发后执行此操作,并尝试在onConnected之后获取位置 如果这不起作用,要查看错误,请在catch上打印stacktrace。