我有一个通过 Intent 启动系统浏览器的活动。在此之前不久,我对其他 URL 进行了 HTTP GET。一旦用户在浏览器中完成任务(使用 OAuth 登录),该 GET 将立即得到答复。
我希望能够关闭浏览器和/或让我的应用程序的活动回到前面。
我不想使用 WebView,因为我想避免我可能试图监视密码的看法。
知道如何解决这个问题吗?有可能吗?
非常感谢!
丹尼尔
我有一个通过 Intent 启动系统浏览器的活动。在此之前不久,我对其他 URL 进行了 HTTP GET。一旦用户在浏览器中完成任务(使用 OAuth 登录),该 GET 将立即得到答复。
我希望能够关闭浏览器和/或让我的应用程序的活动回到前面。
我不想使用 WebView,因为我想避免我可能试图监视密码的看法。
知道如何解决这个问题吗?有可能吗?
非常感谢!
丹尼尔
确保 OAuth 打开类似于 yourapp://success 的 URL
接下来,您添加一个意图过滤器来处理此自定义协议和地址。更多细节在http://developer.android.com/guide/topics/intents/intents-filters.html#ifs
这就是我的项目中的诀窍。
应用程序清单非常标准:
<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;
}