Android <intent-filter>适用于<activity>但不适用于<receiver> </receiver> </activity> </intent-filter>

时间:2014-12-29 18:23:46

标签: android android-intent intentfilter android-broadcast

我有Activity<intent-filter>个标记:

<activity
    android:name=".NFCActivity"
    android:label="@string/title_activity_nfc" >

    <intent-filter>
        <action android:name="android.nfc.action.TRANSACTION_DETECTED" />

        <category android:name="android.intent.category.DEFAULT" />

        <data
            android:host="secure"
            android:pathPrefix="/a000000004"
            android:port="0"
            android:scheme="nfc" />
    </intent-filter>

    <intent-filter>
        <action android:name="com.gsma.services.nfc.action.TRANSACTION_EVENT" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:scheme="nfc" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.gsma.services.nfc.action.TRANSACTION_EVENT" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

</activity>

这可以按预期工作,活动在检测到交易时启动。

使用BroadcastReceiver时,不能说同样的事情,不会调用onReceive方法:

<receiver
        android:name="carta.NfcReceiver"
        android:enabled="true" >

    <intent-filter>
        <action android:name="android.nfc.action.TRANSACTION_DETECTED" />

        <category android:name="android.intent.category.DEFAULT" />

        <data
            android:host="secure"
            android:pathPrefix="/a000000004"
            android:port="0"
            android:scheme="nfc" />
    </intent-filter>

    <intent-filter>
        <action android:name="com.gsma.services.nfc.action.TRANSACTION_EVENT" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:scheme="nfc" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.gsma.services.nfc.action.TRANSACTION_EVENT" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

</receiver>
我错过了什么吗?

由于

1 个答案:

答案 0 :(得分:1)

  

在使用BroadcastReceiver时,不能说同样的事情,不会调用onReceive方法:

这是因为startActivity()startActivityForResult()中的其他一些流程正在使用这些操作。您无法使用startActivity()回复startActivityForResult()BroadcastReceiver