Question

Ce que j'ai essayé de faire, c'est d'envoyer un entier et de le recevoir, puis de prendre cet entier et de le régler sur le compte à rebours.Jusqu'à présent, je peux envoyer l'entier et ouvrir l'application sur l'autre appareil. Cependant, lorsque l'appareil charge l'activité, il ouvre l'activité MainActivity et non l'activité Newgame.Je dois admettre qu'à ce stade, je ne suis pas un code intelligent et un peu novice, mais voici l'extrait de code qui traite de la communication NFC. Cet extrait provient du 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);
}

Comme vous le remarquerez peut-être, ce code est adapté de l'exemple NFC sur le site Web de Google, toute aide peut être appréciée.

La partie application du fichier AndroidManifest.xml est également incluse.

<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>
Était-ce utile?

La solution

Si vous utilisez un enregistrement d'application Android (AAR) et ne spécifiez pas de NDEF_DISCOVERED filtre d'intention dans le manifeste de votre application, Android ne saura pas que votre application peut gérer une intention NFC lors de son lancement.Par conséquent, il ouvrira la première activité de votre manifeste qui déclare un MAIN filtre d'intention avec catégorie LAUNCHER sans transmettre le message NDEF reçu.Donc dans ton cas, com.Jhadwin.passthebomb.MainActivity sera utilisé.

Afin qu'Android transmette une intention NFC (y compris le message NDEF reçu) à votre newgame activité, vous devrez ajouter un filtre d'intention approprié :

<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>

Notez que les filtres d'intention dans Android sont SENSIBLE AUX MAJUSCULES ET MINUSCULES.Afin d'éviter les problèmes liés aux types à casse mixte, Android convertit automatiquement les types MIME et les noms de types externes du forum NFC en MINUSCULE (généralement, ces noms de types ne sont pas sensibles à la casse).Par conséquent, vous devez spécifier le type MIME pour tous minuscule pour réaliser un match.

En plus de cela, voici quelques suggestions supplémentaires :

  1. Les noms de packages Android (et les noms de packages Java en général) doivent utiliser uniquement des lettres minuscules.Les noms des classes (y compris les activités) doivent commencer par une lettre majuscule.

  2. Au lieu de créer vos types MIME personnalisés spécifiques à l'application, vous devriez préférer les types externes du NFC Forum :

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

    Dans ce cas, vous pouvez utiliser un filtre d'intention comme celui-ci :

    <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>
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top