Google+的从不同的活动注销 [英] Google+ sign out from a different activity

查看:101
本文介绍了Google+的从不同的活动注销的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经开始使用了的Google+ API 为Android,我创建了一个登录应用程序按照本教程:

<一个href="https://developers.google.com/+/mobile/android/sign-in">https://developers.google.com/+/mobile/android/sign-in

现在的问题是,我想从一个不同的活动,而我试图做并没有真正的工作创造登出键..

我的GPlusLogin code(活动为Google+的登录):

 进口android.app.Activity;
进口android.app.ProgressDialog;
进口android.content.Intent;
进口android.content.IntentSender.SendIntentException;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.View;
进口android.view.View.OnClickListener;
进口com.google.android.gms.common *。
进口com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
进口com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
进口com.google.android.gms.plus.PlusClient;

公共类GPlusLogin扩展活动实现ConnectionCallbacks,OnConnectionFailedListener {

    私有静态最终诠释REQUEST_ code_RESOLVE_ERR = 9000;
    私有静态最后字符串变量=GPlusLogin;

    私人ProgressDialog mConnectionProgressDialog;
    私人PlusClient mPlusClient;
    私人ConnectionResult mConnectionResult;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.gplus_layout);
        mPlusClient =新PlusClient.Builder(这个,这​​个,这个).setVisibleActivities(http://schemas.google.com/AddActivity,http://schemas.google.com/BuyActivity).build();
        捆绑额外= getIntent()getExtras()。
        mConnectionProgressDialog =新ProgressDialog(本);
        mConnectionProgressDialog.setMessage(登录...);

        如果(临时演员!= NULL){
            如果(extras.getString(signout)!= NULL){
                如果(mPlusClient.isConnected()){
                    mPlusClient.clearDefaultAccount();
                    mPlusClient.disconnect();
                    mPlusClient.connect();
                    完();
                    startActivity(getIntent());
                }
            }
        }其他{

            findViewById(R.id.sign_in_button).setOnClickListener(新OnClickListener(){

                公共无效的onClick(视图查看){
                    // TODO自动生成方法存根
                    如果(view.getId()== R.id.sign_in_button&安培;&安培;!mPlusClient.isConnected()){
                        如果(mConnectionResult == NULL){
                            mConnectionProgressDialog.show();
                        } 其他 {
                            尝试 {
                                mConnectionResult.startResolutionForResult(GPlusLogin.this,REQUEST_ code_RESOLVE_ERR);
                            }赶上(SendIntentException E){
                                //尝试重新连接。
                                mConnectionResult = NULL;
                                mPlusClient.connect();
                            }
                        }
                    }
                }
            });
        }
    }

    @覆盖
    保护无效的OnStart(){
        // TODO自动生成方法存根
        super.onStart();
        mPlusClient.connect();
    }

    @覆盖
    保护无效的onStop(){
        // TODO自动生成方法存根
        super.onStop();
        mPlusClient.disconnect();
    }

    @覆盖
    公共无效onConnectionFailed(ConnectionResult结果){
        // TODO自动生成方法存根
        如果(mConnectionProgressDialog.isShowing()){
            //用户点击登录按钮了。开始解决
            //连接错误。等到onConnected()驳回
            //连接对话框。
            如果(result.hasResolution()){
                尝试 {
                    result.startResolutionForResult(这一点,REQUEST_ code_RESOLVE_ERR);
                }赶上(SendIntentException E){
                    mPlusClient.connect();
                }
            }
        }

        mConnectionResult =结果;
    }

    @覆盖
    保护无效onActivityResult(INT申请code,INT响应code,意图意图){
        如果(要求code == REQUEST_ code_RESOLVE_ERR和放大器;&安培;响应code == RESULT_OK){
            mConnectionResult = NULL;
            mPlusClient.connect();
        }
    }

    @覆盖
    公共无效onConnected(){
        // TODO自动生成方法存根
        mConnectionProgressDialog.dismiss();
        主要意图=新的意图(GPlusLogin.this,MainActivity.class);
        main.putExtra(结果,真正的);
        startActivity(主);
    }

    @覆盖
    公共无效onDisconnected(){
        // TODO自动生成方法存根
        Log.d(TAG,断开连接);
    }

}
 

