Frage

Was ich versucht habe, ist, eine Ganzzahl zu senden und zu empfangen und dann diese Ganzzahl zu nehmen und sie auf den herunterzählenden Timer zu setzen.Bisher kann ich die Ganzzahl senden und die Anwendung auf dem anderen Gerät öffnen. Wenn das Gerät jedoch die Aktivität lädt, öffnet es die MainActivity und nicht die Newgame-Aktivität.Ich muss an dieser Stelle zugeben, dass ich nicht sehr begabt bin und ein bisschen ein Neuling bin, aber hier ist der Auszug aus dem Code, der sich mit der NFC-Kommunikation befasst. Dieser Auszug stammt aus Newgame.java:

@Override
public NdefMessage createNdefMessage(NfcEvent event) {
    int time = bomb1.getTimer();
    String message = ( " " + time);
    NdefMessage msg = new NdefMessage(
            new NdefRecord[] { NdefRecord.createMime(
                    "application/vnd.com.Jhadwin.passthebomb.newgame" ,message.getBytes())
                    ,NdefRecord.createApplicationRecord("com.Jhadwin.passthebomb")
    });
    return msg;
}    
@Override
public void onResume() {
    super.onResume();
    // Check to see that the Activity started due to an Android Beam
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
        processIntent(getIntent());
    }
}

@Override
public void onNewIntent(Intent intent) {
    // onResume gets called after this to handle the intent
    setIntent(intent);
}

/**
 * Parses the NDEF Message from the intent and prints to the TextView
 */
 void processIntent(Intent intent) {
    Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
            NfcAdapter.EXTRA_NDEF_MESSAGES);
    // only one message sent during the beam
    NdefMessage msg = (NdefMessage) rawMsgs[0];
    // record 0 contains the MIME type, record 1 is the AAR, if present
    String newtimermsg = new String(msg.getRecords()[0].getPayload());
    timeremtextview.setText(newtimermsg);
    int newtimer = Integer.parseInt(newtimermsg);
    bomb1.setTimer(newtimer);
    bomb1.setState(true);
}

Wie Sie vielleicht bemerken, ist dieser Code aus dem NFC-Beispiel auf der Google-Website übernommen. Für jede Hilfe sind wir dankbar.

Ebenfalls enthalten ist der Anwendungsteil von AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.Jhadwin.passthebomb.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>            
    </activity>
    <activity android:name="com.Jhadwin.passthebomb.newgame"/>
    <activity android:name="com.Jhadwin.passthebomb.About"/>
    <activity android:name="com.Jhadwin.passthebomb.Help"/>
</application>
War es hilfreich?

Lösung

Wenn Sie einen Android Application Record (AAR) verwenden und keinen angeben NDEF_DISCOVERED Wenn Sie den Intent-Filter im Manifest Ihrer App verwenden, weiß Android beim Start nicht, dass Ihre App einen NFC-Intent verarbeiten kann.Folglich wird die erste Aktivität aus Ihrem Manifest geöffnet, die a deklariert MAIN Absichtsfilter mit Kategorie LAUNCHER ohne die empfangene NDEF-Nachricht weiterzuleiten.Also in deinem Fall, com.Jhadwin.passthebomb.MainActivity verwendet wird.

Damit Android eine NFC-Absicht (einschließlich der empfangenen NDEF-Nachricht) an Ihr Gerät weiterleitet newgame Aktivität müssten Sie einen geeigneten Absichtsfilter hinzufügen:

<activity android:name="com.Jhadwin.passthebomb.newgame">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="application/vnd.com.jhadwin.passthebomb.newgame" />
    </intent-filter>
</activity>

Beachten Sie, dass es Intent-Filter in Android gibt Groß- und Kleinschreibung beachten.Um Probleme mit Typen mit gemischter Groß- und Kleinschreibung zu vermeiden, konvertiert Android MIME-Typen und externe Typnamen des NFC-Forums automatisch in KLEINBUCHSTABEN (Normalerweise wird bei solchen Typnamen die Groß-/Kleinschreibung nicht beachtet).Daher müssen Sie den MIME-Typ all angeben Kleinbuchstaben um eine Übereinstimmung zu erreichen.

Ansonsten noch ein paar Vorschläge:

  1. Android-Paketnamen (und in Java-Paketnamen im Allgemeinen) sollten nur Kleinbuchstaben verwenden.Klassennamen (einschließlich Aktivitäten) sollten mit einem Großbuchstaben beginnen.

  2. Anstatt Ihre benutzerdefinierten anwendungsspezifischen MIME-Typen zu erstellen, sollten Sie externe Typen des NFC-Forums bevorzugen:

    NdefMessage msg = new NdefMessage(new NdefRecord[] {
        NdefRecord.createExternal(
            "jhadwin.com",          // your domain name
            "passthebomb.newgame",  // your type name
            message.getBytes()),    // payload
            NdefRecord.createApplicationRecord("com.jhadwin.passthebomb")
    });
    

    In diesem Fall könnten Sie einen Absichtsfilter wie diesen verwenden:

    <activity android:name="com.jhadwin.passthebomb.NewGame">
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="vnd.android.nfc" android:host="ext"
                  android:pathPrefix="/jhadwin.com:passthebomb.newgame" />
        </intent-filter>
    </activity>
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top