如何将 Android 意图传递给除了我自己的应用程序之外的任何人?

2023-11-21

我有一个特定的意图(NDEF_DISCOVERED),其中一些我无法正确处理,所以我想将它们重定向到 android 的默认 nfc 处理程序。

所以我采取了意图,setComponent(null), 进而startActivity(intent)

但是..它总是以无限循环的意图抛出返回到我的应用程序。

有没有办法可以向除我的应用程序之外的任何人发送意图?或者将其发送到 android 默认的 nfc 处理程序?

编辑: 因此,我使用 vikram 的答案来查询包管理器是否有可能的活动来处理我的意图,然后循环并找到具有最高优先级的活动(不是我)并向他们发送明确的意图。


在这种情况下,自定义选择器对话框/弹出窗口将更适合您。不要启动意图,而是使用PackageManager to queryIntentActivities(Intent, int)。来自List<ResolveInfo> that queryIntentActivities(Intent, int)返回,使用过滤掉您自己的应用程序packageName:

String packageName = "";
for(ResolveInfo resInfo : resolvedInfoList) {

    packageName = resInfo.activityInfo.applicationInfo.packageName;

    // Exclude `packageName` from the dialog/popup that you show

}

Edit 1:

以下代码将创建并显示一个PopupWindow每当showList()叫做。用于返回的xml布局文件popupView只包含一个LinearLayout(R.layout.some_popup_view):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/llPopup"
    android:orientation="vertical" >

</LinearLayout>

这段代码只是一个简单的演示。为了使它接近可用,您可能需要添加一个ListView带有一个自定义适配器PopupWindow。在里面OnClickListener为了ListView,您将检索用户单击的应用程序的包名称,并生成启动该活动的意图。截至目前,代码仅显示如何使用自定义选择器过滤出您自己的应用程序。在里面if阻止、替换"com.example.my.package.name"与您的应用程序的包名称。

