当前位置: 首页 > 面试题库 >

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

汪典
2023-03-14
问题内容

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

因此,我打算这样做setComponent(null),然后startActivity(intent)

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

有什么方法可以向我的应用以外的任何人发送意图?还是将其发送到android的默认nfc处理程序?

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


问题答案:

在这种情况下,自定义选择器对话框/弹出窗口将更好。与其启动意图,不如使用PackageManagerto
queryIntentActivities(Intent, int)。从List<ResolveInfo>那个queryIntentActivities(Intent, int)回报,筛选出自己的应用程序使用packageName

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

    packageName = resInfo.activityInfo.applicationInfo.packageName;

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

}

编辑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。在OnClickListenerListView中,您将检索用户点击应用程序的包名,并生成一个意图启动该活动。到目前为止,该代码仅显示如何使用自定义选择器过滤掉自己的应用程序。在代码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);
}


 类似资料:
  • 问题内容: 我试图将URI对象传递给我的Intent,以便在另一个活动中使用该URI。 如何传递URI? 现在如何在其他活动中使用此URI? 感谢你们 问题答案: 您可以将uri存储为字符串 然后像这样将字符串转换回uri

  • 我正在开发一个Android应用程序,它使用两个单例对象:一个用于业务逻辑(类似于MVC中的模型),另一个用于蓝牙连接。一些活动显示数据并需要访问前者,而一个活动允许用户连接/断开连接并需要访问后者。 传递这些对象的首选方式是什么?活动的论据?全局对象?

  • 问题内容: 我想将我域的任意对象(例如Person)作为参数传递给.jrxml。 在.jrxml上执行以下操作: 这样的事情可能吗?在哪里可以找到更复杂的教程,这些教程不仅显示传递java.lang.String的内容,还显示更多的内容? 谢谢 问题答案: 是的,您可以传递任何Java对象,但应确保将其导入JRXML。 在jasperReport标记内。您可以使用标记,例如: 但是,您可以使用对象

  • 问题内容: 我有2张桌子: : 和: 如何在用户表中保持 NULL ? 我只写1条查询,我的查询是: 这里可以从前端空。 表格将由我默认设置。 在前端,学生将选择大学名称,根据该名称将传递到表格,但是如果学生未选择任何大学名称,则应将null值传递给表格中的字段。 问题答案: 只允许表的一列允许值,这样您就可以保存 null 。 更新1 根据您的评论,您应该插入而不是。 更新2 作为一个旁注,查询

  • 我想通过SSL连接到我的服务器。因此,我使用以下命令在服务器上生成证书: 如果我使用如下所示的TrustManager信任客户端上的所有证书,则连接可以正常工作: 但我当然不想相信所有的证书,而只相信我的证书。我尝试了以下几个命令来导入证书: 我要怎么做才能让它正常工作?有人能解释一下对一个不是很熟悉cryto领域的人所必需的步骤吗? 编辑:正如Donal Fellows所建议的那样,我尝试了自定

  • 问题内容: 假设我有一些功能,: 现在,如果我有一个字典,例如,我可以调用并打印结果。 但是,假设我有一本字典。如果我打电话给我 很公平。但是,无论如何,在其定义或调用中,是否要告诉Python仅忽略不是参数名称的任何键?最好是一种可以指定默认值的方法。 问题答案: 作为@Bas发布答案的扩展,我建议将kwargs参数(可变长度关键字参数)添加为函数的第二个参数 这一定足以满足 只忽略不是参数名称