Android 将安卓意向下传给另一个应用程序

Android 将安卓意向下传给另一个应用程序,android,android-intent,Android,Android Intent,有没有一种方法可以让一个应用程序接收到一个意图并将其“传递”到下一个应用程序 我的意图如下:我想让我的应用程序接收android.nfc.action.TAG\u DISCOVERED和android.nfc.action.TECH\u DISCOVERED意图,并检查它们的附加内容,以决定如何处理它们:要么在应用程序中触发一个动作,或者忽略其意图,将其交给可能感兴趣的任何其他应用程序 据我所知,IntentFilter只能处理Intent的操作、类别或数据,而不能处理其附加内容。因此,我必须确

有没有一种方法可以让一个应用程序接收到一个意图并将其“传递”到下一个应用程序

我的意图如下:我想让我的应用程序接收
android.nfc.action.TAG\u DISCOVERED
android.nfc.action.TECH\u DISCOVERED
意图,并检查它们的附加内容,以决定如何处理它们:要么在应用程序中触发一个动作,或者忽略其意图,将其交给可能感兴趣的任何其他应用程序

据我所知,
IntentFilter
只能处理Intent的操作、类别或数据,而不能处理其附加内容。因此,我必须确保我的应用程序得到所有的意图,但要与其他应用程序配合良好,我需要手动复制此功能

Android是否提供了一种方式让应用程序告诉它“我不会处理你发给我的意图,把它交给其他人”?如果没有,我能做什么?从我的应用程序重新发送意图

Android是否提供了一种方式让应用程序告诉它“我不会处理你发给我的意图,把它交给其他人”

没有

Android不允许您在意图进入其他应用程序之前“拦截”它们。如果是这样的话,你将陷入一种棘手的境地,即在其他应用程序出现泡沫之前,你要先决定哪些应用程序应该获得目的

如果没有,我能做什么?从我的应用程序重新发送意图

对于广播目的,您不必做任何事情。每个注册了收听fo广播的
意图过滤器的应用程序都将接收广播

其他仅交付给单个应用程序的意图-这些意图启动活动或服务。如果对哪个应用程序应该接收其中一个意图(即多个应用程序注册与意图匹配的意图过滤器)存在任何歧义,Android将显示消歧UI,要求用户选择他们想要使用的应用程序

android.nfc.action.TAG_DISCOVERED
android.nfc.action.TECH_DISCOVERED
属于后者(根据),因此只有一个应用程序能够接收这些事件,用户可能会被要求选择要使用的应用程序

Android是否提供了一种方式让应用程序告诉它“我不会处理你发给我的意图,把它交给其他人”

没有

Android不允许您在意图进入其他应用程序之前“拦截”它们。如果是这样的话,你将陷入一种棘手的境地,即在其他应用程序出现泡沫之前,你要先决定哪些应用程序应该获得目的

如果没有,我能做什么?从我的应用程序重新发送意图

对于广播目的,您不必做任何事情。每个注册了收听fo广播的
意图过滤器的应用程序都将接收广播

其他仅交付给单个应用程序的意图-这些意图启动活动或服务。如果对哪个应用程序应该接收其中一个意图(即多个应用程序注册与意图匹配的意图过滤器)存在任何歧义,Android将显示消歧UI,要求用户选择他们想要使用的应用程序


android.nfc.action.TAG_DISCOVERED
android.nfc.action.TECH_DISCOVERED
属于后者(根据),因此只有一个应用程序能够接收这些事件,用户可能会被要求选择要使用的应用程序。

在对该主题进行进一步研究后,看来要做到这一点并不容易

Android中的
Intent
可以发送到三个不同的收件人类别。发送
Intent
时会进行此选择,并且只有匹配收件人类的实例才会接收
Intent
。行为因收件人类别和发送
意图所调用的方法而异。有关详细信息,请参阅

  • 如果使用了
    startActivity()
    startActivityForResult()
    方法,则收件人是
    活动
    。只有一个
    活动
    将收到该意图。如果有多个
    活动
    具有匹配的
    意向过滤器
    ,则通常会显示一个选择器对话框,以便用户进行选择。选择器对话框依次由另一个
    Intent
    触发,其中
    android.Intent.action.chooser
    作为其操作,充当原始
    Intent
    的包装器

  • 如果使用
    startService()
    bindService()
    方法,则
    服务将收到
    意图。强烈建议(甚至从API 21开始强制执行
    bindService()
    )仅在明确的意图上使用这些方法,这些意图唯一地标识了它们的组件。否则Android会随机选择一个匹配的服务,而应用程序开发者无法控制这个选择

  • 如果使用了
    sendBroadcast()
    sendorderdbroadcast()
    或(现在已弃用)
    sendStickyBroadcast()
    方法,则
    BroadcastReceiver
    将接收该意图。使用
    sendBroadcast()
    时,
    Intent
    将以随机顺序发送给所有匹配的接收器。使用
    sendOrderedBroadcast()
    ,收件人将一次发送一个广播。注册一个
    广播接收器
    后,应用程序可以为其
    意向过滤器设置优先级
    ,优先级较高的用户首先获得
    意向。在这种特殊情况下,队列中的任何
    BroadcastReceiver
    都可以在接收到
    Intent
    时调用
    abortBroadcast()
    ,以防止其传播到优先级较低的收件人

现在,正如其他人所指出的,
android.nfc.action.TAG\u DISCOVERED
android.nfc.action.TECH\u DISCOVERED
startActivity()一起发送(或