当应用程序连接到 Google Plus 时,我试图找到任何必要的方法来设置连接超时。但是,我找不到任何可以为我设置它的东西。这是我的代码。无论如何设置连接超时?
GooglePlusWebService.java
package com.mystuff.WebServices;
import android.app.Activity;
import android.content.IntentSender;
import android.util.Log;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.plus.Plus;
import com.google.android.gms.plus.model.people.Person;
import com.pointwest.timetrackermobilelog.Models.ProfileInformation;
public class GooglePlusWebService {
// Google client to interact with Google API
private GoogleApiClient mGoogleApiClient;
public static String LOG_TAG = GooglePlusWebService.class.getSimpleName();
private boolean mSignInClicked;
private boolean mIntentInProgress;
private ConnectionResult mConnectionResult;
private static final int RC_SIGN_IN = 0;
public GooglePlusWebService(Activity activity) {
mGoogleApiClient = new GoogleApiClient.Builder(activity)
.addConnectionCallbacks((GoogleApiClient.ConnectionCallbacks) activity)
.addOnConnectionFailedListener((GoogleApiClient.OnConnectionFailedListener) activity)
.addApi(Plus.API, new Plus.PlusOptions.Builder().build())
.addScope(Plus.SCOPE_PLUS_LOGIN)
.build();
}
public void start() {
// Log.e(LOG_TAG, "onStart called");
mGoogleApiClient.connect();
}
public void stop() {
// Log.e(LOG_TAG, "onStop called");
if (mGoogleApiClient.isConnected()) {
// Log.e(LOG_TAG, "api connected -> disconnect");
mGoogleApiClient.disconnect();
}
}
/**
* Sign-in into google
* */
public void signInWithGplus(Activity activity) {
//Log.e(LOG_TAG, "signInWithGplus called");
if (!mGoogleApiClient.isConnecting()) {
//Log.e(LOG_TAG, "api client NOT connecting");
mSignInClicked = true;
resolveSignInError(activity);
} else {
//Log.e(LOG_TAG, "api client connecting");
}
}
/**
* Method to resolve any signin errors
* */
public void resolveSignInError(Activity activity) {
//Log.e(LOG_TAG, "resolveSignError called");
if (mConnectionResult.hasResolution()) {
try {
//Log.e(LOG_TAG, "connection result has resolution");
mIntentInProgress = true;
mConnectionResult.startResolutionForResult(activity, RC_SIGN_IN);
//Log.e(LOG_TAG, "connection startResolutionForResult");
} catch (IntentSender.SendIntentException e) {
//Log.e(LOG_TAG, "error : ");
e.printStackTrace();
mIntentInProgress = false;
mGoogleApiClient.connect();
}
}
}
public void connected(Activity activity) {
// Log.e(LOG_TAG, "onConnected called");
mSignInClicked = false;
//Toast.makeText(activity, "User is connected!", Toast.LENGTH_LONG).show();
}
public ProfileInformation getProfileInformation() {
//Log.e(LOG_TAG, "getProfileInformation called");
ProfileInformation profileInformation = new ProfileInformation();
try {
if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
Person currentPerson = Plus.PeopleApi
.getCurrentPerson(mGoogleApiClient);
profileInformation.setPersonName(currentPerson.getDisplayName());
profileInformation.setPersonPhotoUrl(currentPerson.getImage().getUrl());
profileInformation.setPersonGooglePlusProfile(currentPerson.getUrl());
profileInformation.setEmail(Plus.AccountApi.getAccountName(mGoogleApiClient));
// Log.e(LOG_TAG, "Name: " + profileInformation.getPersonName()
// + ", plusProfile: " + profileInformation.getPersonGooglePlusProfile()
// + ", email: " + profileInformation.getEmail()
// + ", Image: " + profileInformation.getPersonPhotoUrl());
}
} catch (Exception e) {
Log.e(LOG_TAG, "Error: ", e );
}
return profileInformation;
}
/**
* Sign-out from google
* */
public void signOutFromGplus() {
// Log.e(LOG_TAG, "signOutFromGplus called");
if (mGoogleApiClient.isConnected()) {
// Log.e(LOG_TAG, "mGoogleApiClient.isConnected");
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
mGoogleApiClient.disconnect();
mGoogleApiClient.connect();
}
}
/**
* Revoking access from google
* */
public void revokeGplusAccess() {
//Log.e(LOG_TAG, "revokeGplusAccess called");
if (mGoogleApiClient.isConnected()) {
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
// Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient)
// .setResultCallback(new ResultCallback<Status>() {
// @Override
// public void onResult(Status arg0) {
// //Log.e(LOG_TAG, "User access revoked!");
// mGoogleApiClient.connect();
//// updateUI(false);
// }
//
// });
}
}
public void checkActivityResult(int requestCode, int responseCode, int RESULT_OK) {
//Log.e(LOG_TAG, "onActivityResult called");
if (requestCode == RC_SIGN_IN) {
if (responseCode != RESULT_OK) {
mSignInClicked = false;
}
mIntentInProgress = false;
if (!mGoogleApiClient.isConnecting()) {
mGoogleApiClient.connect();
}
}
}
public void connectionFailed(ConnectionResult result, Activity activity) {
// Log.e(LOG_TAG, "onConnectionFAiled called : " + result.getErrorCode());
if (!result.hasResolution()) {
//Log.e(LOG_TAG, "result has no resolution");
GooglePlayServicesUtil.getErrorDialog (result.getErrorCode(), activity,0).show();
return;
}
if (!mIntentInProgress) {
//Log.e(LOG_TAG, "mIntent not in progress");
// Store the ConnectionResult for later usage
mConnectionResult = result;
if (mSignInClicked) {
//Log.e(LOG_TAG, "sign in has clicked");
// The user has already clicked 'sign-in' so we attempt to
// resolve all
// errors until the user is signed in, or they cancel.
resolveSignInError(activity);
}
}
}
}
以及调用它的 Activity。我裁剪了一些不必要的部分。
MainActivity.java
package com.mystuff.Activities;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.astuetz.PagerSlidingTabStrip;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MainActivity extends ActionBarActivity implements
ConnectionCallbacks,
OnConnectionFailedListener,
ConnectivityReceiver.OnNetworkAvailableListener,
MainFragment.SaveButtonListener
{
public static String LOG_TAG = MainActivity.class.getSimpleName();
//Application Class
ApplicationClass applicationClass;
// Activity to be used for saving tasks into the database;
private Activity activity;
// GooglePlus Webservice client to interact with Google API
private GooglePlusWebService googlePlusWebService;
//Internet Checker
private boolean isInternetConnected = false;
//Share Preferences
SharedPreferences sharedPreferences;
//Connection Receiver
private ConnectivityReceiver connectivityReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Log.e(LOG_TAG, "onCreate called ");
activity = this;
setContentView(R.layout.activity_main_material);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
// Initialization of view pager
viewPager = (ViewPager) findViewById(R.id.pager);
sharedPreferences = getSharedPreferences("Shared", Context.MODE_PRIVATE);
// String username = sharedPreferences.getString(SystemConstants.POINTWEST_USERNAME, "");
if (InternetConnection.isConnected(this)) {
applicationClass = (ApplicationClass) getApplication();
applicationClass.getTracker(ApplicationClass.TrackerName.APP_TRACKER);
googlePlusWebService = new GooglePlusWebService(this);
isInternetConnected = true;
}
}
@Override
public void onStart() {
super.onStart();
if (isInternetConnected) {
googlePlusWebService.start();
//Get an Analytics tracker to report app starts and uncaught exceptions etc.
GoogleAnalytics.getInstance(this).reportActivityStart(this);
}
}
@Override
public void onStop() {
Log.e(LOG_TAG, " ## start: onStop called ##");
super.onStop();
if (isInternetConnected) {
googlePlusWebService.stop();
//Stop the analytics tracking
GoogleAnalytics.getInstance(this).reportActivityStop(this);
}
// Log.e(LOG_TAG, " ## finished: onStop ##");
}
@Override
public void onDestroy(){
connectivityReceiver.unbind(activity);
super.onDestroy();
// Log.e(LOG_TAG, " ## start: on Destroy called ##");
tabsPagerAdapter = new TabsPagerAdapter(
getSupportFragmentManager(),
new ArrayList<ProjectTask>(),
new ArrayList<ProjectTask>());
// viewPager.setAdapter(tabsPagerAdapter);
// Log.e(LOG_TAG, " ## finished: on Destroy called ##");
}
@Override
public void onConnected(Bundle bundle) {
if (isInternetConnected) {
googlePlusWebService.connected(this);
// Log.e(LOG_TAG, "onConnected");
}
// Get user's information
// getProfileInformation();
}
@Override
public void onConnectionSuspended(int i) {
if (isInternetConnected) {
googlePlusWebService.start();
}
}
@Override
public void onActivityResult(int requestCode, int responseCode,
Intent intent) {
if (isInternetConnected) {
googlePlusWebService.checkActivityResult(requestCode, responseCode, RESULT_OK);
}
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (isInternetConnected) {
googlePlusWebService.connectionFailed(connectionResult, this);
}
}
}