0

我正在尝试通过 NFC 处理为特定域打开的 URI。

清单有:

<activity android:name="HistoryActivity"
        android:theme="@android:style/Theme.Light.NoTitleBar"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="https"
                android:host="mydomain.me"
                android:pathPrefix="/x" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http"
                android:host="mydomain.me"
                android:pathPrefix="/x" />
        </intent-filter>
    </activity>

onResume 和 onNewIntent 看起来像:

@Override
protected void onResume() {
    super.onResume();
    Intent intent = new Intent(this, this.getClass());
    //intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    this.handleNfcBeam(intent);
}

@Override
protected void onNewIntent(Intent intent) 
{
    setIntent(intent);

    this.handleNfcBeam(intent);
}

和 handleNfcBeam 看起来像:

protected boolean handleNfcBeam(Intent intent)
{
    String action = intent.getAction();

    if (action != null &&
            action.equalsIgnoreCase("android.nfc.action.NDEF_DISCOVERED"))
    {

        return true; // todo: process URL
    }

    return false;
}

当我发送正确的 URL 时,应用程序正在启动。但是,动作总是无效的!

我还没有达到可以实际处理消息的地步......

我究竟做错了什么?

谢谢,丹尼尔

4

1 回答 1

0

您可以在 的两行中的每一行上放置一个断点,this.handleNfcBeam(intent);以查看您的意图来自哪条路线。然后检查意图数据以查看您收到的意图类型。

您的标签是否包含具有正确内容的 NDEF 消息,与您在清单中的定义相匹配?当您定义 scheme、host 和 pathPrefix 时,必须满足这三个条件才能触发 Intent。

于 2013-04-18T15:02:36.817 回答