Autore Topic: Lanciare activity tramite NFC  (Letto 1057 volte)

Offline davix10

  • Utente normale
  • ***
  • Post: 159
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Lanciare activity tramite NFC
« il: 30 Novembre 2015, 14:31:27 CET »
0
Salve a tutti, ho cercato vari esempi nel web ma non riesco a trovare quello che faccia per me.
Sono riuscito a lanciare la mia app tramite tocco con un tag NFC ma non riesco a lanciare un'activity diversa da quella principale.

Questo è ciò che utilizzo per scrivere il tag:

Codice (Java): [Seleziona]
private void write(String text, Tag tag) throws IOException, FormatException {

        NdefRecord appRecord = NdefRecord.createApplicationRecord(
                "com.torch.nfc");
        NdefRecord[] records = {createRecord(text)};
        NdefMessage message = new NdefMessage(appRecord, records);
        // Get an instance of Ndef for the tag.
        Ndef ndef = Ndef.get(tag);
        // Enable I/O
        ndef.connect();
        // Write the message
        ndef.writeNdefMessage(message);
        // Close the connection
        ndef.close();
    }


Questo invece è il mio manifests:

Codice (XML): [Seleziona]
<application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
        <activity
           android:name="com.torch.nfc.MainActivity"
           android:label="@string/app_name"
           android:theme="@style/AppTheme">
            <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.TECH_DISCOVERED" />-->
            <!--</intent-filter>-->


            <!--<meta-data-->
            <!--android:name="android.nfc.action.TECH_DISCOVERED"-->
            <!--android:resource="@xml/nfc_tech_filter" />-->

        </activity>

        <activity
           android:name="com.torch.nfc.Reader"
           android:label="@string/app_name"
           android:theme="@android:style/Theme.NoDisplay">


            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <data android:mimeType="application/com.torch.nfc" />
                <!--<category android:name="android.intent.category.DEFAULT"/>-->
                <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>


        <activity
           android:name="com.torch.nfc.Add"
           android:label="Write TAG"
           android:theme="@style/AppTheme" />

    </application>


Riesco a lanciare l'activity main ma non riesco a lanciarne altre. Penso che questo sia dovuto a qualcosa che mi sfugge nel codice e quindi lancia solo il main. Qualcuno può aiutarmi?

Offline wlf

  • Utente normale
  • ***
  • Post: 346
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Lanciare activity tramite NFC
« Risposta #1 il: 03 Dicembre 2015, 09:53:52 CET »
+1
Io nel manifest l'ho definito come segue:

Codice: [Seleziona]
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- nfc -->
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data
                    android:host="ext"
                    android:pathPrefix="/nfc.it:nfc"
                    android:scheme="vnd.android.nfc" />
            </intent-filter>
        </activity>
        <activity
            android:name=".NfcActivity"
            android:screenOrientation="portrait"
            android:label="@string/title_activity_nfc" >
        </activity>
        <activity
            android:name=".SecondActivity"
            android:screenOrientation="portrait"
            android:label="@string/title_activity_second" >
        </activity>
    </application>

Mi parte la MainActivity; per far partire l'activity che preferisco sono intervenuto nella MainActivity, più precisamente nella onResume(), come segue:

Codice: [Seleziona]
    public void onResume() {
            super.onResume();
            Log.d("MainActivity", "onResume");

            if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
                Log.d("MainActivity", "ACTION_NDEF_DISCOVERED");
                // Intent per passaggio alla NfcActivity
                Intent myIntent = new Intent(this, NfcActivity.class);
                startActivity(myIntent);
        }
    }

Quindi puoi deciderlo dalla tua App una volta partita con il TAG nfc quale activity far partire; se parto normalmente nel mio caso rimango nella MainActivity mentre se parto con il TAG nfc mi carica la MainActivity che in automatico mi chiama la NfcActivity.
Visto che è il Manifest dell'App che decide chi far partire a mio avviso non hai  molte altre alternative! ;)