Android NFCについて質問があります。
読み取りと書き込みに関する機能は既に実行しましたが、まだ 1 つの問題があります。
タグに AAR を書きました。最初に感知した後、アプリケーションを起動できます。
2 回目のセンシング (アプリケーションの起動) で、NFC タグからデータを読み取ることができます。
アプリケーションを起動してタグからデータを取得できるセンシングを 1 回だけ実行することはできますか?
Android NFCについて質問があります。
読み取りと書き込みに関する機能は既に実行しましたが、まだ 1 つの問題があります。
タグに AAR を書きました。最初に感知した後、アプリケーションを起動できます。
2 回目のセンシング (アプリケーションの起動) で、NFC タグからデータを読み取ることができます。
アプリケーションを起動してタグからデータを取得できるセンシングを 1 回だけ実行することはできますか?
以下のパターンを使用します (ここから)。概要:
フォアグラウンド モードでは、スキャンされたタグを onNewIntent に送信されるインテントの形式でキャプチャできます。onResume は onNewIntent 呼び出しに続くので、そこでインテントを処理します。ただし、onResume は他のソースから取得することもできるため、ブール変数を追加して、新しい各インテントを 1 回だけ処理するようにします。
アクティビティが開始されたときにもインテントが存在します。ブール変数を false に初期化することで、上記のフローに適合させます。問題は修正されるはずです。
protected boolean intentProcessed = false;
public void onNewIntent(Intent intent) {
Log.d(TAG, "onNewIntent");
// onResume gets called after this to handle the intent
intentProcessed = false;
setIntent(intent);
}
protected void onResume() {
super.onResume();
// your current stuff
if(!intentProcessed) {
intentProcessed = true;
processIntent();
}
}
AndroidManifest で -
<activity
android:name=".TagDiscoverer"
android:alwaysRetainTaskState="true"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:screenOrientation="nosensor" >
<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" />
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"/>
</activity>
OnCreate() で NFC アダプターを開始する必要があります。
/**
* Initiates the NFC adapter
*/
private void initNfcAdapter() {
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}
今OnResume()で...
@Override
protected void onResume() {
super.onResume();
if (nfcAdapter != null) {
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
}
}