我正在使用自定义方案为Fitbit实施OAuth,为此我要求在用户登录默认浏览器后从堆栈顶部使用调用Activity
的实例并重定向到CALLBACK网址。而不是onNewIntent()
被调用,Activity
只是重新创建,而不是我需要的。
<activity
android:name=".AppsAndDevicesActivity"
android:launchMode="singleTop">
<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:scheme="snbr" />
</intent-filter>
</activity>
我使用以下代码从Fragment打开浏览器:
String url = Fitbit.buildAuthenticationURL();
Log.d("URL", url);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
this.getActivity().startActivity(browserIntent);
答案 0 :(得分:6)
将launchmode用作 singleTask ,因为:
singleTask:
系统创建新任务并在新任务的根目录下实例化活动。 但是,如果活动的实例已存在于单独的任务中,则系统会通过调用其onNewIntent()方法将意图路由到现有实例,而不是创建新实例。只有一个活动的实例可以一次存在。
注意:虽然活动在新任务中开始,但“后退”按钮仍会将用户返回到上一个活动。