从后台线程将Android活动带到前面

时间:2011-10-18 02:27:36

标签: android multithreading android-activity foreground

我有一个通过Intent启动系统浏览器的活动。在它做之前我做了一个HTTP GET到其他URL。一旦用户在浏览器中完成任务(使用OAuth登录),就会立即回答此GET。

我希望能够关闭浏览器和/或将应用程序的活动恢复到最前面。

我不想使用WebView,因为我想避免让我觉得我可能会试图监视密码。

知道如何解决这个问题吗?它有可能吗?

非常感谢!

丹尼尔

2 个答案:

答案 0 :(得分:1)

确保OAuth打开类似于yourapp:// success

的网址

接下来,添加一个intent过滤器来处理此自定义协议和地址。更多详情请见http://developer.android.com/guide/topics/intents/intents-filters.html#ifs

答案 1 :(得分:1)

这就是我项目中的诀窍。

应用程序清单非常标准:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

这是后台线程的代码片段,它发送重新显示活动的意图:

public class AlarmThread extends Thread {

    private int mSleepTime;

    public AlarmThread(int sleepSeconds) {
        super("AlarmThread");
        mSleepTime = sleepSeconds * 1000;
    }
    @Override
    public void run() {
        Log.i("thread", "started sleeping for " + mSleepTime + " milliseconds");
        try {
            Thread.sleep(mSleepTime);
        } catch (InterruptedException e) {
            // ignored
        }
        Log.i("thread", "creating intent to bring activity to foreground");
        Intent intent = new Intent(MainActivity.getContext(), MainActivity.class);
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        MainActivity.getContext().getApplicationContext().startActivity(intent);
    }
}

请注意,诀窍在MainActivity.getContext().getApplicationContext().startActivity(intent);部分(上一行)。

在MainActivity中,我添加了getContext方法:

public static Context getContext() {
    return mInstance;
}

成员'mInstance'在'onCreate'中设置:

private static MainActivity mInstance = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Other code....

    mInstance = this;
}