【问题标题】:Does setting the package name make an implicit intent explicit?设置包名称是否会显式隐含意图?
【发布时间】:2019-06-29 12:55:20
【问题描述】:

如果没有第三行代码,意图将是隐含的。设置包是否使其明确?未指定组件,因此基于Stack Overflow answers:它是隐式的...

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage("com.example.app");
startActivity(intent);

...但是提供了目标应用的包名,所以它是明确的,基于docs:

显式意图指定哪个应用程序将满足该意图,通过 提供目标应用的包名或完全限定的 组件类名。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    显式意味着定义的应用程序(也称为包)应该处理意图。

    当您设置应该处理意图的包时,是的,它会使其明确。

    加法

    我将definition of explicit 考虑在内,这意味着操作已定义。

    充分、清楚地表达或证明;没有留下任何暗示;明确:

    然后如果检查 setPackage docs 它说

    (通常可选)设置一个显式应用程序包名称,以限制此 Intent 将解析到的组件。如果保留默认值 null,则将考虑所有应用程序中的所有组件。如果非空,则 Intent 只能匹配给定应用程序包中的组件。

    所以这就是如何理解ImplicitExplicit这两个术语。

    对我来说(根据我对 android 文档的理解),隐式是

    嘿,我想分享这张很棒的图片,让我们把它送给全世界

    打开 facebook、instagram、whatsapp 等选择器。

    而显式是

    嘿,我想与 Instagram 分享这张很棒的图片,请打开它并分享图片

    仅打开 instagram(按包)。

    【讨论】:

    • 人们似乎不同意这一点。见this。目前,包含更严格定义的答案有 170 个赞成票,即明确表示已定义的组件应处理意图。更不用说其他相关问题了……
    • @TamásBolvári 用我的看法更新了答案
    • 如果没有提供特定的组件,那么它只是暗示的,所以“不留下任何东西只是暗示”不是这种情况。如果显式类别或显式操作没有使隐式意图显式,为什么显式包名称?与显式意图的定义相反,显式的定义是明确的。 developer.android.com 上应有明确的显式意图定义,且信息不得相互矛盾。
    • 顺便问一下这个问题的想法是什么?我的意思是你需要确切的定义是什么?
    • 我希望能够确定意图的类型,因为平台的行为取决于它。在my previous question 中,我使用与此问题相同的意图,有人建议将默认类别添加到目标应用程序的清单中,以使我的“implicit”意图工作,即使我的意图是明确的the definition of developer.android.com(“...提供目标应用的包名或...”)。
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多