[Android / JAVA] Probleem NFC in app met meerdere activities

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • QErikNL
  • Registratie: September 2009
  • Laatst online: 03-09 15:54
Ik ben bezig met een Android applicatie waabrij ik een NFC kaarten wil uitlezen met de ingebouwde NFC libiries van de Android API. Ik loop echter tegen een probleem aan dat als ik niet in de 'main activity' de kaarten uitlees maar in andere activities, de applicatie opnieuw opend, terwijl de gebruikte code om de chip uit te lezen hetzelfde is en ik ook resultaat krijg.

Ik heb het geprobeerd op te lossen met de snippet:
code:
1
2
pendingIntent = PendingIntent.getActivity(this,0,new
 Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

Maar het heeft niet geholpen.

De voorbeelden op internet die ik heb gevonden, zijn gemaakt in een enkele activity wat exact mijn probleem niet is.

Iemand ervaring?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Arie-
  • Registratie: December 2008
  • Niet online
Start je OS de main activity opnieuw bij het uitlezen van die chip, of doet de door jou geschreven applicatie dat?

Acties:
  • 0 Henk 'm!

  • QErikNL
  • Registratie: September 2009
  • Laatst online: 03-09 15:54
Het OS doet dat. Ik heb verschillende activities die inherit van een class die ik Base Activity heb gemoemd, die onder andere de NFC code bevat. De main activity inheret niet die code, want die heeft deze functionaliteiten niet nodig. Wat echter gebeurd is zodra ik een NFC kaar bij de telefoon hou, de app opnieuw opend in de main activity. Om vervolgens te testen of het aan de NFC reading code lag, heb ik die code gekopieerd in de main activity geplaatst om te testen of alles netjes werd uitgelezen. Dat gebeurde. Dus ergens in het OS word tegen de telefoon gezegt dat hij de app moet openen zodra er een NFC kaart in de buurt is.

Acties:
  • 0 Henk 'm!

  • Arie-
  • Registratie: December 2008
  • Niet online
Ik heb even vluchtig gekeken naar een android applicatie bij ons, deze reageert op file/content intents. In die applicatie worden intents genegeerd nadat er is 'ingelogd'. Pas na het beëindigen van een 'sessie' wordt er weer gereageerd op intents, op de achtergrond wordt er dus bijgehouden of er een sessie actief is. Ongeveer zo:
  1. MainActivity wordt gestart
  2. Sessie actief?
  3. [list]
  4. Ja: Start applicatie
  5. Nee: Kijk of je iets met intent kunt
  6. [/list]
Ik weet niet of dit best practice is, ben geen Android expert, maar heb er wel eens mee gespeeld. Ik kan me tenslotte nog vaag iets herinneren dat je je activity stack (heet dat zo?) leeg moet gooien, omdat anders bij het teruggaan naar je MainActivity de intent(data) opnieuw gebruikt gaat worden.

Acties:
  • 0 Henk 'm!

  • QErikNL
  • Registratie: September 2009
  • Laatst online: 03-09 15:54
Dank voor de moeite. Ik ben ook zeker geen expert. Ik heb net voor elkaar gekregen dat in iedere activity de intent kan worden afgehandeld, dat moest blijkbaar per activity geregeld worden in het manifest. Ik weet niet hoe die soort van 'sessies' werken, misschien dat daar de oplossing zit. Maar heb je het probleem dat als je een chip leest dat de telefoon dan vraagt 'Actie voltooien met ... ' ? Ik wil dat de actie standaard in de actieve activity uitvoeren. Denk aan hoe een app als NFC Tools werkt. Die vraagt dit ook niet.

Even de code van het manifest:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package=" [vanwege privacy redenen van de opdrachtgever weg ] ">

    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-feature
        android:name="android.hardware.nfc"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".LoginActivity"
            android:launchMode="singleInstance">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

                <action android:name="android.nfc.action.NDEF_DISCOVERED" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
        <activity android:name=".ReturnActivity"
            android:launchMode="singleInstance">
            <intent-filter>

                <action android:name="android.nfc.action.NDEF_DISCOVERED" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>

        <activity android:name=".BorrowActivity"
            android:launchMode="singleInstance">
            <intent-filter>

                <action android:name="android.nfc.action.NDEF_DISCOVERED" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
        <activity android:name=".CardActivity"
            android:launchMode="singleInstance">
            <intent-filter>

                <action android:name="android.nfc.action.NDEF_DISCOVERED" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
    </application>

</manifest>

[ Voor 70% gewijzigd door QErikNL op 11-01-2017 12:23 ]


Acties:
  • 0 Henk 'm!

  • Arie-
  • Registratie: December 2008
  • Niet online
Met een sessie bedoel ik bijvoorbeeld dat een gebruiker is ingelogd. Dit sla je bijvoorbeeld op in je database, of in een tekstbestand oid. Dat had ik misschien duidelijker moeten vermelden, dat is in deze geen Android concept.
Pagina: 1