Fragments und Intents

  • 1 Antworten
  • Letztes Antwortdatum
L

Lybrial

Neues Mitglied
0
Hallo,

ich habe heute ein etwas spezielles Problem zu dem ich keine Lösung finde.
Ich habe eine App die NFC-Tags lesen kann. Dafür habe ich eine NFCActivity
implementiert. Hier mal wesentlicher Code:

Code:
<activity
        android:name="de.activities.NFCActivity"
        android:label="@string/title_activity_nfc" 
        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>

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

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

private void resolveIntent(Intent intent) {
    if(this.sessionManagerPreferences.isLoggedIn() || this.sessionManagerSingleton.isLoggedIn()) {
	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())) {
		NFCTask nfcTask = new NFCTask(dataDevice);
	        NFCDialogFragment nfcDialogFragment = new NFCDialogFragment();
			        
	        nfcDialogFragment.setTask(nfcTask);
	        nfcDialogFragment.setCallback(this);
	        nfcDialogFragment.setTargetFragment(this, Globals.REQUEST_CODE_NFC_TASK);
	        nfcDialogFragment.show(this.fragmentManager, Globals.FRAGMENT_TAG_NFC_TASK);
	    } 
	}
    } else {
	Intent newIntent = new Intent(this.getActivity(), LoginActivity.class);
	newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
	newIntent.putExtra(Globals.KEY_NFC, true);
			
	this.getActivity().startActivity(newIntent);
	this.getActivity().finish();
    }
}

Nun war ich aber auf ein Problem gestoßen. Der NFCTask ist ein AsyncTask, weshalb ich nun keine "normale" Activity mehr verwenden kann. Ich muss ein Fragment verwenden, da andernfalls die App crashen würde, wenn ich den Bildschirm drehe oder auf den Home-Button drücke, während der AsyncTask gerade läuft.

Das Problem an der Sache ist, wenn ich ein Fragment nutze, kann ich kein onNewIntent nutzen, was allerdings essenziell ist für meine Anwendung.

Gibt es dafür eine Lösung?
 
Du kannst auch den globalen Application Context bei einem AsynTask verwenden.
 
Zurück
Oben Unten