Gemeinhin-Code in Android Anwendungsentwicklung

"Meine app braucht einen Rundfunkempfänger. Kann mir jemand daran erinnern, wie ich einen Rundfunkempfänger codieren können? Und während Sie gerade dabei sind, wie kommt eine Aktivität liefern ein Ergebnis? Oh, Mist. Wo kann ich das ganze Zeug schnell zu finden?"

Mit Beispiele für die Arten von Code verwendet in Android-Anwendung Entwicklung ready-to-Hand kann eine große Hilfe sein. Sie viele Beispiele finden Sie hier.

Aktivitäten

Hier ist eine Tätigkeit, die eine andere Tätigkeit beginnt:

public class CheatSheetActivity erweitert Activityimplements onclickListener {Knopf button1-static final String My_Action = "com.allmycode.action" -static final String MY_URI = "my_scheme: my_scheme_specific_part" - @ Overridepublic Leere onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - setContentView (R.layout.main) -button1 = (Button) findViewById (R.id.button1) -button1.setonclickListener (this) -} public void onclick (View arg0) {Intent Absicht = new Intent () - intent.setAction (My_Action) -intent.setData (Uri.parse (MY_URI)) - startActivity (Vorsatz) -}}

Und vergessen Sie nicht - wenn Sie eine neue Aktivitätsklasse zu erstellen, müssen Sie ein entsprechendes Element hinzufügen Ihren AndroidManifest.xml Datei. Das OTHERACTIVITY Element Absicht Filter sieht wie folgt aus:

Um ein Ergebnis aus einer Tätigkeit zu erhalten, fügen Sie den folgenden Code (oder es so etwas wie), um Ihre Anwendung:

final int CODE_NUMBER = 42-final String CLASSNAME = "CheatSheetActivity" -public Leere onclick (View arg0) {Intent Absicht = new Intent()-intent.setAction(MY_ACTION)-intent.setData(Uri.parse(MY_URI))-startActivityForResult(intent, CODE_NUMBER) -} protected void onActivityResult (int Codenummer, int Result, Intent Absicht) {if (Result == RESULT_OK) {if (Codenummer == CODE_NUMBER) {Log.i (CLASSNAME, intent.getData () getSchemeSpecificPart ()). -}}}

Und in der Tätigkeit, die das Ergebnis erzeugt, fügen Sie Code der folgenden Art:

Intent Absicht = new Intent () - intent.setData (Uri.parse ( "Ergebnis: Hallo")) - setResult (RESULT_OK, Vorsatz) -finish () -

Dienstleistungen

Ein Service der Regel tut seine Arbeit, ohne sich (oder sogar Benachrichtigung), um den Benutzer. Zum Beispiel könnte ein Aktienkurs-Service im Web erreichen und die aktuellen Preise der beliebtesten Picks des Benutzers erhalten. Eine weitere Aktivität der App können Daten aus dem Service zu erhalten und die Daten angezeigt werden auf den Bildschirm des Geräts.

Der folgende Code ist eine vollständige (aber nicht sehr genau) Wetterdienst:

public class MyWeatherService erweitert Service-{Messenger messengerToClient = null-MyIncomingHandler myIncomingHandler = new MyIncomingHandler () - Messenger messengerToService = new Messenger (myIncomingHandler) - @ Overridepublic IBinder onBind (Intent Absicht) {return messengerToService.getBinder () -} Klasse MyIncomingHandler erstreckt Handler { @Overridepublic Leere handle (Message incoming) {messengerToClient = incomingMessage.replyTo-Bundle Antwort = new Bundle () - reply.putString ( "Wetter", "Es ist in der Nacht dunkel.") - Nachricht replyMessage = Message.obtain () - replyMessage .setData (Antwort) -try {messengerToClient.send (replyMessage) -} catch (Remote e) {e.printStackTrace () -}}}}

In einem anderen Paket, setzen Sie den Code der Wetterdienst zu rufen. Hier ist ein Beispielcode:

