我正在尝试在我的应用程序上实现 Facebook 的深度链接功能,并遇到了以下情况:
我有一个名为 MainActivity 的活动,其声明如下:
<activity
android:name="com.mypackage.android.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
此活动 + 我的包名称也在 Facebook 开发者网站上我的应用程序设置中声明。
一旦 Facebook 应用程序上的链接被点击,我就应该通过 Activity 的 onCreate 方法处理此事件。
以下代码处理该事件:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Uri target = getIntent().getData();
if (target != null){
// got here via Facebook deep link
// once I'm done parsing the URI and deciding
// which part of my app I should point the client to
// I fire an intent for a new activity and
// call finish() the current activity (MainActivity)
}else{
// activity was created in a normal fashion
}
}
一切都按计划进行,除了以下情况:
- 用户启动了我的应用程序
- 主活动已创建
- 次要活动已创建
- 主要活动完成
- 应用程序通过设备主页按钮进入后台
- Facebook 应用程序上的深层链接被点击
在这种情况下,我的应用程序再次进入前台,但 MainActivity 的 onCreate / onNewIntent
不要被调用,而是 SecondActivity 的 onResume() 被调用并恢复到它的状态
最后的状态。
注意:我已经在运行 Android 4.2.1 的 Samsung Nexus 上测试了此问题并得到了此结果,但在运行 Android 2.3.5 的 Galaxy S1 上测试时,它的工作原理与我最初的预期相同。
任何帮助将不胜感激,
谢谢。
Facebook 通过显式启动您的“MainActivity”(您在开发者页面中提供的)来从他们自己的应用程序启动您的应用程序。
Android 的默认行为是:如果应用程序已经运行,则再次调用startActivity()
不会从头开始新任务,但是只将已经运行的任务恢复到前台。
但好消息是,您可以通过将以下内容添加到 MainActivity 来更改此默认行为android:launchMode="singleTask"
。它的定义是:
系统创建一个新任务并在新任务的根实例化活动。但是,如果单独任务中已存在该活动的实例,系统将通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建新实例。一次只能存在一个活动实例。
从这一点开始,您始终可以响应起始意图,并且从那时起,您始终可以通过使用两个标志重新启动活动来导航回已经在后台的任务(如果存在)Intent.FLAG_ACTIVITY_SINGLE_TOP
&&Intent.FLAG_ACTIVITY_CLEAR_TOP
组合
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)