android studio获取googleapiclient的当前位置

时间:2017-02-23 10:13:50

标签: android android-studio

我在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权限。

enter image description here

2 个答案:

答案 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。