问题
I am currently trying to access the GooglePlayServices. The internet for all the other functions on the AVD (API 23) works fine, however I am not quite sure what the problem is on my actual app.
Everytime I try to connect, it says that Connection has failed. I believe I have set up the GoogleAPIClient correctly, though in the ConnectionRequest, I have not customised any of the settings (for simplicity's sake).
This is some of my app's code to provide some information.
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(); from the relevant Class
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);
}
Finally, the several predefined methods of connection:
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
public void onConnected(Bundle connectionHint) {
createLocationRequest();
if (mRequestingLocationUpdates) {
startLocationUpdates();
}
}
protected LocationRequest createLocationRequest() {
return new LocationRequest();
}
回答1:
Check if your AVD has the appropriate version of the Google Play services APK, implement the onConnectionFailed() callback method. Use the parameter ConnectionResult that can be used for resolving the error, and deciding what sort of error occurred.
To resolve the error, the resolution must be started from an activity with a non-negative requestCode passed to startResolutionForResult(Activity, int). Applications should implement onActivityResult in their Activity to call connect() again if the user has resolved the issue (resultCode is RESULT_OK).
Based from this documentation, when your app receives a call to the onConnectionFailed()) callback, you should call hasResolution() on the provided ConnectionResult object. If it returns true, your app can request that the user take immediate action to resolve the error by calling startResolutionForResult() on the ConnectionResult object.
Check this related question. Hope it helps!
来源:https://stackoverflow.com/questions/37115338/trouble-connecting-to-googleplayservices-on-avd