我的断开$ C $基于C MainActivity

 进口android.os.Bundle;
进口android.app.Activity;
进口android.content.Intent;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.TextView;


公共类MainActivity延伸活动{

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        捆绑额外= getIntent()getExtras()。
        如果(临时演员== NULL){
            意向意图=新的意图(这一点,GPlusLogin.class);
            startActivity(意向);
        }
        TextView的文本1 =(TextView中)findViewById(R.id.text1);
        text1.setText(您已连接:D);

        按钮SignOut =(按钮)findViewById(R.id.sign_out_gplus);
        SignOut.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图查看){
                // TODO自动生成方法存根
                意向意图=新的意图(MainActivity.this,GPlusLogin.class);
                intent.putExtra(signout,真正的);
                startActivity(意向);
            }
        });
    }

    @覆盖
    公共布尔onCreateOptionsMenu(功能菜单){
        //充气菜单;这增加了项目操作栏,如果它是present。
        。getMenuInflater()膨胀(R.menu.main,菜单);
        返回true;
    }


}
 

解决方案

嘿,我解决了这个问题,通过我自己,就像魅力的工作。

这是什么问题:谷歌,加上签到的一个活动,但需要从其他活动注销

解决方法:

我的谷歌加登出活动是这样的:

 公共类MainActivity扩展活动实现OnClickListener,
    ConnectionCallbacks,OnConnectionFailedListener,
    ResultCallback&LT; People.LoadPeopleResult&GT; {

   GoogleApiClient mGoogleApiClient;
   布尔mSignInClicked;

  @覆盖
  保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);

    mGoogleApiClient =新GoogleApiClient.Builder(本)
            .addConnectionCallbacks(本)
            .addOnConnectionFailedListener(本).addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_LOGIN).build();

     //复制此code上的注销的onClick
  logout.setOnClickListener(新OnClickListener(){

        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
             如果(mGoogleApiClient.isConnected()){
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
            mGoogleApiClient.disconnect();
            mGoogleApiClient.connect();
            //的updateUI(假);
            通信System.err.println(注销^^^^^^^^^^^^^^^^^^^^ SUCESS);
        }

        }
    });

}
@覆盖
公共无效onConnected(捆绑为arg0){
    // TODO自动生成方法存根
    mSignInClicked = FALSE;

    //的updateUI(真正的);
    Plus.PeopleApi.loadVisible(mGoogleApiClient,空).setResultCallback(
            本);
}

@覆盖
公共无效onConnectionSuspended(INT为arg0){
    // TODO自动生成方法存根
    mGoogleApiClient.connect();
    //的updateUI(假);
}

@覆盖
公共无效onConnectionFailed(ConnectionResult为arg0){
    // TODO自动生成方法存根

}

保护无效的OnStart(){
    super.onStart();
    mGoogleApiClient.connect();
}

保护无效的onStop(){
    super.onStop();
    如果(mGoogleApiClient.isConnected()){
        mGoogleApiClient.disconnect();
    }
}

@覆盖
公共无效onResult(LoadPeopleResult为arg0){
    // TODO自动生成方法存根

}
 

说明有关解决方案:

对于单包加谷歌API将生成一个令牌放大器; session.Just这里简单地作出注销页面多了一个会议also.You可以轻松地从会话现在注销

我已经试过了很多关于这个问题,从当前会话注销,只是试试这个。它肯定会工作。任何疑问,让我知道

I have started using the Google+ API for android, and I have created a sign-in application following this tutorial:

https://developers.google.com/+/mobile/android/sign-in

Now, the problem is that I want to create the sign out button from a different Activity, and what i tried to do didn't really worked..

My GPlusLogin code (Activity for the Google+ Login):

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import com.google.android.gms.common.*;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.plus.PlusClient;

public class GPlusLogin extends Activity implements ConnectionCallbacks, OnConnectionFailedListener{

    private static final int REQUEST_CODE_RESOLVE_ERR = 9000;
    private static final String TAG = "GPlusLogin";

