假NFC(近场通信)发布的可能性

Ven*_*nky 5 android nfc android-intent android-activity

我正致力于近场通信,用于从NFC标签读取数据.我没有支持NFC的Android Mobile和NFC Tags来测试我创建的应用程序.

我想知道是否可以通过意图过滤器启动我的应用程序(应该假设从我的设备检测到NFC标签)

我的清单片段:

 <activity
        android:name=".ServerActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />

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

            <data
                android:host="abc.com"
                android:pathPrefix="/aaap"
                android:scheme="http" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

我的活动片段:

@Override
protected void onNewIntent(Intent intent) {
    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
        Toast.makeText(getApplicationContext(), "ACTION_TAG_DISCOVERED",
                Toast.LENGTH_LONG);
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ven*_*nky 1

经过对 NFC 的一些研究,我发现我们可以在没有支持 NFC 的设备的情况下读取/写入 NFC 标签。但答案很简单。只不过是玩 Intents 而已:

我们必须调用此代码片段来调用 NFC :

    final Intent intent = new Intent(NfcAdapter.ACTION_TAG_DISCOVERED);
    intent.putExtra(NfcAdapter.EXTRA_NDEF_MESSAGES, "Custom Messages");
    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

另外,我们应该通过 Manifest 文件将 Activity 注册到 Android 系统,如下所示:

清单.xml

 <activity
        android:name="TagViewer" >
        <intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
 </activity>
Run Code Online (Sandbox Code Playgroud)

同样,如果您有多个活动使用相同的操作,我们将获得选择器,从中我们可以启动所需的活动。

接收内部活动:

标签查看器.java

    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction())) {
        Log.v("NFC Launched","NFC Launched");           
    }
Run Code Online (Sandbox Code Playgroud)

我们在开发人员示例演示中提供了此示例。