Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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
验证Twitter应用程序是否已登录Android_Android_Android Intent_Android Twitter - Fatal编程技术网

验证Twitter应用程序是否已登录Android

验证Twitter应用程序是否已登录Android,android,android-intent,android-twitter,Android,Android Intent,Android Twitter,我正在开发的应用程序启动了官方的twitter应用程序new post屏幕,用户可以发布一条tweet,并在意图中添加一些额外的文本。我已经很好地工作了,但是如果用户没有使用twitter应用程序登录,事情会变得有点混乱。应用程序启动,但用户必须登录,一旦用户登录后,会显示正常的twitter屏幕,如果他们使用“后退”按钮返回到我的应用程序,新的帖子屏幕实际上会在点击twitter提要屏幕后出现 在尝试运行intent之前,是否有任何方法可以检查用户是否实际登录到twitter应用程序?尝试此函

我正在开发的应用程序启动了官方的twitter应用程序new post屏幕,用户可以发布一条tweet,并在意图中添加一些额外的文本。我已经很好地工作了,但是如果用户没有使用twitter应用程序登录,事情会变得有点混乱。应用程序启动,但用户必须登录,一旦用户登录后,会显示正常的twitter屏幕,如果他们使用“后退”按钮返回到我的应用程序,新的帖子屏幕实际上会在点击twitter提要屏幕后出现


在尝试运行intent之前,是否有任何方法可以检查用户是否实际登录到twitter应用程序?

尝试此函数,该函数将返回true或false

True:已登录
错误:未登录

twitter.getAuthorization()
函数将在未登录时向您抛出一个错误,通过处理该错误,您可以找到用户以前是否登录过

public static boolean isAuthenticated(SharedPreferences prefs) {

      String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
      String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");

      AccessToken a = new AccessToken(token,secret);
      Twitter twitter = new TwitterFactory().getInstance();
      twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);


      try {
      twitter.getAuthorization();
      return true;
      } catch (Exception e) {
      return false;
      }
}

我认为这是Twitter应用程序内部的问题,你不能测试它

另一方面,您可以通过“不再显示此对话框”复选框为用户提供一个对话框,警告用户此问题,这样他就可以得到建议,并可以永远关闭该对话框。您甚至可以在此对话框中提供在Twitter应用程序内进行身份验证的说明。

我正在使用twitter4j lib。 在这里我检查用户名。如果用户名为空,则没有用户登录,否则我将获得用户名。此用户名在我存储在共享首选项中的访问令牌中可用

username=mySession.getUsername()

username=(username.equals(“”)?“未登录”:用户名

mySession的代码:-

public class  MySession {
    private SharedPreferences sharedPref;
    private Editor editor;

    private static final String TWEET_AUTH_KEY = "auth_key";
    private static final String TWEET_AUTH_SECRET_KEY = "auth_secret_key";
    private static final String TWEET_USER_NAME = "user_name";
    private static final String SHARED = "Twitter_Preferences";

    public TwitterSession(Context context) {
        sharedPref = context.getSharedPreferences(SHARED, Context.MODE_PRIVATE);
        editor = sharedPref.edit();
    }

    public void storeAccessToken(AccessToken accessToken, String username) {
        editor.putString(TWEET_AUTH_KEY, accessToken.getToken());
        editor.putString(TWEET_AUTH_SECRET_KEY, accessToken.getTokenSecret());
        editor.putString(TWEET_USER_NAME, username);
        editor.commit();
    }

    public void resetAccessToken() {
        editor.putString(TWEET_AUTH_KEY, null);
        editor.putString(TWEET_AUTH_SECRET_KEY, null);
        editor.putString(TWEET_USER_NAME, null);

        editor.commit();
    }

    public String getUsername() {
        return sharedPref.getString(TWEET_USER_NAME, "");
    }

    public AccessToken getAccessToken() {
        String token = sharedPref.getString(TWEET_AUTH_KEY, null);
        String tokenSecret = sharedPref.getString(TWEET_AUTH_SECRET_KEY, null);

        if (token != null && tokenSecret != null)
            return new AccessToken(token, tokenSecret);
        else
            return null;
    }
}

希望这将对您有所帮助。

只需在您的活动中的oncreate()中添加这些行即可

final Session activeSession = Twitter.getInstance().core.getSessionManager().getActiveSession();

if (activeSession != null){
           //do someting
        }

这个问题清楚地表明它打开了官方应用程序。它没有使用twitter api。我相信这是twitter应用程序中的一个bug。新的post屏幕应在成功登录后出现(基于收到的初始意图)。