当前位置: 首页 > 知识库问答 >
问题:

启动模式被重写由谷歌文件应用程序共享时?强制执行单个活动的新实例?

燕和裕
2023-03-14

我有一个应用程序,是一个共享目标。它是一个单一的活动架构,清单中包含启动模式="unileWG"。

所有其他应用程序在向我的应用程序共享数据时,似乎都尊重这一点,因此,即使活动之前已打开,也会打开同一个实例。

然而,谷歌文件似乎总是强制我的活动的一个新实例,它总是停留在他们的任务中。

我调试了意图标志,但我不太聪明:

FLAG_ACTIVITY_FORWARD_RESULT|FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_PREVIOUS_IS_TOP|FLAG_GRANT_READ_URI_PERMISSION|FLAG_RECEIVER_FOREGROUND

我该如何预防这种情况?我不希望我的单个活动的实例超过1个。甚至没有启动chMode="SingleInstance"工作。

<activity
            android:name=".MainActivity"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustResize|stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>
        </activity>

共有1个答案

夔宏深
2023-03-14

我怎样才能防止这种情况?我不希望单个活动的实例超过1个。

您可以尝试检测标志是否丢失,或者您的活动是否不是任务根,然后启动一个新活动并杀死Google Files任务的一部分。像这样的东西:

@Override
protected void onCreate(Bundle state) {
    super.onCreate(state);
    setContentView(R.layout.main);

    if (!isTaskRoot()) { // Or check getIntent().getFlags() for SINGLE_INSTANCE
        Intent newIntent = new Intent(getIntent());
        newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(newIntent);
        finish();
    }
}

希望有帮助!

 类似资料:
  • 我正在用Google Apps脚本编写一个JavaScript工具来检查文档的一些属性,比如“所有链接是否有效”、“权限设置是否正确”等等。我正在使用中记录的APIhttps://developers.google.com/apps-script/reference/drive/drive-app通过ID查找文件,检查它们的权限,在GoogleDrive中找到它们,等等,但是我发现“共享驱动器”与

  • 我发现Android应用程序非常奇怪的错误,而在Android设备中安装应用程序时具有给定的流程。 > 已从Play商店(旧版)安装该应用程序。 启动应用程序(现在我在主屏幕上,即< code>HomeActivity)。 现在,我通过安装最新版本(正在生产版本,尚未发布到playstore)升级了应用程序。 单击启动器图标,等待主屏幕显示,然后按菜单按钮将应用程序置于后台。 现在,单击启动器图标

  • 我有一份spark流媒体工作,我正试图由spark-k8运营商提交。我始终保持重启策略。但是,手动删除驱动程序时,驱动程序不会重新启动。我的yaml: Spark版本:2.4.5 apiVersion:“sparkoperator.k8s.io/v1beta2” 我遵循的步骤: 通过kubectl apply-f示例/spark测试创建资源。亚马尔。Pod创建成功。手动删除驱动程序。 预期行为:将

  • 问题内容: 我使用JSP构建Web应用程序,并且在我的servlet中,我具有: 到现在为止,当JSP页面调用like时,我的serlvet都被调用了。我想要的是每当应用程序启动时也要执行的servlet。我可以在第一页上有一个类似“ START”的按钮,并在那里调用servlet。但是,我可以避免这种情况吗? 问题答案: 无论您想在启动时做什么,都应该由实现的类完成,因此您应该编写这样的类,例如

  • 我的的一个有一个奇怪的问题。我有一个,里面有三个。到现在为止一切正常。当应用程序启动时,(带有)附加了三个片段,这样我就可以毫无问题地从一个浏览到另一个。当我尝试像这样手动(注销后)重新启动应用程序时,问题就来了: 现在,当我注销和应用程序重新启动时,应用程序崩溃,并通过一个试图从片段上访问资源。 下面是我附加的代码,即: 然后,设置:

  • 问题内容: 我愿意在应用程序中添加一个按钮,单击该按钮将重新启动该应用程序。我搜索谷歌,但没有发现任何有用的,除了这一个。但是,此处遵循的过程违反了Java的WORA概念。 是否有其他以Java为中心的方法来实现此功能?是否可以只派生另一个副本然后退出? 提前致谢。我感谢您的帮助。 @deporter我已经尝试过您的解决方案,但是它不起作用:( @mKorbel我写的,采取的概念下面的代码,你曾在