Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理谷歌&x2B;安卓系统中的登录_Java_Android_Google Plus_Google Play Services - Fatal编程技术网

Java 处理谷歌&x2B;安卓系统中的登录

Java 处理谷歌&x2B;安卓系统中的登录,java,android,google-plus,google-play-services,Java,Android,Google Plus,Google Play Services,我已经为用户实现了一种使用Google+帐户登录应用程序的方法。在Google开发者网页上的示例中,登录过程连接到活动生命周期:用户在活动开始时登录,在活动结束时注销 应用程序有一个可以执行登录和注销功能的活动。不过,我可能需要在其他活动中访问Google+服务。为了实现这一点,我需要在每个活动上使用connect方法,并且还需要在其他方法上使用connect方法。我认为这很糟糕,重复代码。如何以良好的方式实现这一点 完整的登录系统如下所示 public class MainActivity e

我已经为用户实现了一种使用Google+帐户登录应用程序的方法。在Google开发者网页上的示例中,登录过程连接到活动生命周期:用户在活动开始时登录,在活动结束时注销

应用程序有一个可以执行登录和注销功能的活动。不过,我可能需要在其他活动中访问Google+服务。为了实现这一点,我需要在每个活动上使用connect方法,并且还需要在其他方法上使用connect方法。我认为这很糟糕,重复代码。如何以良好的方式实现这一点

完整的登录系统如下所示

public class MainActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener {

    private GoogleApiClient googleApiClient;
    private boolean intentInProcess = false;
    private int PLUS_SIGN_IN = 63640;
    private boolean signInClicked = false;
    private ConnectionResult connectionResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        googleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_LOGIN)
            .build();
    }

    @Override
    protected void onStart() {
        super.onStart();

        googleApiClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();

        if(googleApiClient.isConnected()) {
            googleApiClient.disconnect();
        }
    }

    private void resolveSignInErrors() {
        if(connectionResult.hasResolution()) {
            try {
                intentInProcess = true;
                connectionResult.startResolutionForResult(this, PLUS_SIGN_IN);
            } catch(SendIntentException e) {
                intentInProcess = false;
                googleApiClient.connect();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == PLUS_SIGN_IN) {
            if(requestCode != RESULT_OK) {
                signInClicked = false;
            }

            intentInProcess = false;

            if(!googleApiClient.isConnecting()) {
                googleApiClient.connect();
            }
        }
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        if(!intentInProcess) {
            connectionResult = result;

            if(signInClicked) {
                resolveSignInErrors();
            }
        }
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        signInClicked = false;
    }

    @Override
    public void onConnectionSuspended(int cause) {
        googleApiClient.connect();
    }

    public void signOutPlus() {
        if(googleApiClient.isConnected()) {
            Plus.AccountApi.clearDefaultAccount(googleApiClient);
            googleApiClient.disconnect();
        }
    }

    public void disconnectPlus() {
        Plus.AccountApi.clearDefaultAccount(googleApiClient);
        Plus.AccountApi.revokeAccessAndDisconnect(googleApiClient).setResultCallback(new ResultCallback<Status>() {
            @Override
            public void onResult(Status result) {

            }
        });
    }
}
公共类MainActivity扩展活动实现ConnectionCallbacks、OnConnectionFailedListener{
私人GoogleapClient GoogleapClient;
私有布尔intentInProcess=false;
私有整数加上符号=63640;
私有布尔符号signClicked=false;
私有连接结果连接结果;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GoogleapClient=新的GoogleapClient.Builder(此)
.addConnectionCallbacks(此)
.addOnConnectionFailedListener(此)
.addApi(加上.API)
.addScope(Plus.SCOPE\u Plus\u登录)
.build();
}
@凌驾
受保护的void onStart(){
super.onStart();
googleApiClient.connect();
}
@凌驾
受保护的void onStop(){
super.onStop();
if(googleApiClient.isConnected()){
googleApiClient.disconnect();
}
}
私有无效解析签名人(){
if(connectionResult.hasResolution()){
试一试{
intentInProcess=true;
connectionResult.StartResult解决方案(这个,加上符号);
}捕获(发送){
intentInProcess=false;
googleApiClient.connect();
}
}
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(requestCode==加号){
if(requestCode!=结果_确定){
signInClicked=false;
}
intentInProcess=false;
如果(!googleApiClient.isConnecting()){
googleApiClient.connect();
}
}
}
@凌驾
连接失败的公共void(连接结果){
if(!intentInProcess){
连接结果=结果;
如果(已签名){
解析签名者();
}
}
}
@凌驾
未连接的公共无效(捆绑连接提示){
signInClicked=false;
}
@凌驾
连接上的公共无效已暂停(内部原因){
googleApiClient.connect();
}
公共无效signOutPlus(){
if(googleApiClient.isConnected()){
Plus.AccountApi.clearDefaultAccount(GoogleAppClient);
googleApiClient.disconnect();
}
}
公共void disconnectPlus(){
Plus.AccountApi.clearDefaultAccount(GoogleAppClient);
Plus.AccountApi.revokeAccessAndDisconnect(GoogleAppClient).setResultCallback(new ResultCallback()){
@凌驾
公共结果无效(状态结果){
}
});
}
}

创建一个实现
谷歌播放服务的基本活动
,然后在需要使用谷歌播放服务的任何时候扩展该活动

那就扩大范围

public class MainActivity extends GoogleActivity
public class MainActivity extends GoogleActivity