无法在AVD上连接到GooglePlayServices

时间:2016-05-09 12:03:12

标签: android location google-play-services

我目前正在尝试访问GooglePlayServices。 AVD(API 23)上所有其他功能的互联网工作正常,但我不太确定我的实际应用程序存在什么问题。

每当我尝试连接时,都会说Connection已经失败了。我相信我已正确设置了GoogleAPIClient,但在ConnectionRequest中,我没有自定义任何设置(为简单起见)。

这是我的一些应用程序代码,用于提供一些信息。

的Manifest.xml

<?xml version="1.0" encoding="utf-8"?>

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

<application
    android:name=".Protoype2"
    android:allowBackup="true"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".SettingsMenu"
        android:label="@string/title_activity_settings_menu"
        android:parentActivityName=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.denny.protoype2.MainActivity" />
    </activity>
    <activity
        android:name=".ViewingWindow"
        android:label="@string/title_activity_viewing_window"
        android:parentActivityName=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.denny.protoype2.MainActivity" />
    </activity>
</application>

的onCreate();来自相关的班级

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_viewing_window);
    mRequestingLocationUpdates = ((Protoype2)getApplication()).getRequestingLocationUpdates();
    if (!mRequestingLocationUpdates) {
        StoppedMessage();
    }
    ExceedInstance = 0;
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, this)
            .addApi(Drive.API)
            .addScope(Drive.SCOPE_FILE)
            .build();
    String[] LocationPermission = new String[]{Manifest.permission.ACCESS_FINE_LOCATION};
    if (ContextCompat.checkSelfPermission(ViewingWindow.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(ViewingWindow.this,
                Manifest.permission.ACCESS_FINE_LOCATION)) {
            GPSExplanation();
        } else {
            ActivityCompat.requestPermissions(ViewingWindow.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
        }

    }
    onRequestPermissionsResult(MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION, LocationPermission, grantResults);

    final Button BackButton = (Button)findViewById(R.id.VWBackButton);
    BackButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent GoBackIntent = new Intent (ViewingWindow.this, MainActivity.class);
            startActivity(GoBackIntent);
        }
    });
    updateValuesFromBundle(savedInstanceState);

}

最后,有几种预定义的连接方法:

protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

public void onConnected(Bundle connectionHint) {
    createLocationRequest();
    if (mRequestingLocationUpdates) {
        startLocationUpdates();
    }
}

protected LocationRequest createLocationRequest() {
    return new LocationRequest();
}

1 个答案:

答案 0 :(得分:0)

检查您的AVD是否具有相应版本的Google Play服务APK,实施onConnectionFailed()回调方法。使用可用于解决错误的参数ConnectionResult,并确定发生了哪种错误。

  

要解决此错误,必须从传递给startResolutionForResult(Activity, int)的非负 requestCode 的活动开始解析。如果用户已解决问题(resultCode为connect()),应用程序应在其Activity中实现onActivityResult以再次调用RESULT_OK

根据此documentation,当您的应用收到onConnectionFailed()}回调电话时,您应该在提供的hasResolution()对象上拨打ConnectionResult。如果它返回true,您的应用可以通过调用startResolutionForResult()对象上的ConnectionResult来请求用户立即采取措施来解决错误。

检查此相关question。希望能帮助到你!