Dele filer med NFC på Android

Sharing filer med NFC på Android

35
Del
17
Del
Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.

I denne opplæringen vil du lære det grunnleggende av P2P (peer-to-peer) kommunikasjon og lage et program for å dele store filer, for eksempel bilder og videoer, fra én enhet til en annen ved hjelp av NFC (Near Field Communication) på Android.

1. Innledning

NFC eller Near Field Communication er et sett med kort rekkevidde trådløse teknologier. Det gjør det mulig å utveksle data mellom en NFC-brikke og en NFC-aktivert enhet, eller mellom NFC-aktiverte enheter innenfor en avstand på ikke mer enn 4 cm

Det er tre moduser av NFC drift.


Lese og skrive kontakt tags: Disse kodene er vanligvis svært små og ikke krever noen batteristrøm. De kan bygges i alle slags objekter, for eksempel film plakater, produkter, klistremerker, og så videre

Kort emulering. Tenk smart kredittkort. Dette gjør at en Android-enhet for å opptre som et smartkort. Den åpenbare fordelen med dette er at enheten kan fungere som ett kort, og deretter opptre som en annen ved å trykke på en knapp. Dette er en måte en Android-enhet kan erstatte din lommebok. Uansett kredittkort, busskort, eller billett du bruker, kan din Android-enhet utgi-sikkert, selvfølgelig-elementet. Leseren på den andre siden av transaksjonen mener at det er i samspill med dette elementet, når det faktisk, det er å gjøre med en Android-enhet

Peer-to-peer-kommunikasjon. Hver side erkjenner at det å snakke med en annen enhet og ikke bare en kode. Protokollen er utviklet av Google og gjør at to enheter å sende meldinger frem og tilbake.

peer-to-peer (P2P) datautveksling funksjonen ble lagt til Android i API nivå 14 (Android 4.0 , Ice Cream Sandwich) og kalles Android Beam. Det muliggjør rask kort rekkevidde utveksling av data mellom to NFC-aktiverte Android-enheter.

2. P2P kommunikasjon med Android Beam

Android Beam datautveksling funksjonen har to APIer, den NDEF overføring API og filoverføringen API.

NDEF Transfer API

Dette API ble introdusert i API nivå 14 (Android 4.0, Ice Cream Sandwich) og muliggjør overføring av små mengder data som webadresser, kontakter etc. data som skal overføres må være formatert i NDEF (NFC Data Exchange Format), og er sendt som en NDEF melding.

File Transfer API

filoverføring API ble introdusert i API nivå 16 (Android 4.1, Jelly Bean) og muliggjør overføring av store filer, for eksempel bilder, videoer, etc.

Det er noen begrensninger skjønt. Android Beam fungerer bare når programmet sender data kjører i forgrunnen og mottakerenheten data er ulåst