public class ServiceConsumerActivity erweitert Activityimplements onclickListener {Messenger messengerToService = null-MyIncomingHandler myIncomingHandler = new MyIncomingHandler () - Messenger messengerFromService = new Messenger (myIncomingHandler) -ServiceConnection Verbindung = new MyServiceConnection () - SharedPreferences Prefs-boolean isBound = false-Leere bind () { Intent Absicht = new Intent () - intent.setAction ( "com.allmycode.WEATHER") - isBound = bindService (Vorsatz, Verbindung, Context.BIND_AUTO_CREATE) -} public void Query () {if (isBound) {Bündel Bündel = new Bundle () - bundle.putString ( "location", "Philadelphia") - Nachricht = Message.obtain () - message.replyTo = messengerFromService-message.setData (Bündel) -try {messengerToService.send (Nachricht) -} catch (Remote e) {e.printStackTrace () -}} else {textView1.setText (R.string.service_not_bound) -}} Klasse MyIncomingHandler erweitert Handler {@Overridepublic Leere handle (Message msg) {Bündel Bündel = msg.getData () -textView1.setText (bundle.getString ( "Wetter")) -}} void unbind () {if (isBound) {unbindService (Verbindung) -isBound = false -}} Klasse MyServiceConnection implementiert ServiceConnection {public void onServiceConnected (Componentclassname, IBinder Bindemittel) {messengerToService = new Messenger (Bindemittel) -} public void onServiceDisconnected (Component n) {messengerToService = null -}} // I enthalten nicht die onCreate-Methode oder die // onclick Methode in diesem Beispiel}.

Natürlich überlebt keine App ohne einige Elemente in der Manifest-Datei. Um dieses Abschnitts Dienst registrieren lassen, müssen Sie ein Element der folgenden Art:

Broadcast-Empfänger

Wenn Sie eine Sendung machen, schleudern Sie eine Absicht in die Wildnis aus. Broadcast-Empfänger mit kompatiblen Absicht Filter aufwachen und etwas Sinnvolles tun mit der Broadcast-Informationen. (Nach etwas mit der Sendung info tun, geht der Empfänger in den Schlaf zurück. In meinem nächsten Inkarnation, ich will ein Rundfunkempfänger zu sein.)

Um einen eigenen Rundfunkempfänger zu erstellen, erweitern Sie Android Rundfunkempfänger Klasse und erklären Sie, ein OnReceive Verfahren. Zum Beispiel reagiert der folgenden Code, um passende Sendungen:

public class MyReceiver erweitert BroadcastReceiver {@Overridepublic Leere OnReceive (Context Kontext Intent Absicht) {// wichtigen Sachen Do}}

Eine weitere App erstellt eine Sendung mit dem Code der folgenden Art:

Intent Absicht = new Intent () - intent.setAction ( "com.allmycode.ACTION") - sendBroadcast (Vorsatz) -

Sie können einen Rundfunkempfänger in Ihrem registrieren AndroidManifest.xml Datei:

Für mehr Flexibilität können Sie einen Empfänger in Ihrem Java-Code registrieren. Das folgende Java-Code macht im Wesentlichen, was das Element in ein AndroidManifest.xml Datei wird:

IntentFilter filter = new IntentFilter () - filter.addAction ( "com.allmycode.ACTION") - registerReceiver (neu MyReceiver (), Filter) -

Content-Provider

AN Content-Provider macht Daten der App zur Verfügung zu anderen Anwendungen, die auf dem gleichen Gerät ausgeführt werden. Die Provider-Schnittstelle ähnelt einer Datenbank der Schnittstelle, mit Tabellen, Zeilen, Cursor, und alles, was gute Sachen. Zum Beispiel, um den Code, um einen Content-Provider abfragen sieht wie folgt aus:

public Cursor Abfrage (Uri uri, String [] Spalten, String Whereclause, String [] whereArgs, String sortOrder) {Cursor Cursor = null-int code = uriMatcher.match (uri) -wenn (Code == 1) {cursor = db .query (Simple, Säulen, Whereclause, whereArgs, null, null, sortOrder) -} else if (Code == 2) {String [] column = { "_id", "Name", "Menge"} -string [] rowValues ​​= { "Table", "4", "2"} -MatrixCursor matrixCursor = new MatrixCursor (column) -matrixCursor.addRow (rowValues) -cursor = matrixCursor-} return Cursor-}

Fragmente

EIN Fragment eine Ansicht ist, wie - eine sichtbare Sache, die Sie innerhalb einer Aktivität anzeigen. Aber im Gegensatz zu dem Ziel, hat ein Fragment seinen eigenen Lebenszyklus Methoden. So können Android ein wenig Stapel von Fragmenten innerhalb einer Aktivität erstellen. Wenn der Benutzer die Zurück-Taste drückt, öffnet sich Android ein Fragment aus dem Stapel. (Wenn es keine Fragmente sind zu Pop, knallt Android die gesamte Aktivität von der Aufgabe Stapel.)

Sie können ein Fragment in den folgenden Frame-Layout setzen:

Um ein Fragment in das Layout setzen, führen Sie ein Fragment Transaktion. Hier ist, was ein Fragment Transaktion wie folgt aussieht:

DocsFragment docsFragment = DocsFragment.newInstance (Index) -FragmentManager fragmentManager = getFragmentManager () - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction () - fragmentTransaction.replace (R.id.docs, docsFragment) -fragmentTransaction.addToBackStack (null) -fragmentTransaction.commit ( ) -

Intents und Intent-Filter

Wenn eine Absicht, die Rechte Intent-Filter erfüllt, ist das Ergebnis ein Spiel in den Himmel. Aber die Regeln für Absichten mit Filter passend sind kompliziert. Die Regeln lesen, wie die gesetzlichen Bestimmungen in einem Ehevertrag.

Sie können Java-Methoden verwenden, um eine Absicht zu beschreiben. Hier sind einige häufig verwendete Methoden:

