如何使用深层链接恢复Android应用程序而又不丢失活动堆栈(或应用程序状态)?

回声

我有这样一个问题<intent-filter>:每次按下某些链接时,它都会打开我的应用程序,但问题是它会打开我的应用程序实例。无论如何,是否有触发onResume()并仅恢复我的应用程序而不会丢失其状态或活动堆栈的信息?

这是意图过滤器:

        <intent-filter>
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:host="example.com" />
            <data android:pathPattern="/.*" />

            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>

更新

感谢用户David Wasser在下面的回答,我找到了答案:

因此,我创建了EntryActivity,它在gmail / inbox应用程序的顶部启动:

public class EntryActivity extends Activity {

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

        Uri uriParams = getIntent().getData();

        Log.e("EntryActivity", uriParams.getHost() );
        Log.e("EntryActivity", uriParams.getQueryParameter("uid") + " " + uriParams.getQueryParameter("type") + " " + uriParams.getQueryParameter("token") );


        Intent startCategory = new Intent(this, GotEmailActivity.class);
        startCategory.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(startCategory);
        this.finish();
    }

}

然后,当我在GotEmailActivity中打开我的应用程序时,我会向用户发送带有打开应用程序链接的电子邮件,并且GotEmailActivityandroid:launchMode="singleTop"在AndroidManifest中具有属性,因此仅打开了1个实例:

    <!-- 
        Important: notice android:launchMode="singleTop"
        which seeks if an instance of this activity is already opened and
        resumes already opened instance, if not it opens new instance.
     -->
    <activity
        android:name=".presenters.register.email.GotEmailActivity"
        android:label="@string/title_activity_got_email"
        android:launchMode="singleTop" 
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >

现在发生的事情是,EntryActivity在Gmail应用程序的顶部打开了,但它会立即关闭,但首先启动已经打开的GotEmailActivity,因此属性launchMode Singletop阻止了此类活动的新实例。

大卫·水

Activity响应时,应该创建另一个用作应用程序入口点的应用程序<intent-filter>像这样:

您需要的只是一个简单的活动,什么也不做。这是一个例子:

public class EntryActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Check to see if this Activity is the root activity
        if (isTaskRoot()) {
            // This Activity is the only Activity, so
            //  the app wasn't running. So start the app from the
            //  beginning (redirect to MainActivity)
            Intent mainIntent = getIntent(); // Copy the Intent used to launch me
            // Launch the real root Activity (launch Intent)
            mainIntent.setClass(this, MainActivity.class);
            // I'm done now, so finish()
            startActivity(mainIntent);
            finish();
        } else {
            // App was already running, so just finish, which will drop the user
            //  in to the activity that was at the top of the task stack
            finish();
        }
    }
}

将您的<intent-filter>活动而不是“发布者”活动。确保清单中此活动的任务亲和力与应用程序中其他活动的任务亲和力相同(默认情况下,如果您未显式设置android:taskAffinity,则为)。

<intent-filter>被触发,如果你的应用程序正在运行,那么EntryActivity将开始在上面的应用程序的任务,最上面的活动和任务将被带到前台。EntryActivity完成后,它会简单地返回用户最上面的活动在您的应用程序(即:无论用户在哪里离开它,当它走进背景)。

如果您的应用未运行,则EntryActivity识别出该错误并从头开始启动您的应用,并将Intent触发的ACTION和DATA传递给它<intent-filter>

应该管用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android应用程序的深层链接

来自分类Dev

Android应用程序中的深层链接

来自分类Dev

维护android应用程序活动的堆栈

来自分类Dev

如何将我的应用程序从一页重定向到另一页而又不丢失我在android中的ID和密码

来自分类Dev

Android应用程序链接活动

来自分类Dev

如何轻松地访问喜爱的应用程序而又不会过多地启动程序?

来自分类Dev

Facebook在Android应用程序参与度活动上进行深层链接

来自分类Dev

