Google+的从不同的活动注销 [英] Google+ sign out from a different activity
问题描述
我已经开始使用了的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屋!