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