多个Android深层链接,应用程序进入onResume()

来自分类Dev

如何在应用程序中创建深层链接?

来自分类Dev

如何在整个应用程序中使用PHP类,而又不影响过多的开销性能

来自分类Dev

使用 java 运行深层链接以打开应用程序

来自分类Dev

恢复应用程序时,初始屏幕活动被忽略-Android

来自分类Dev

Android使用whatsapp共享深层链接网址,并在单击深层链接时打开我的应用程序

来自分类Dev

如何在Android应用程序的WebView中启用深层链接?

来自分类Dev

当需要恢复应用程序的状态时,使用哪种模式?

来自分类Dev

如何检测应用程序是否在Mac应用程序中处于非活动状态

来自分类Dev

我如何在Visual Studio中的模拟器上测试应用程序而又不将应用程序的项目包括在解决方案中?

来自分类Dev

android的应用程序屏幕如何恢复正在运行的活动?

来自分类Dev

Android:如何从应用程序外部确定活动是开始还是恢复(进入前台)

来自分类Dev

如何使用默认的后退按钮以及将活动添加到Android应用程序中的堆栈

来自分类Dev

深层链接和多个应用程序实例

来自分类Dev

从Chrome到本机应用程序的深层链接

来自分类Dev

为多个应用程序创建深层链接

来自分类Dev

在电子应用程序中实现延迟的深层链接

来自分类Dev

无法识别到 macOS 应用程序的深层链接

来自分类Dev

确定应用程序是否支持深层链接

来自分类Dev

我的应用程序中的深层链接问题

来自分类Dev

实施与我的应用程序的深层链接后,应用程序图标未出现

来自分类Dev

如何在Android中安装已安装的应用程序,而又没有系统应用程序?

Related 相关文章

  1. 1

    Android应用程序的深层链接

  2. 2

    Android应用程序中的深层链接

  3. 3

    维护android应用程序活动的堆栈

  4. 4

    如何将我的应用程序从一页重定向到另一页而又不丢失我在android中的ID和密码

  5. 5

    Android应用程序链接活动

  6. 6

    如何轻松地访问喜爱的应用程序而又不会过多地启动程序?

  7. 7

    Facebook在Android应用程序参与度活动上进行深层链接

  8. 8

    多个Android深层链接,应用程序进入onResume()

  9. 9

    如何在应用程序中创建深层链接?

  10. 10

    如何在整个应用程序中使用PHP类,而又不影响过多的开销性能

  11. 11

    使用 java 运行深层链接以打开应用程序

  12. 12

    恢复应用程序时,初始屏幕活动被忽略-Android

  13. 13

    Android使用whatsapp共享深层链接网址,并在单击深层链接时打开我的应用程序

  14. 14

    如何在Android应用程序的WebView中启用深层链接?

  15. 15

    当需要恢复应用程序的状态时,使用哪种模式?

  16. 16

    如何检测应用程序是否在Mac应用程序中处于非活动状态

  17. 17

    我如何在Visual Studio中的模拟器上测试应用程序而又不将应用程序的项目包括在解决方案中?

  18. 18

    android的应用程序屏幕如何恢复正在运行的活动?

  19. 19

    Android:如何从应用程序外部确定活动是开始还是恢复(进入前台)

  20. 20

    如何使用默认的后退按钮以及将活动添加到Android应用程序中的堆栈

  21. 21

    深层链接和多个应用程序实例

  22. 22

    从Chrome到本机应用程序的深层链接

  23. 23

    为多个应用程序创建深层链接

  24. 24

    在电子应用程序中实现延迟的深层链接

  25. 25

    无法识别到 macOS 应用程序的深层链接

  26. 26

    确定应用程序是否支持深层链接

  27. 27

    我的应用程序中的深层链接问题

  28. 28

    实施与我的应用程序的深层链接后,应用程序图标未出现

  29. 29

    如何在Android中安装已安装的应用程序,而又没有系统应用程序?

热门标签

归档