gpt4 book ai didi

java - 如何在 Android Facebook 应用程序成功登录后启动新 Activity 并 Conceal 登录页面并在新页面上获取注销按钮

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:47 25 4
gpt4 key购买 nike

我正在将 facebook 应用程序与我的 android 应用程序集成,并且我不想执行 android facebook 应用程序的默认行为,即成功登录后我不想返回同一登录页面并在那里获得注销按钮。成功登录后,它会快速启动一个带有注销按钮的新 Activity ,并且从登录返回时不会出现登录页面。这是我的主要 Activity Java 类代码:

package com.example.facebook;

import java.util.Arrays;
import java.util.List;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.UserInfoChangedCallback;

public class MainActivity extends FragmentActivity {

private LoginButton loginBtn;
private Button postImageBtn;
private Button updateStatusBtn;

private TextView userName;

private UiLifecycleHelper uiHelper;

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");

private static String message = "Sample status posted from android app";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


uiHelper = new UiLifecycleHelper(this, statusCallback);
uiHelper.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);



userName = (TextView) findViewById(R.id.user_name);
loginBtn = (LoginButton) findViewById(R.id.fb_login_button);
loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
if (user != null) {

userName.setText("Hello, " + user.getName());
} else {
userName.setText("You are not logged");
}
}
});



postImageBtn = (Button) findViewById(R.id.post_image);
postImageBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
postImage();
}
});

updateStatusBtn = (Button) findViewById(R.id.update_status);
updateStatusBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

}
});

buttonsEnabled(false);
}

private Session.StatusCallback statusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
buttonsEnabled(true);
if (Session.getActiveSession() != null || Session.getActiveSession().isOpened()){
Intent i = new Intent(MainActivity.this,nextscreen.class);
startActivity(i);
}


Log.d("FacebookSampleActivity", "Facebook session opened");
} else if (state.isClosed()) {
buttonsEnabled(false);

Log.d("FacebookSampleActivity", "Facebook session closed");
}
}
};

public void buttonsEnabled(boolean isEnabled) {

postImageBtn.setEnabled(isEnabled);
updateStatusBtn.setEnabled(isEnabled);
}

public void postImage() {
if (checkPermissions()) {
Bitmap img = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
Request uploadRequest = Request.newUploadPhotoRequest(
Session.getActiveSession(), img, new Request.Callback() {
@Override
public void onCompleted(Response response) {
Toast.makeText(MainActivity.this,
"Photo uploaded successfully",
Toast.LENGTH_LONG).show();
}
});
uploadRequest.executeAsync();
} else {
requestPermissions();
}
}

public void postStatusMessage() {
if (checkPermissions()) {
Request request = Request.newStatusUpdateRequest(
Session.getActiveSession(), message,
new Request.Callback() {
@Override
public void onCompleted(Response response) {
if (response.getError() == null)
Toast.makeText(MainActivity.this,
"Status updated successfully",
Toast.LENGTH_LONG).show();
}
});
request.executeAsync();
} else {
requestPermissions();
}
}

public boolean checkPermissions() {
Session s = Session.getActiveSession();
if (s != null) {
return s.getPermissions().contains("publish_actions");
} else
return false;
}

public void requestPermissions() {
Session s = Session.getActiveSession();
if (s != null)
s.requestNewPublishPermissions(new Session.NewPermissionsRequest(
this, PERMISSIONS));
}

@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
// buttonsEnabled(Session.getActiveSession().isOpened());
}

@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}

@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
// Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
// if (Session.getActiveSession() != null || Session.getActiveSession().isOpened()){
// Intent i = new Intent(MainActivity.this,nextscreen.class);
// startActivity(i);
// }



}


@Override
public void onSaveInstanceState(Bundle savedState) {
super.onSaveInstanceState(savedState);
uiHelper.onSaveInstanceState(savedState);
}

}

if (state.isOpened()) 方法中应用 Activity(intent) 后,它会在登录页面上返回一段时间的注销按钮,然后自己跳转到一个新 Activity 。但我不想要这样。我想返回一个带有注销按钮的新 Activity ,并且不想再次显示登录页面,并且在单击新 Activity 上的注销按钮时,我想要登录页面。

最佳答案

如果您成功登录,则有 Facebook 登录按钮。它将把措辞从“登录 Facebook”更改为“注销”。如果您不想看到它,只需将 Visibility GONE 或 Intent 设置为所需的 Activity 即可。如果您使用 Intent ,请设置如下标志

Intent next = new Intent(getApplicationContext(), MenuActivity.class);
next.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(next);

下面是facebook登录按钮的例子

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), (object, response) -> {
// hide this facebook login button
// Intent to your desired activity

});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,birthday,gender,first_name,last_name");
request.setParameters(parameters);
request.executeAsync();
}

@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), Message.LOGINCANCEL, Toast.LENGTH_SHORT).show();
}

@Override
public void onError(FacebookException e) {
Toast.makeText(getApplicationContext(), Message.LOGINFAILED, Toast.LENGTH_SHORT).show();
}
});

如果您想将 Facebook 的“注销”按钮更改为“登录 Facebook”,请使用以下代码。只需创建 BUTton 并执行 onClick() 即可触发以下代码

if (AccessToken.getCurrentAccessToken() != null && com.facebook.Profile.getCurrentProfile() != null){
LoginManager.getInstance().logOut();
}

关于java - 如何在 Android Facebook 应用程序成功登录后启动新 Activity 并 Conceal 登录页面并在新页面上获取注销按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27633388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com