我正在使用库SocialLib向我的应用添加共享功能。我在使用oAuth回调时遇到了实际问题。

我创建了以下活动来处理共享:

import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import com.expertiseandroid.lib.sociallib.connectors.SocialNetworkHelper;
import com.expertiseandroid.lib.sociallib.connectors.TwitterConnector;
import com.expertiseandroid.lib.sociallib.exceptions.NotAuthentifiedException;

public class ShareActivity extends Activity {

    protected final static String TAG = "ShareActivity";
    private final Activity activity = this;

    public static final int SERVICE_TWITTER = 0;
    public static final int SERVICE_FACEBOOK = 1;
    public static final int SERVICE_LINKEDIN = 2;

    // twitter API
    protected static String TWITTER_KEY = "";
    protected static String TWITTER_SECRET = "";
    protected static String TWITTER_CALLBACK = "myapp://twitter";

    protected static String stringToShare = "Hello World";

    // connectors
    private static TwitterConnector twitter;

    /**
     * @see android.app.Activity#onCreate(Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle bundle = this.getIntent().getExtras();

        Uri uri = this.getIntent().getData();
        if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK)) {
            postTweet();
        }
        else {
            switch (bundle.getInt("service")) {

            case SERVICE_TWITTER:
                twitterAuth();
                break;

            default:
                break;
            }
        }
    }

    public void twitterAuth() {
      twitter = SocialNetworkHelper.createTwitterConnector(TWITTER_KEY, TWITTER_SECRET, TWITTER_CALLBACK);
    }

    public void postTweet() {
        twitter.authorize(activity);
        twitter.tweet(stringToShare);
        finish();
    }
}


我要从中共享的活动(MainActivity)中,我调用以下命令来启动ShareActivity:

Intent intent = new Intent(getApplicationContext(), ShareActivity.class);
intent.putExtra("service", ShareActivity.SERVICE_TWITTER);
startActivity(intent);


我正在使用一个Intent过滤器,以便Twitter(oAuth)可以回调到调用活动:

<activity android:name=".MainActivity" />
<activity android:name=".ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:host="twitter" android:scheme="lifetime"/>
    </intent-filter>
</activity>


流程:


使用单击MainActivity上的“共享”按钮。
我们用参数startActivity(intent)(ShareActivity)调用intent
ShareActivity.onCreate()被调用,我们开始Twitter oAuth身份验证过程。
显示网络浏览器活动,并且用户输入其Twitter凭据。
Twitter然后显示重定向回应用程序页面。
Twitter回调到URL myapp://twitter
触发了意图筛选器,从而创建并显示了一个新的ShareActivity活动实例。
然后,ShareActivity将Tweet发送到Twitter,并将Tweet成功发布到用户墙上。
然后,ShareActivity调用finish()


问题

一切工作到第9点为止。调用finish()不会返回到原始MainActivity,它只是关闭ShareActivity并返回到浏览器活动,显示“将您重定向到应用程序”页面。

如果用户单击“后退”按钮,他们将被带回所有Twitter身份验证页面,然后最终回到MainActivity。

应该发生什么

发布Tweet并完成ShareActivity后,原始MainActivity应该恢复为原始状态。

ShareLib正在处理所有身份验证和发布步骤,我无法控制它如何创建新活动。

当我创建ShareActivity时,我曾尝试发送Flag FLAG_ACTIVITY_NEW_TASK,其想法是它将创建一个新的活动堆栈,但我不知道如何关闭该堆栈中的所有活动并返回MainActivity。

任何帮助将非常感激。

最佳答案

启动活动步骤2时,请有意使用此标志-FLAG_ACTIVITY_NO_HISTORY

或尝试使用转发,则android示例here中提供了一个示例示例

10-04 14:30