public void showList() { 

    View popupView = getLayoutInflater().inflate(R.layout.some_popup_view, null);

    PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    LinearLayout llPopup = (LinearLayout) popupView.findViewById(R.id.llPopup);

    PackageManager pm = getPackageManager();

    Intent intent = new Intent();

    // In my case, NfcAdapter.ACTION_NDEF_DISCOVERED was not returning anything
    //intent.setAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
    intent.setAction(NfcAdapter.ACTION_TECH_DISCOVERED);

    List<ResolveInfo> resolvedInfoList = pm.queryIntentActivities(intent, 0);

    String packageName = "";

    for(ResolveInfo resInfo : resolvedInfoList) {

        packageName = resInfo.activityInfo.applicationInfo.packageName;

        // Exclude `packageName` from the dialog/popup that you show
        if (!packageName.equals("com.example.my.package.name")) {

            TextView tv = new TextView(this);

            tv.setText(packageName);

            llPopup.addView(tv);
        }            

    }

    popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Android 意图传递给除了我自己的应用程序之外的任何人? 的相关文章

随机推荐

  • Android Studio 无法启动

    安装Android Studio后 我启动了它 但它没有开始 我打开任务管理器看到多了两个执行顺序 Cmd exe and conhost exe 我的系统版本是Windows 7 Ultimate 64bit 有什么想法如何解决这个问题吗
  • 在 Web API / APIController 中控制序列化

    在 ASP NET Web API 中哪里可以指定自定义序列化 反序列化 我们应用程序的吞吐量需要消息的快速序列化 反序列化 因此我们需要严格控制这部分代码以使用我们的自制程序或 OSS 我检查了各种来源 例如this这解释了如何创建自定义
  • 当注释有参数时,CDI 拦截器不起作用

    我正在尝试实现一个 Restricted注释 以用户只有在登录并具有特定角色时才能访问它们的方式保护控制器方法 我在 Tomcat 7 上使用 JSF 和 CDI 所以没有 EJB 只要注释接口不指定任何参数 拦截器就会被调用 一旦我添加一
  • JAXB 文档注释

    我有以下带有 JAXB XMLRootElement 注释的 java 类 XmlRootElement name ClientData public class ClientData The first address field of
  • 由于内存问题导致realloc失败时如何处理?

    问题说明了一切 但这是一个例子 typedef struct mutable t int count max void data mutable t void pushMutable mutable t m void object if m
  • 将字符串中的一些小写字母更改为大写

    index 0 2 5 s I am like stackoverflow python for i in index s s i upper print s IndexError string index out of range 我知道
  • 使用 getopt 向命令行选项提供两个参数[重复]

    这个问题在这里已经有答案了 使用时是否有其他方法将两个参数作为单个字符串传递给选项getopt 通常我会执行以下操作 command o key value command arguments 然后我必须明确地分割参数字符串 while o
  • 如何获取ng-bootstrap中Dropdown的值?

    我正在使用 ng bootstrap 我想在选择时获取下拉列表的值 div class col text right div class d inline block div div
  • 如何从部分视图获取父视图

    我有一个部分视图作为 Layout cshtml 的一部分 以便它可以在多个页面上呈现 将部分视图视为显示在网站每个页面上的菜单 当单击部分视图菜单中的这些链接之一时 我只能在称为部分视图的操作方法中访问 查看 如它的名称等 但我真正需要的
  • 无法更改视图的默认布局边距

    从ios 8 0开始 视图有额外的layoutMargins默认情况下 每边都有 8 分值 当我尝试更改边距时viewDidLoad它似乎对孩子的看法没有影响 override func viewDidLoad super viewDidL
  • Python lambda函数打印 at 0x7fcbbc740668>而不是值

    我是 python 的初学者 我正在研究 lambda 函数 我正在编写一个程序 使用 lambda 函数来打印输入字符的 ascii 值 1 的字符 我的代码是 usr bin python import sys try word sys
  • NoClassDefFoundError:org/slf4j/Logger

    我将 Log4J2 添加到我的应用程序中 我将所有 Log4J2 jar 文件复制到 LIB 目录并创建 Log4J2 xml 文件来支持它 我的代码已更新以导入必要的日志管理器和记录器 API 然后 我添加了静态最终记录器方法 并在代码中
  • 什么时候可以捕获 NullPointerException?

    有效的java建议我们不应该catch NullPointerException 总是对的吗 在很多抓捕的情况下NullPointerException 仅捕获正文调用printStackTrace 如果我没抓住NullPointerExc
  • Azure管道根据条件设置任务的显示名称

    在构建管道中 我有一个使用 powershell 脚本的工作 该脚本根据如下变量设置应用程序名称 applicationName If configuration eq Release Appname Else Appname Test W
  • Plotly:如何设置 x 轴上时间序列的主要刻度/网格线的值?

    背景 这个问题与以下问题相关 但不完全相同 Plotly 如何检索主要刻度线和网格线的值 类似的问题也被问过但没有得到解答绘图库 here 如何将主要刻度显示为每月的第一天 将次要刻度显示为每天 情节太棒了 也许唯一困扰我的是刻度线 网格线
  • Android 上的 Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty

    我在 Android 2 2 1 上遇到以下异常 java lang NoSuchMethodError java lang String isEmpty 我正在打电话text isEmpty来自斯卡拉 任何想法 如何解决这个问题 java
  • HashicorpVault - 客户端向 HTTPS 服务器发送 HTTP 请求 - 准备探针

    目前存在一个问题 即部署 Vault Helm 图表时就绪探针失败 Vault 正在工作 但每当我描述 Pod 时都会出现此错误 我如何让探测器使用 HTTPS 而不是 HTTP 如果有人知道如何解决这个问题我会很高兴慢慢失去理智 Kube
  • 同时使用多个Spring PropertyPlaceholderConfigurer

    我有两个项目 其中一个 服务 包括第二个 核心 我在核心项目中定义了下面的 PropertyPlaceholderConfigurer
  • 为什么 C 语言中移位的优先级低于加法和减法?

    我有时在进行位操作时发现这很不方便 尽管我现在不记得任何具体的例子 我还发现它在概念上令人困惑 因为移位基本上是乘法和除以 2 的幂 我发现在 C 中使用 因为这就是 C 语言的作者所决定的 使用括号以避免混淆
  • 如何将 Android 意图传递给除了我自己的应用程序之外的任何人?

    我有一个特定的意图 NDEF DISCOVERED 其中一些我无法正确处理 所以我想将它们重定向到 android 的默认 nfc 处理程序 所以我采取了意图 setComponent null 进而startActivity intent