En universal back key-tilsidesættelse til Android SDK

Når Android fortsætter med at vokse i store spring, skal før eller senere udviklere tegne en linje i sandet. Ligesom du ikke længere forventer at finde pc-software skrevet til Microsoft Windows 95, så bliver det også sværere at købe applikationer, der kører på Android 1.6. På samme tid kan udviklere, der virkelig forstår Android's forskellige SDK-niveauer og minimumsfunktionen, der er knyttet til hver, ofte fortsætte med at understøtte ældre enheder uden noget eller meget lidt ekstra arbejde.

Jeg ved, at en række af mine medeingeniører vil være uenige med mig her og hævde, at det er tåbeligt at tilføje endda en ekstra fem linjer med gammel kode til en helt ny applikation, hvis du kun vil udvide din målgruppe af en håndfuld kunder - kunder der ikke gider at opgradere deres enheder i de sidste 24 måneder. Måske en dag, når jeg har millioner af kunder, der yammer til min næste app, vil jeg også føle det på den måde. For øjeblikket, hvis jeg kan beholde eller få en håndfuld kunder uden at påvirke eller begrænse min ansøgningsbase som helhed, har jeg en tendens til at gøre den ekstra indsats.

Et godt eksempel på at holde din målbase så bred som muligt kan ses, når du håndterer rygnøglen. Hvis du er bekendt med Android UI-paradigmet, ved du, at alle Android-enheder i starten havde en "hård" back-nøgle. Ved at trykke på denne tast navigerede du tilbage gennem aktivitetsstakken og afslutter potentielt din applikation. Et almindeligt trin, når du skriver en Android-applikation, er at tilsidesætte denne nøgle og udføre en anden handling, ofte bare for at bekræfte, at ja, brugeren virkelig havde til hensigt at afslutte.

Denne tilsidesættelse plejede udelukkende at ske ved at tilsidesætte onKeyDown () -funktionen for en aktivitet. Senere, da Android modnet introduktion af bløde og virtuelle nøgler, blev der oprettet en specifik onBackPression () -funktion som en del af API'et. Så for at understøtte håndtering af back-nøglen på versioner af Android før 2.0, bruges den gamle metode, og alt andet end 2.0 kræver det nye API. Imidlertid er mange udviklere ikke klar over, at det ved ganske enkelt at undertrykke fladadvarslen er ganske let at fortsætte med at understøtte begge mekanismer.

Demokoden nedenfor gør det bare. Føl dig fri til at følge med, eller downloade og importere hele projektet direkte til Eclipse.

1. Opret et nyt Android-projekt i Eclipse. Indstil minimum SDK til 1.6 og Build SDK til 4.1. (Dette giver os den bredest mulige række enheder.) Omdøb startaktiviteten til Main.java og det tilsvarende layout til main.xml.

2. I mappen / res / layout skal du ændre main.xml. Til dette eksempel behøver vi ikke andet end et lineært layout og et simpelt tekstfelt.

main.xml

 "http://schemas.android.com/apk/res/android" android: layout_width = "fill_parent" android: layout_height = "fill_parent" android: orientering = "lodret" android: baggrund = "# 000000" android: gravity = "center" > 
android: textColor = "#ffffff"

android: layout_width = "wrap_content"

android: layout_height = "wrap_content"

android: layout_gravity = "center"

android: text = "Tryk på tilbage-tasten." />

3. Nu går vi videre til vores / src-mappe og Main.java-klassen. Funktionen onCreate () knytter vores layout til. OnKeyDown () -metoden tager sig af at vende tilbage til tastetrykket til ældre versioner af Android. Endelig udfører onBackPressed () -funktionen vores kundehandling.

Main.java

 pakke com.authorwjf.backkeyexample; 
 import android.os.Bundle; import android.view.Gravity; import android.view.KeyEvent; import android.widget.Toast; import android.annotation.SuppressLint; import android.app.Aktivitet; 
 public class Main udvider aktivitet { 
 @Override offentligt tomrum onCreate (Bundle gemtInstanceState) { super .onCreate (gemtInstanceState); 

setContentView (R.layout. main );

}
 @SuppressLint ( "NewApi") 

@Override

public boolean onKeyDown ( int keyCode, KeyEvent event) { if (android.os.Build.VERSION. SDK_INT <android.os.Build.VERSION_CODES. ECLAIR && keyCode == KeyEvent. KEYCODE_BACK && event.getRepeatCount () == 0) { Toast t = Toast. makeText ( dette, "Android-version <2.0", Toast. LENGTH_SHORT );

t.setGravity (Tyngdekraft. TOP, 0, 100);

t.show ();

onBackPressed ();

vende tilbage sandt ;

}

 return super .onKeyDown (keyCode, event); } 
 @Override offentligt tomrum påBackPression () {Toast. makeText ( dette, "Tilbage nøgle er fanget.", Toast. LENGTH_SHORT ) .show (); vende tilbage ; 

}

}
På dette tidspunkt er vi klar til at teste ansøgningen. Gå videre og start to Android-emulatorer, en kørende Cupcake ( figur A ) og en kørende Jelly Bean ( figur B ). Læg applikationen i begge dele, og mos tilbage-tasten et par gange. Bemærk forskellen? Bortset fra toastmeddelelser er svaret nej. Koden opfører sig den samme på alle versioner af operativsystemet. Figur A

Demo kører på Cupcake
Figur B

Demo kører på Jelly Bean

Husk, at jeg ikke går ind for at "stumme" din ansøgning ned til den laveste fællesnævner. Hvis der er en funktion, som din app har brug for, og den kun er tilgængelig efter visse versioner af Android, skal du bryde bånd med tidligere udgivelser. Samtidig foreslår jeg, at der som i dette eksempel vil være et antal gange, hvor det kan og giver mening at se efter en bredere løsning.

© Copyright 2020 | mobilegn.com