  • setAction: Legt die Aktion der Absicht. (Eine Absicht kann nur eine Wirkung haben.)

  • Kategorie hinzufügen: Fügt eine Kategorie der Absicht. (Eine Absicht kann viele Kategorien haben.)

  • setdata: Legt die URI des Vorsatzes, und entfernt den MIME Typ der Absicht (wenn die Absicht hat, einen MIME-Typ).

  • setType: Legt den MIME Typ der Absicht und entfernt die URI des Vorsatzes (wenn die Absicht hat, eine URI).

  • setDataAndType: Setzt sowohl die URI des Vorsatzes und der MIME-Typ Absicht. Nach der Dokumentation "Diese Methode sollte nur sehr selten verwendet werden."

Sie können auch XML-Code verwenden, um eine Absicht zu beschreiben.

In der URI https://allmycode.com:80/android, die Regelung http, der Wirt allmycode.com, der Hafen 80, und der Pfad ist androide. Die Autorität (der nicht eines der Attribute in einem Element ist, aber ist nützlich zu wissen) ist allmycode.com:80.

Sie setzen typischerweise eine Intent-Filter die Werte in der AndroidManifest.xml Datei. Aber in Java-Code, der android.content.IntentFilter Klasse hat viele nützliche Methoden. Hier sind einige von ihnen:

  • addAction: Fügt eine Aktion des Filters.

  • Kategorie hinzufügen: Fügt eine Kategorie zu dem Filter.

  • addDataScheme: Fügt ein Schema zu dem Filter.

  • addDataAuthority: Fügt eine Behörde zu dem Filter.

  • addDataPath: Fügt einen Pfad zu dem Filter.

  • addDataType: Fügt einen MIME-Typ zu dem Filter.

Eine Intent-Filter können viele Aktionen, viele Kategorien haben, und so weiter.

Hier ist eine kurze Liste der Anforderungen für eine Übereinstimmung zwischen einer Absicht und einem Intent-Filter. Diese Liste ist nicht so vollständig, wenn Sie eine vollständige Liste wollen, sollten Sie besser kaufen Android Application Development All-in-One For Dummies von Barry Burd.

  • Wenn eine Absicht eine Aktion, um die Absicht zu entsprechen, eine Intent-Filter muss eine identische Wirkung haben. Die Absicht Filter kann zusätzliche Aktionen haben. Jeder dieser zusätzlichen Maßnahmen haben keine Auswirkung auf das Spiel.

  • Wenn eine Absicht Kategorien hat, um die Absicht zu entsprechen, muss ein Intent-Filter haben diese (und möglicherweise mehr) Kategorien.

  • Wenn eine Absicht einen MIME-Typ hat, um die Absicht zu entsprechen, muss ein Intent-Filter eine passende MIME-Typ haben. Die Absicht Filter können zusätzliche MIME-Typen haben. Jede dieser zusätzlichen MIME-Typen haben keine Auswirkungen auf das Spiel.

  • Wenn eine Intent-Filter MIME-Typen hat, um die Absicht Filter anzupassen, muss eine Absicht, einen MIME-Typ und den MIME Typ der Absicht muss eines der Filter des MIME-Typen entsprechen.

  • In begrenztem Umfang kann die Anpassung von MIME-Typen Platzhalter und reguläre Ausdrücke beinhalten.

  • Wenn eine Absicht, eine URI-Schema hat, um die Absicht zu entsprechen, eine Intent-Filter muss eine passende URI-Schema haben.

  • Wenn eine Intent-Filter URI-Systeme hat, um die Absicht Filter anzupassen, muss eine Absicht, eine URI-Schema haben und die URI-Schema Absicht muss eines der Filter des URI-Systeme entsprechen.

Um diese Liste zu beenden, kopieren Sie die letzten zwei Regeln, ein Wort oder zwei in jeder der Kopien zu ändern:

  • Wenn eine Absicht hat, eine URI Gastgeber, um die Absicht zu entsprechen, muss ein Intent-Filter eine passende URI Gastgeber.

  • Wenn ein Intent-Filter hat URI Gastgeber, um die Absicht Filter anzupassen, muss eine Absicht, eine URI Gastgeber und die Absicht des URI Gastgeber muss einer der URI des Filters entsprechen Gastgebers.

  • Wenn eine Absicht hat, eine URI Port, um die Absicht zu entsprechen, muss ein Intent-Filter eine passende URI Port.

  • Wenn ein Intent-Filter hat URI Häfen, um die Absicht Filter anzupassen, muss eine Absicht, eine URI Port und die Absicht des URI Port muss einer der URI des Filters entsprechen ports.

  • Wenn eine Absicht hat, eine URI Pfad, um die Absicht zu entsprechen, muss ein Intent-Filter eine passende URI Pfad.

  • Wenn ein Intent-Filter hat URI Pfade, um die Absicht Filter anzupassen, muss eine Absicht, eine URI Pfad und die Absicht des URI Pfad muss einer der URI des Filters entsprechen Pfade.

Menü