    private ProgressDialog mConnectionProgressDialog;
    private PlusClient mPlusClient;
    private ConnectionResult mConnectionResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gplus_layout);
        mPlusClient = new PlusClient.Builder(this, this, this).setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity").build();
        Bundle extras = getIntent().getExtras();
        mConnectionProgressDialog = new ProgressDialog(this);
        mConnectionProgressDialog.setMessage("Signing in...");

        if(extras!=null){
            if(extras.getString("signout")!=null){
                if (mPlusClient.isConnected()) {
                    mPlusClient.clearDefaultAccount();
                    mPlusClient.disconnect();
                    mPlusClient.connect();
                    finish();
                    startActivity(getIntent());
                }
            }
        }else{

            findViewById(R.id.sign_in_button).setOnClickListener(new OnClickListener() {

                public void onClick(View view) {
                    // TODO Auto-generated method stub
                    if (view.getId() == R.id.sign_in_button && !mPlusClient.isConnected()) {
                        if (mConnectionResult == null) {
                            mConnectionProgressDialog.show();
                        } else {
                            try {
                                mConnectionResult.startResolutionForResult(GPlusLogin.this, REQUEST_CODE_RESOLVE_ERR);
                            } catch (SendIntentException e) {
                                // Try connecting again.
                                mConnectionResult = null;
                                mPlusClient.connect();
                            }
                        }
                    }
                }
            });
        }
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        mPlusClient.connect();
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        mPlusClient.disconnect();
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // TODO Auto-generated method stub
        if (mConnectionProgressDialog.isShowing()) {
            // The user clicked the sign-in button already. Start to resolve
            // connection errors. Wait until onConnected() to dismiss the
            // connection dialog.
            if (result.hasResolution()) {
                try {
                    result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
                } catch (SendIntentException e) {
                    mPlusClient.connect();
                }
            }
        }

        mConnectionResult = result;
    }

    @Override
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
        if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
            mConnectionResult = null;
            mPlusClient.connect();
        }
    }

    @Override
    public void onConnected() {
        // TODO Auto-generated method stub
        mConnectionProgressDialog.dismiss();
        Intent main = new Intent(GPlusLogin.this, MainActivity.class);
        main.putExtra("result", true);
        startActivity(main);
    }

    @Override
    public void onDisconnected() {
        // TODO Auto-generated method stub
        Log.d(TAG, "disconnected");
    }

}

My Disconnect code on MainActivity:

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Bundle extras = getIntent().getExtras();
        if(extras==null){
            Intent intent = new Intent(this, GPlusLogin.class);
            startActivity(intent);
        }
        TextView text1 = (TextView) findViewById(R.id.text1);
        text1.setText("You Are Connected :D");

        Button SignOut = (Button) findViewById(R.id.sign_out_gplus);
        SignOut.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MainActivity.this, GPlusLogin.class);
                intent.putExtra("signout", true);
                startActivity(intent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


}

解决方案

Hey i solved this problem by myself, working like charm

What is the problem : Google plus signIn in one activity but need to Logout from another activity

Solution:

My Google-plus Logout Activity is like this:

public class MainActivity extends Activity implements OnClickListener,
    ConnectionCallbacks, OnConnectionFailedListener,
    ResultCallback<People.LoadPeopleResult> {

   GoogleApiClient mGoogleApiClient;
   boolean mSignInClicked;

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

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

     //copy this code on "Logout" Onclick
  logout.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             if (mGoogleApiClient.isConnected()) {
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
            mGoogleApiClient.disconnect();
            mGoogleApiClient.connect();
            // updateUI(false);
            System.err.println("LOG OUT ^^^^^^^^^^^^^^^^^^^^ SUCESS");
        } 

        }
    });

}
@Override
public void onConnected(Bundle arg0) {
    // TODO Auto-generated method stub
    mSignInClicked = false;

    // updateUI(true);
    Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback(
            this);
}

@Override
public void onConnectionSuspended(int arg0) {
    // TODO Auto-generated method stub
    mGoogleApiClient.connect();
    // updateUI(false);
}

@Override
public void onConnectionFailed(ConnectionResult arg0) {
    // TODO Auto-generated method stub

}

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

protected void onStop() {
    super.onStop();
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

@Override
public void onResult(LoadPeopleResult arg0) {
    // TODO Auto-generated method stub

}

Description about solution:

For single package google plus API will generate one token & session.Just here simply make one more session in logout page also.You can easily logout from session now

I to have tried a lot about this problem,to logout from current session, just try this .it will definitely work. any doubts let me know

这篇关于Google+的从不同的活动注销的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