【问题标题】:Check if there is an app listening to my intent检查是否有应用程序在监听我的意图
【发布时间】:2021-11-13 01:32:00
【问题描述】:

如何知道我要发布的意图是否会提前得到答复?

构建意图后,我尝试了这个,但不起作用:

Intent fc = ....
                
PackageManager manager = context.getPackageManager();
List<ResolveInfo> list = manager.queryIntentActivities(fc, 0);            
startActivityForResult(fc, 1);

尽管 list 有 0 个元素,但该意图打开了一个应用程序。

【问题讨论】:

  • 您使用什么版本的 Android 进行测试?如果答案是 Android 11 或更高版本,您的清单中是否有 &lt;queries&gt; 元素来处理 the package visibility rules
  • Android 11。是的,你成功了。谢谢!

标签: android android-intent


【解决方案1】:

在 Android 11 及更高版本上,要在 PackageManager 上使用许多(大多数?)方法,您需要在清单中包含一个 &lt;queries&gt; 元素,以标识您想要通过以下方式查找的应用(或应用标准) PackageManager。如果没有 &lt;queries&gt; 元素,package visibility 规则会将结果限制为您自己的应用和某些系统应用。

【讨论】:

    【解决方案2】:

    或者,设置 MATCH_ALL 以防止对结果进行任何过滤

    public static final int MATCH_ALL = 131072;

    还有更多的标志可以尝试。将 0 替换为其他。

    https://developer.android.com/reference/android/content/pm/PackageManager#queryIntentActivities(android.content.Intent,%20int)

    【讨论】:

    • 尝试了几个,特别是PackageManager.MATCH_ALL。没有工作。
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2015-01-15
    • 2014-04-26
    • 2011-04-12
    • 2016-12-27
    相关资源
    最近更新 更多