Android Beam filoverføring API har ytterligere to krav:.

  • Filene som må overføres må være plassert i ekstern lagring.

    filene som må overføres må være lesbart for hele verden.

    I denne opplæringen, vi skal bruke Android Beam filoverføring API av Android SDK for å lage et program som gjør det mulig å dele filer mellom enheter.

    3. Krav

    På grunn av begrensninger i emulatoren, må søknaden være testet med to fysiske NFC-aktiverte Android-enheter som kjører Android 4.1 eller høyere.

    4. Komme i gang

    Ved hjelp av Eclipse, opprette en ny Android-applikasjon prosjektet og gi den navnet NFCDemo.

    Siden Android Beam filoverføring er bare tilgjengelig på enheter som kjører Android 4.1+, må vi sette minstekravet SDK til API. 16: Android 4.1 (Jelly Bean)

    5. . Konfigurering Manifest File

    Hvis du vil bruke NFC i en Android-app, må vi erklære NFC tillatelse manifestfilen som vist nedenfor
    < bruker-tillatelse android: name = "android.permission.NFC "/>

    I tillegg til å lese filer fra ekstern lagring, erklære READ_EXTERNAL_STORAGE tillatelse som vist nedenfor
    < bruker-tillatelse android. name =" android.permission.READ_EXTERNAL_STORAGE "/>

    Ikke alle Android-enheten støtter NFC. Å sørge for at vår app bare dukker opp i Google Play for de enhetene som støtter NFC, legger < bruker-feature > element til manifestfilen
    < bruker-feature android. name = "android.hardware.nfc" android: påbudt = "true" />

    Hvis NFC er en valgfri funksjon i programmet ditt, så du kan utelate < bruker-feature > element fra manifestfilen og sette minimum SDK versjon til en lavere API nivå. I så fall må du sjekke om enheten støtter NFC og Android Beam API, og oppdatere brukergrensesnitt tilsvarende.

    6. Opprette utforminger

    Åpne activity_main.xml layout fil og legge til en knapp som vist nedenfor. Som du kan se, har vi lagt til en knapp som brukeren kan trykke på for å starte overføring av en fil
    < RelativeLayout xmlns:. Android = "http://schemas.android.com/apk/res/android "xmlns: verktøy =" http://schemas.android.com/tools "android: layout_width =" match_parent "android: layout_height =" match_parent "android: padding =" 16dp "> < Button android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: padding = "8DP" android: text = "Send fil" android: onclick = "sendFile" /> < /RelativeLayout >
    7. Implementering Filoverføring

    Åpne MainActivity klasse og erstatte dagens gjennomføring med det som vises nedenfor. Ikke bekymre deg om gjennomføringen for nå. Jeg skal forklare hvert trinn i et øyeblikk
    pakke com.tutsplus.nfcdemo;. Import java.io.File, import android.app.Activity, import android.content.Intent, import android.content.pm.PackageManager; import android.net.Uri, import android.nfc.NfcAdapter, import android.os.Build, import android.os.Bundle, import android.os.Environment, import android.provider.Settings, import android.view.View; import android.widget.Toast; public class MainActivity strekker Aktivitet {private NfcAdapter nfcAdapter; Override Beskyttet void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); PackageManager pm = this.getPackageManager (); //Sjekk om NFC er tilgjengelig på enheten hvis (pm.hasSystemFeature! (PackageManager.FEATURE_NFC)) {//NFC ikke er tilgjengelig på enheten. Toast.makeText (dette ". Enheten har ikke NFC hardware", Toast.LENGTH_SHORT) .vis (); } //Sjekk om enheten kjører Android 4.1 eller høyere else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {//Android Beam-funksjonen støttes ikke. Toast.makeText (dette, "Android Beam støttes ikke.", Toast.LENGTH_SHORT) .vis (); } Else {//NFC og Android Beam filoverføring støttes. Toast.makeText (dette, "Android Beam støttes på enheten din.", Toast.LENGTH_SHORT) .vis (); }} Public void sendFile (Vis visning) {nfcAdapter = NfcAdapter.getDefaultAdapter (denne); //Sjekk om NFC er aktivert på enheten if (! NfcAdapter.isEnabled ()) {//NFC er deaktivert, viser innstillinger UI //å aktivere NFC Toast.makeText (dette, "Aktiver NFC.", Toast.LENGTH_SHORT ).vise(); startActivity (nye Intent (Settings.ACTION_NFC_SETTINGS)); } //Sjekk om Android Beam-funksjonen er aktivert på enheten else if (! NfcAdapter.isNdefPushEnabled ()) {//Android Beam er deaktivert, viser innstillinger UI //å aktivere Android Beam Toast.makeText (dette, "Vennligst aktiver Android Beam ", Toast.LENGTH_SHORT) .vis (.); startActivity (nye Intent (Settings.ACTION_NFCSHARING_SETTINGS)); } Else {//NFC og Android Beam begge er aktivert //File skal overføres //For å få til denne opplæringen jeg har plassert et bilde //heter 'wallpaper.png' i 'Pictures' katalog String filnavn = " wallpaper.png "; //Hent stien til brukerens offentlige bilder katalog Fil fileDirectory = Miljø .getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES); //Opprett en ny fil ved å bruke den angitte katalogen og navn File fileToTransfer = new File (fileDirectory, filnavn); fileToTransfer.setReadable (true, false); nfcAdapter.setBeamPushUris (ny Uri [] {Uri.fromFile (fileToTransfer)}, dette); }}}
    8. Teste App

    Før vi dykke inn i koden, la oss se hvilke skritt vi må ta for å overføre en fil fra én enhet til en annen.

    Trinn 1

    Koble den ene av de to Android-enheter til din utvikling arbeidsstasjon via USB med USB debugging aktivert. La oss se i den enheten som avsender.

    Trinn 2

    Aktiver NFC og Android Beam på avsenderen. Trykk F11 for å feilsøke programmet. Dette vil installere og starte NFCDemo på avsenderen.

    Trinn 3

    Aktiver NFC på den andre enheten, mottakeren.

    Trinn 4

    Klikk på Send fil knappen og plasser enhetene tett sammen for å la NFC gjøre sitt arbeid. Du bør se en Touch til bjelke melding på avsenderen. Trykk på skjermen for å starte overføringen.

    Trinn 5

    Mottakeren skal vise en varsling på statuslinjen for å indikere fremdriften for filoverføring.

    Trinn 6

    Hvis filoverføringen er fullført, en Beam fullstendig melding vises til brukeren.

    9. Dekoding koden

    La oss ta en titt på koden som gjør alt dette mulig.

    Bestem enheten evner

    Som nevnt tidligere, hvis NFC er en valgfri funksjon i vår app vi bør sjekke for NFC og Android Beam støtte. Denne kontrollen kan utføres hvor som helst i vår app. I dette eksempelet har jeg satt inn koden i onCreate metoden i MainActivity klassen.

    Trinn 1

    Skaff en referanse til PackageManager.
    PackageManager pm = this.getPackageManager ( );

    PackageManager klassen inneholder informasjon om alle pakkene er installert på enheten

    Trinn 2

    Ring hasSystemFeature metoden på PackageManager objekt for å finne ut om enheten har NFC-støtte.. Denne metoden returnerer true
    hvis den ønskede funksjonen støttes av enheten.
    If (! Pm.hasSystemFeature (PackageManager.FEATURE_NFC)) {//NFC ikke er tilgjengelig på enheten.} Else {//NFC er tilgjengelig på enheten.}

    Trinn 3

    Hvis enheten har NFC-støtte, så må vi sjekke enhetens Android-versjon. Android-versjonen (API-nivå) som kjører på en enhet er tilgjengelig via android.os.Build.VERSION.SDK_INT. Hvis versjonen er større enn eller lik 16, Build.VERSION_CODES.JELLY_BEAN støtter deretter enheten Android Beam filoverføring.
    If (! Pm.hasSystemFeature (PackageManager.FEATURE_NFC)) {//NFC ikke er tilgjengelig på . device} //Sjekk om enheten kjører Android 4.1 eller høyere else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {//Android Beam-funksjonen støttes ikke. } Else {//NFC og Android Beam filoverføring støttes. }
    Initiere Filoverføring

    Når vi har fastslått at enheten har de nødvendige evner, kan vi starte filoverføringen bruker Android Beam.

    Trinn 1

    Skaffe en referanse til NfcAdapter
    nfcAdapter = NfcAdapter.getDefaultAdapter (denne).;

    Jobben til NfcAdapter er å håndtere utveksling av data mellom en NFC-brikke og en NFC-aktivert enhet eller mellom to NFC-aktiverte enheter.

    Trinn 2

    Adapteren kan aktiveres eller deaktiveres. Å avgjøre om kortet er aktivert, kan du ringe isEnabled metoden på NfcAdapter objektet.
    //Sjekk om NFC er aktivert på deviceif (! NfcAdapter.isEnabled ()) {//NFC er deaktivert, viser innstillinger UI for å aktivere NFC} else {//NFC er aktivert}

    Denne metoden returnerer true
    hvis NFC er aktivert på enheten. Hvis NFC er deaktivert, ber vi brukeren om å aktivere den og vise den NFC innstillinger brukergrensesnitt.
    startActivity (ny Intent (Settings.ACTION_NFC_SETTINGS));

    Trinn 3

    På samme måte kan Android Beam-funksjonen også aktiveres eller deaktiveres. For å sjekke tilstanden, ring isNdefPushEnabled metoden på NfcAdapter objektet.
    //Sjekk om NFC er aktivert på deviceif (! NfcAdapter.isEnabled ()) {//NFC er deaktivert, viser innstillinger UI å aktivere NFC} //Sjekk om Android Beam-funksjonen er aktivert på deviceelse if (! nfcAdapter.isNdefPushEnabled ()) {//Android Beam er deaktivert, viser innstillinger UI å aktivere Android Beam} else {//NFC og Android Beam begge er aktivert}

    Hvis denne metoden returnerer false, ber vi brukeren om å aktivere den og vise Android Beam innstillinger brukergrensesnitt
    startActivity (ny Intent (Settings.ACTION_NFCSHARING_SETTINGS));.

    Hvis både NFC og Android Beam er aktivert, vi kan fortsette med filoverføringen.

    Trinn 4

    Opprett en ny fil med katalogen der filen ligger på enheten og navnet på filen. For å teste filoverføring, har jeg lagt til et bilde som heter wallpaper.png i katalogen Bilder i den eksterne lagrings
    //Opprett en ny fil ved å bruke den angitte katalogen og namefile fileToTransfer = new File (fileDirectory, filnavn.);

    Trinn 5

    Ring setBeamPushUris metoden på NfcAdapter objektet og passere URI av filen som skal overføres.
    nfcAdapter.setBeamPushUris (ny Uri [] {Uri.fromFile (fileToTransfer)} dette);

    setBeamPushUris metoden godtar en rekke Uri stedene. Hvis du ønsker å sende mer enn én fil, kan du sende flere URIer til adapteren.

    URIer sendes til setBeamPushUris metoden er kø av kortet og overføres til mottakerenheten så snart den kommer i nærhet av avsenderenheten.

    Konklusjon

    I denne opplæringen, lærte du om det grunnleggende NFC på Android. Du har også lært å begrense tilgangen til en app ved ustøttede enheter ved hjelp av manifestfilen og bestemme enheten evner under kjøring. For å sende filer ved hjelp av NFC, vi har gjort bruk av NfcAdapter klassen.

    Selv om jeg har prøvd å dekke grunnleggende arbeider med Android Beam filoverføring API for å hjelpe deg med å komme i gang, er det fortsatt mer å utforske. Hvis du liker å vite mer, så jeg oppfordrer deg til å besøke Android utvikleren portal for mer informasjon.