2013-01-22 105 views
0

我有一個關於android NFC的問題。Android NFC感應和讀取標籤數據在同一時間

我已經完成了關於讀寫的功能,但仍然有一個問題。

我在我的標籤中寫了AAR,第一次感應後,它可以啓動我的應用程序。

第二次感應(我的應用程序啓動),我可以從NFC標籤讀取數據。

是否有可能只是感應一次,可以啓動我的應用程序並從標籤中獲取數據?

+0

無法理解你的問題..Do要讀取標籤,當你tagdiscoverer活動是forground? – Jambaaz

+0

謝謝你的回覆!我的問題是「如果我的應用程序沒有啓動,是否可以讀取標籤數據並同時啓動我的應用程序?(只需感應標籤一次)」 –

+0

是的,這是可能的 – ThomasRS

回答

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); 
    } 
} 
+0

謝謝!我的問題已修復! –

1

使用低於模式(從here)。簡介:

  1. 前景模式允許您以發送到onNewIntent的意圖的形式捕獲掃描標籤。 onResume將遵循onNewIntent調用,所以我們將在那裏處理意圖。但是onResume也可以來自其他來源,所以我們添加一個布爾變量來確保我們只處理每個新的意圖一次。

  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(); 
        } 
    
    }