2014-11-05 55 views
0

即時通訊使用NFC和即時通訊工作意圖。當發現NFC標籤 我開始我的NFCActivity。不要開始新的活動新的意圖,採取舊的活動

<activity 
    android:name="controller.NFCActivity" 
    android:launchMode="singleTask" > 
    <intent-filter> 
     <action android:name="android.nfc.action.TECH_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> 
</activity> 

NFCActivity是一個沒有UI的活動。它啓動我的NFCReaderTask。

String action = intent.getAction(); 

if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) { 
    Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 

    NFCDataDevice dataDevice = new NFCDataDevice(); 
    dataDevice.setCurrentTag(tagFromIntent); 

    byte[] systemInfoAnswer = NFCCommand.sendGetSystemInfoCommandCustom(tagFromIntent, new NFCDataDevice()); 

    if (NDEFHelper.decodeSystemInfoResponse(systemInfoAnswer, new NFCDataDevice())) { 
     NFCReaderTask nfcReaderTask = new NFCReaderTask(this, this, dataDevice); 
     nfcReaderTask.execute(); 
    } 
} 

當ReaderTask完成我的回調方法onNFCReaderTaskCompleted我 NFCActivity叫我這樣做:

public void onNFCReaderTaskCompleted(Long time, String value) { 
    Intent newIntent = new Intent(this.getApplicationContext(), NFCResultActivity.class); 
    newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    newIntent.putExtra(Globals.KEY_NFC, true); 
    newIntent.putExtra(Globals.KEY_TIME, time); 
    newIntent.putExtra(Globals.KEY_VALUE, value); 

    this.startActivity(newIntent); 
    this.finish(); 
} 

這很好,第一次一個NFC標籤被發現。我現在想要的是不要 永遠啓動一個新的NFCResultActivity。當NFCResultActivity激活時,我只需要 想調用一個NFCResultActivity的方法來設置新數據,而不是完全創建一個新的活動 。

我該如何做到這一點?

回答

0

我解決了不同的看法。

我刪除了我NFCActivity和改變了我的NFCResultActivity做的意圖傾聽:

<activity 
     android:name="controller.NFCResultActivity" 
     android:label="@string/title_activity_nfcresult" 
     android:launchMode="singleTask" > 
     <intent-filter> 
      <action android:name="android.nfc.action.TECH_DISCOVERED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> 
    </activity> 

我現在開始NFCReaderTask我NFCResultActivity和我加入這個方法:

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    this.setIntent(intent); 
    this.resolveIntent(intent); 
} 

更新我的數據而無需創建新的活動。

1

只需編輯該行。

newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 

<activity 
android:name="controller.NFCActivity" 
android:launchMode="singleTop" > 
+0

這實際上使情況變得更糟。首先它不會假裝從一開始就一次又一次地開始活動,第二次當我手動啓動我的NFCResultActivity並放置一個標籤時,我在頂部有兩個NFCResultActivities。 – Mulgard 2014-11-05 08:42:22

+0

刪除此標誌Intent.FLAG_ACTIVITY_CLEAR_TOP | – 2014-11-05 08:47:56

+0

在你的清單中使用它並從意圖中刪除標誌 – 2014-11-05 08:48:51