0

Android NFCについて質問があります。

読み取りと書き込みに関する機能は既に実行しましたが、まだ 1 つの問題があります。

タグに AAR を書きました。最初に感知した後、アプリケーションを起動できます。

2 回目のセンシング (アプリケーションの起動) で、NFC タグからデータを読み取ることができます。

アプリケーションを起動してタグからデータを取得できるセンシングを 1 回だけ実行することはできますか?

4

2 に答える 2

1

以下のパターンを使用します (ここから)。概要:

  1. フォアグラウンド モードでは、スキャンされたタグを onNewIntent に送信されるインテントの形式でキャプチャできます。onResume は onNewIntent 呼び出しに続くので、そこでインテントを処理します。ただし、onResume は他のソースから取得することもできるため、ブール変数を追加して、新しい各インテントを 1 回だけ処理するようにします。

  2. アクティビティが開始されたときにもインテントが存在します。ブール変数を 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();
        }
    
    }
    
于 2013-01-23T00:00:31.873 に答える
0

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);
  }
 }
于 2013-01-22T16:04:19.593 に答える