10

NFCタグと対話するための簡単なアプリケーションを作成しようとしていますが、デフォルトのNFCタグアプリをトリガーする以外に、電話に何も実行させることができないようです。スキャンしたタグを傍受し、データが含まれているかどうかを判断し、それに応じてアクションを実行できるようにしたいだけです。

今のところ私のマニフェストファイルは次のようになります

<uses-sdk android:minSdkVersion="10" />
<uses-feature android:name="android.hardware.nfc" android:required="true"/>
<uses-permission android:name="android.permission.NFC"/>

<application 
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".NfcActivity"
        android:label="@string/app_name">
        <intent-filter>
           <action android:name="android.intent.action.MAIN"/>
           <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
        </intent-filter>
    </activity>
</application>

ただし、NFCタグをスキャンすると、アクティビティの開始が表示されません。ここで何かが足りませんか?インテントフィルターを中に入れてみましたBroadcastReceiverが、運が悪かったです...

4

4 に答える 4

26

スキャンしたすべての NFC タグでアプリを起動できるわけではありません。Android は、インテント フィルタの具体性に基づいて、最適なアプリを判断します。ただし、アプリがフォアグラウンドで実行されている場合は、NFC フォアグラウンド ディスパッチを使用してすべての NFC インテントをキャッチできます。

加えonCreate()て:

mAdapter = NfcAdapter.getDefaultAdapter(this);
PendingIntent pendingIntent = PendingIntent.getActivity(
  this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

加えonResume()て:

mAdapter.enableForegroundDispatch(this, pendingIntent, null, null);

加えonPause()て:

mAdapter.disableForegroundDispatch(this);

onNewIntentのように NFC タグを取得できます。

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
于 2012-06-17T21:41:13.087 に答える
7

SDKドキュメントは、これを基本的な例として示しています。

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain" />
</intent-filter>
于 2012-06-17T21:17:23.323 に答える
1

タグが NDEF 形式で定義されていることを期待しています。したがって、読み取られるタグが NDEF 形式の場合にのみ、プログラムが起動されます。

TAG_DISCOVERED や TECH_DISCOVERED などのより一般的なインテント フィルタを試すことができます。

于 2013-07-26T07:16:15.093 に答える
0

Androidは、スキャンされた NFC タグを処理するために最も関連性の高いアプリケーションを自動的に選択します。でより具体的にする必要がありますintent-filter。つまり、TEXT-タグ、URL-タグ、または CONTACT-タグのみをリッスンします。<data android:mimeType="text/plain" />これは、TEXT-Tagsの例を使用して、フィルターをさらに指定することで実行できます 。それ以外の場合は、デフォルトの NFC タグ アプリがトリガーされます。

于 2012-06-17T21:21:12.923 に答える