Android Development
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
8,412
On Slideshare
8,396
From Embeds
16
Number of Embeds
2

Actions

Shares
Downloads
278
Comments
2
Likes
2

Embeds 16

http://www.slideshare.net 15
http://translate.googleusercontent.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • -> Vorstellung 30 sek
  • Thomas   -> Agenda 30 sek
  • Thomas   -> Agenda 30 sek
  • Thomas   -> Agenda 30 sek
  • Thomas   -> Ein Betriebssystem für mobile Endgeräte       Beispielgeräte/hersteller.     Mehr als Betriebssystem... -> Entwickelt von der Open Handset Alliance       65 Unternehmen, Netzbetreiber, Software-Firmen, Marketing-Firme, Geräte-Hersteller, unter Goole   -> Unter Apache und GPL Lizenz (Open Source)        klar...    ->  Basiert auf Linux-Kernel und Java       klar...+Dalvik -> Gute Integration in die Google-Cloud       Kalender, Mail, Kontakte 1 min
  • Thomas   -> Multitasking       klar... -> Vielfalt an unterstützter Hardware       Keine proprietäre Software, Abstraktionsschichten, Geräteverwaltung       Viel Aktorik: Beschleunigungssensor, Kompass, GPS, WiFi, Bluetooth, Beleuchtungssensor -> Entwicklerfreundlich (Java)        Keine neue Sprache, Hochsprache, Gute Entwicklungsumgebung, gewohnte Werkzeuge   -> Durchgängig durchdachte Security       sandboxing, jede app in eigener vm, permissions -> Reichhaltiges Angebot an Apps       Fast 50.000 im offiziellen Google Market, Sekündärmärkte verfügbar      Bsp.: andappstore.com         slideme.org         handandgo.com     Anmeldung: 25$     nach Registration: upload vom Handy aus     -> Internet-Optimiert (Social Networking        Mail, Messenger, Facebook und co., Browser, Telefon rückt in den Hintergrund (kleineres Netbook mit Telefon)   -> Google-Integration       Synchronisation mit Kalender, Mail und Kontakte     -> Open Source         ...klar   2 min
  • Thomas -> Google-Integration       Guter voller Funktionsumfang nur mit Google-Diensten   ->  Taskverwaltung       Programme lassen sich oft nicht explizit beenden (ohne Taskkiller)     Sollte aber eigentlich nicht nötig sein...da android automatisch killt       Nur indirekte Wechsel über GUI.   -> Gerätevielfalt         Muss Hardware vieler Hersteller unterstützen. HAL nötig. -> Langsamer (theoretisch) -> VM (keine JIT-Kompilierung)   JIT kompiliert teilstücke von class-files vor runtime, statt sie zu interpretieren 1 min
  • Thomas -> Development Tools 30 sek
  • Thomas   ->dx        *.dex executable für dalvik vm     dx baut aus class-bytecode bytecode für dalvik-vm  explizite nutzung   -> apkbuilder     *.apk packages beihnhalten alle nötigen daten für app (quasi-installationsdatei) (resources+dex-classes) explizite nutzung ->adb     Android Debug Bridge     Client auf development-pc     Server auf development-pc (daemon)     Client auf Target (real oder avd)(daemon) explizite nutzung +telefon komplett bedienen ->layoutopt     optimiert, validiert layout commandline-tool   -> Dominik jeztt Eclipse 3 min sum: 9 min     
  • Thomas Bestandteil des SDK.   Java-Programm. Verwaltet API-Versionen.   Verwaltet Google-API's, nötig für Google Maps.   Verwaltet Virtual Devices (AVD-Android Virtual Device) Path für Eclipse (bzw. allgemein AVD-Manager und andere Tools) setze. 1 min
  • Dominik AVD Anlegen 30 sek
  • Dominik gestarter Emulator 30 sek
  • Dominik  30sek Standard Eclipse ansicht kennt jeder Java Entwickler
  • Dominik   30sek Applikation Starten  -> Device Chooser
  • Dominik DDMS View Device Ansicht mit Prozessen, Heap, Allocation Tracker, Threads, File Explorer Performance Löcher und Bugs finden LogCat kommt gleich 30 sek
  • Dominik Debug View lässt sich auch ganz normal starten  Bekannt aus Java Entwicklung + LogCat LogCat gibt Android Logs aus, ähnlich einem consolen appender in Log4J 1 min
  • Dominik Vollwertiger Gui Designer    Links Komponents  und Properties Rechts View-Hirachie     wird später im Detail drauf eingegangen 30 sek
  • Dominik Android Manifest, Alle wichtigen Meta informationen für die Applikation. gehen wir später drauf ein 30 sek sum: 14,5 min
  • Thomas -> Architektur 0 sek
  • Thomas -> Linux-Kernel        Version 2.6        System-Dienste        security, memory management, process management, network stack, and driver model.       HAL für restlichen Softwarestack -> Android Runtime       Für jede Applikation eigene Dalvik-VM  (Mehrere Instanzen pro Gerät)     Core-Libraries (nur teilmenge der, der Java-VM)     Es fehlt z.B. print, rmi, awt/swing     Anderer Release-Zyklus (hinterher, momentan java 1.5)       Java Vm basiert auf Kellerautomat, Dalvik VM auf Registermaschine (CPU auch). Dalvik in der Hinsicht besser     Umwandlung durch dx -> Libraries (C/C++)     Surface Manager: Display I/O, Bringt 2d und 3d auf display zusammen     Media Framework: Media Codecs (Bilder, Video, Audio)     SQLite: Relationelle Datenbank, Zugriff für alle Applikationen     OpenGL: 3d Engine (Software, wahlweise hardware-beschleunigung)     FreeType: Bitmap und Vektor-Rendering (Schriften)     WebKit: HTML-Rendering Bibliothek     SGL: 2d engine     SSL: secure socket layer protocol...klar     libc: Standard C Lib       NDK: native development tools: für performance-kritische anwendungen zugriff auf c-libs    -> Applikation Framework     Activity-Manager: Verwaltet Activities     Window-Manager: Verwaltet Windows       Content-Providers: Stellen Daten zur Verfügung     View-System: Verwaltet Views     Package-Manager: Verwaltet installierte Apps     Telephony-Manager: Zugriff auf Telefonie-status und service      Resource-Manager: Verwaltet Zugriff auf nicht-code resourcen     Location-Manager: Verwaltet Zugriff auf Positions-Daten     Notification-Manager: events im hintergrund, led, statusleiste. 5 min     
  • Thomas -> Components: Bausteine für Applikation, unabhängig. Andere Apps können Bausteine benutzen (mit permission).       gleichzeitig auch immer eine klasse 30 sek sum: 20 min
  • Dominik   Logik, Kontrolle und Ansicht eines Screens (App-View) erbt von Acitivity Life-Cycle Methoden werden überschrieben um code einzubringen 30 sek
  • Dominik   onCreate() initalisierungen onStart() weitere reInitialisierung onResume() Animationen und Musik starten. onPause( Animation und Musik stoppen   onPause()  Activity wurde teilweise überlagert. onStop() Avitivty wurde vollständig überlagert. onDestroy() wird nur durch aufruf von finish! 4 min
  • Dominik laufen im Hintergrund  z.B. Mp3 Spieler kein UI erben von Service 30 sek
  • Dominik 2 Life-Cycles 1. Service läuft immer und muss sich selbst beenden 2. Service wird beenden wenn keine bins mehr da sind. 2 min
  • Dominik Regestrieren sich für Broadcasts Broadcasts werden vom System bei Ereignissen geschickt (SMS,Akku, Boot) erbt von BroadcastReceiver 1 min
  • Dominik Leim zwischen den App-Blöcken Explizite und Impliizite Intents explizite geben Klasse an implizite nur eine Action 2. methoden zum starten ohne und mit Result 2 min
  • Dominik     geben Context an jede Activity ist ein Context da Activitiy von Context erbt, darum meist "this" und aufzurufende Acitivity-Klasse 30 sek
  • Dominik Intent gibt eine Action und eine Data-URI an Android sucht die passende Acitivity anhand von definierten Filtern sehr Lose kopplung aber Laufzeitfehler möglich 2 min
  • Dominik   action  PICK schema content:// path de/myPath content://de/myPath   30 sek sum: 32,5 min
  • Thomas -> Resources: Nicht-code daten, sind auch in android selbst noch in der form da, verwaltung durch resource-manager ->projekt anlegen/öffnen   -> R.java   30 sek
  • Thomas   Ein Layout File pro View   Filename: [a-z0-9_.] res/layout   namespace 1 min
  • Thomas 30 sek
  • Thomas   Filename: [a-z0-9_.] res/values   einafchster fall: verwendung als text direkt in layout    "This'll work"This'll also work   3 min  
  • Thomas   30 sek
  • Thomas   Filename: [a-z0-9_.] res/values   einafchster fall: verwendung als text direkt in layout    "This'll work"This'll also work   weitere möglichkeiten: farbe,dimensionen html-formatierung 3 min
  • Thomas   Filename: [a-z0-9_.] res/drawables-hdpi,ldpi,mdpi   +nine-patch       4 min  
  • Thomas ....liber im Editor   Liegt in applikations-root-verzeichnis   was alles dazu?   3 min -> Demo Resources (5 min) sum 52,5 min
  • Thomas ....liber im Editor   Liegt in applikations-root-verzeichnis   was alles dazu?   3 min -> Demo Resources (5 min) sum 52,5 min
  • Thomas ....liber im Editor   Liegt in applikations-root-verzeichnis   was alles dazu?   3 min -> Demo Resources (5 min) sum 52,5 min
  • Thomas   -> 10 min
  • Thomas   -> 10 min
  • Thomas   -> 10 min
  • Thomas   -> 10 min
  • Thomas   -> 10 min
  • Thomas   -> 10 min
  • Thomas   -> 10 min
  • Thomas   sum 65,5 min -> demo über elemnt id's + findViews()
  • Thomas   sum 65,5 min -> demo über elemnt id's + findViews()
  • Thomas   sum 65,5 min -> demo über elemnt id's + findViews()
  • Thomas   sum 65,5 min -> demo über elemnt id's + findViews()
  • Thomas   sum 65,5 min -> demo über elemnt id's + findViews()
  • Thomas   sum 65,5 min -> demo über elemnt id's + findViews()
  • onStop()??? 30 sek Ein Paar Ausschnitte aus der API immer wieder Beispiel
  • Dominik 3 min
  • Dominik PDU = Packet Data Unit BEISPIEL 2 min + demo 3 min -> 5 min
  • Thomas  API-Key   7 min 97 min
  • Thomas  API-Key   7 min 97 min
  • Dominik http://code.google.com/intl/de-DE/android/maps-api-signup.html DEMO APPLIKATION STARTN 2 min + demo 3 min   +app-demo 2 min 10 min sum: 85 min
  • Dominik                 2 min folie 3 min demo   5 min  
  • Thomas  API-Key   7 min 97 min
  • Thomas  API-Key   7 min 97 min
  • public Cursor query (boolean distinct, String table, String[] columns,  String selection, String[] selectionArgs,   String groupBy,  String having, String orderBy,  String limit)
  • db : public synchronized SQLiteDatabase getReadableDatabase () 
  • public long insert ( String table, String nullColumnHack, ContentValues values)  nullColumnHack SQL doesn't allow inserting a completely empty row, so if initialValues is empty this column will explicitly be assigned a NULL value
  • Thomas   5 min
  • Thomas   ->Linux-Security auf Prozessebene       User/Groups - Permissions   -> Sanboxing     Jede App eigene VM     security-safety -> Application Signing       Jede App hat Zertifikat     Private Key von Developer     Keine Authority     Nur um App zu  identifizieren
  • Thomas     ->Standard-Applikation hat keine Permissions        klar...   -> Überprüfung während der installation.         User muss permissions geben. -> Beispiel     Permissions in AndroidManifest.xml
  • Thomas      
  • content://
  • -> Vorstellung 103 min!?

Transcript

  • 1. Android SDK Dominik Gätjens Thomas Maier
  • 2. Dominik Gätjens
      • Studiert Medieninformatik(B.Sc.) an der Hochschule der Medien Stuttgart seit 2007
    •  
      • Software-Entwicklung (insbesondere Java) seit 2004
    •  
      • Kontakt: dominik.gaetjens@googlemail.com
  • 3. Thomas Maier
      • Student der Medieninformatik (Bachelor of Science)
    •  
      • Softwareentwicklung in C/C++ und Java
    •  
      • Webentwicklung und manchmal auch hardwarenahe Softwareentwicklung
    •  
      • Kontakt: admin@derthomas.net
  • 4. Agenda
      •   Android Basics
      •   Entwicklungswerkzeuge
      •   Plattformarchitektur
      •   API
      •   Security
    •  
  • 5. Was ist Android?
      • Ein Betriebssystem für mobile Endgeräte
    •  
      • Entwickelt von der Open Handset Alliance
    •  
      • Unter Apache und GPL Lizenz (Open Source)
    •  
      • Basiert auf Linux-Kernel und Java (Dalvik-VM)
    •  
      • Gute Integration in die Google-Cloud
  • 6. Features
      •   Multitasking
      •   Vielfalt an unterstützter Hardware
      •   Entwicklerfreundlich (Java)
      •   Durchgängig durchdachte Security
      •   Reichhaltiges Angebot an Apps
      •   Internet-Optimiert (Social Networking)
      •   Google-Integration
      •   Open Source
  • 7. Einschränkungen
      •   Google-Integration
    •  
      •   Taskverwaltung
    •  
      •   Gerätevielfalt
    •  
      •   VM (keine JIT-Kompilierung)
  • 8. Development Tools SDK Emulator Eclipse
  • 9. Development Tools - SDK
      • dx (Dalvik Cross-Assembler)
    •  
      • apkbuilder (Android Package)
    •     
      • adb (Android Debug Bridge)
    •  
      • layoutopt (layout-optimizer)
    •  
  • 10. Development Tools - SDK
      • SDK and AVD Manager
  • 11. Development Tools - Emulator
      • Virtual Device Configuration
  • 12. Development Tools - Emulator
      • Virtual Device
  • 13. Development Tools - Eclipse
      • Java Perspektive
  • 14. Development Tools - Eclipse
      • Device Chooser
  • 15. Development Tools - Eclipse
      • DDMS (Dalvik Debug Monitor Server) Perspektive
  • 16. Development Tools - Eclipse
      • Debug View
  • 17. Development Tools - Eclipse
      • GUI Builder
  • 18. Development Tools - Eclipse
      • Configuration Editor
  • 19. Architektur
  • 20. Architektur
  • 21. Architektur - Components
      • Activity
    •  
      • Service
    •  
      • Broadcast Receiver
    •  
      • Content Provider
  • 22. Components - Activity
      • Repräsentiert Logik, Kontrolle und Ansicht eines "Screens"
    •  
      • Erbt von Klasse android.app.Activity
    •  
      • Durch überschreiben der Lifecycle-Methoden wird der eigene Code aufgerufen
    •  
  • 23. Components - Activity
  • 24. Components - Service
      • Läuft im Hintergrund
    •  
      • Kein User-Interface
    •  
      • Erbt von Klasse android.app.Service
    •  
  • 25. Components - Service
  • 26. Components - Broadcast Receiver
      • Registriert sich für den Emfang von Broadcasts
    •  
      • Beispiel: SMS-Empfang
    •  
      • Erbt von Klasse android.content.BroadcastReceiver
    •  
  • 27. Intents
      • Der Leim, der die Applikationsblöcke verbindet
    •  
      • Explizite und implizite Intents
    •  
      • startActivity(Intent i)
    •  
      • startActitivtyForResult(Intent i) -> onActivityResult()
  • 28. Explizite Intents
    • Intent i = new Intent(context,NewAcitivity.class)
      • Definiert anhand des Class-Objektes genau welche Acitivity ausgelöst werden soll
  • 29. Implizite Intents
    • Intent i = new Intent(Intent.ACTION_DIAL,
    •                      Uri.parse("tel:12345");
    •  
      • Intent definiert eine Action und eine Data-URI
      • Android überprüft ob es dafür passende Activitys gibt und ruft diese auf
      • Es ist eine sehr lose Kopplung zwischen Komponenten möglich, jedoch muss mit Laufzeitfehlern gerechnet werden wenn keine passende Activity vorhanden ist.
    •  
  • 30. Intent Filter <activity android:name=&quot;.MyActivity&quot;>     <intent-filter>         <action android:name=&quot;android.intent.action.PICK&quot;/>         <data android:path=&quot;de/myPath&quot;                android:scheme=&quot;content&quot;/>     </intent-filter> </activity>
  • 31. Resources
  • 32. Resources - Layout <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <LinearLayout xmlns:android=                  &quot;http://schemas.android.com/apk/res/android&quot;               android:layout_width=&quot;fill_parent&quot;               android:layout_height=&quot;fill_parent&quot;               android:orientation=&quot;vertical&quot; >     <TextView android:id=&quot;@+id/mytextview&quot;               android:layout_width=&quot;wrap_content&quot;               android:layout_height=&quot;wrap_content&quot;               android:text=&quot;Hello World&quot; /> </LinearLayout>
  • 33. Resources - Layout
  • 34. Resources - Values ... <TextView android:id=&quot;@+id/mytextview&quot;               android:layout_width=&quot;wrap_content&quot;               android:layout_height=&quot;wrap_content&quot;               android:text=&quot;@string/hello&quot;               /> ... <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <resources>     <string name=&quot;hello&quot;>Hello World</string> </resources>
  • 35. Resources - Values
  • 36. Resources - Values ... <TextView android:id=&quot;@+id/mytextview&quot;               android:layout_width=&quot;wrap_content&quot;               android:layout_height=&quot;wrap_content&quot;               android:text=&quot;@string/hello&quot;               android:textColor=&quot;@color/translucent_red&quot;               android:textSize=&quot;@dimen/hello_size&quot;               /> ... <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <resources>     <string name=&quot;hello&quot;>Hello <b>World</b></string>      <color name=&quot;translucent_red&quot;>#80ff0000</color>      <dimen name=&quot;hello_size&quot;>16px</dimen>   </resources>
  • 37. Resources - Drawables Verwendung mit  Resources.getDrawable(R.drawable.example)
      • Bilder
    Beispiel: res/drawable/example.jpg
      • Color Drawables (Rechteck, optional runde Ecken)
    <resources>     <drawable name=&quot;solid_red&quot;>#f00</drawable> </resources> <TextView android:layout_width=&quot;fill_parent&quot;           android:layout_height=&quot;wrap_content&quot;           android:textAlign=&quot;center&quot;           android:background=&quot;@drawable/solid_red&quot;/>
  • 38. Resources - AndroidManifest.xml
      • Manifest
  • 39. Resources - AndroidManifest.xml
      • Application
  • 40. Resources - AndroidManifest.xml
      • Permissions
  • 41. GUI-Elemente
  • 42. GUI-Elemente
      • Frame-Layout
    •  
        • Element positioniert sich automatisch links-oben
    •  
        • Gut für Fullscreen-Anwendungen
    •  
        • Keine Positionierung möglich
  • 43. GUI-Elemente
      • Absolute-Layout
    •  
        • Element positioniert sich nach Angabe über die x- und y-Koordinaten
    •  
        • Koordinaten beziehen sich auf Elternelement
    •  
  • 44. GUI-Elemente
      • Linear-Layout
    •  
        • Reiht die Elemente wahlweise horizontal oder vertikal hintereinander auf
  • 45. GUI-Elemente
      • Table-Layout
        • Bildet eine Tabelle ab
  • 46. GUI-Elemente
      • Relative-Layout
        • Elemente können in Abhängigkeit von der Position anderer Elemente positioniert werden
  • 47. GUI-Elemente
      • Relative-Layout
    ... <RelativeLayout...      <Button ...              android:id=&quot;@+id/myButton1&quot;              android:layout_centerInParent=&quot;true&quot;             ...     />     <Button ...              android:id=&quot;@+id/myButton2&quot;             android:layout_toRightOf=&quot;@+id/myButton1&quot;              android:layout_alignTop=&quot;@id/myButton1&quot;     /> </RelativeLayout> ...
  • 48. GUI-Elemente
      • GUI-Elemente sind hierarchisch angeordnet
  • 49. GUI-Elemente
      • TextView
    •  
    •  
      • Button
    •  
    •  
      • EditText
    •  
  • 50. GUI-Elemente
      • CheckBox
    •  
    •  
      • RadioButton
    •  
    •  
      • DatePicker
    •  
  • 51. GUI-Elemente
      • Properties
    •  
    •  
    •  
    •  
      • Access in Java
      • Properties
    •  
    •  
    •  
    •  
      • Access in Java
    <Button ...     android:layout_width=&quot;wrap_content&quot;     android:layout_height=&quot;wrap_content&quot;      android:textColor=&quot;#ff0000&quot;       android:id=&quot;@+id/Button1&quot;     android:text=&quot;Button&quot;     ... />    <TextView ...      android:layout_width=&quot;fill_parent&quot;      android:layout_height=&quot;wrap_content&quot;      android:text=&quot;@string/content&quot;      android:id=&quot;@+id/Text1&quot;      android:textSize=&quot;14dip&quot;     ... /> private Button button1; ...   button1 = (Button) findViewById(R.id.Button1); ... button1.setOnClickListener(new OnClickListener() {      public void onClick(View v) {         doAction();     } }); ... private TextView text1; ...   text1 = (TextView) findViewById(R.id.Text1); ... text1.setText(newText); ...
  • 52. GUI-Elemente
      • Menus
    public boolean onCreateOptionsMenu(Menu menu) {     menu.add(0, 1, 0, &quot;Item1&quot;);     menu.add(0, 2, 0, &quot;Item2&quot;);     return true; } public boolean onOptionsItemSelected(MenuItem item) {     switch (item.getItemId()) {     case 1:         action1();         return true;     case 2:         action2();         return true;     }     return false; }
  • 53. GUI-Elemente
      • Maßeinheiten
      • px (Pixels)
      • in (Inches)
      • mm (Millimeters)
      • pt (Points)
      • dip (Density-independent Pixels)
        • Ein dip entspricht einem Pixel auf einem 160dpi Screen
      • sp (Scale-independet Pixels)
        • Wie dip-Einheit, allerdings zusätzlich abhängig von der Schriftgröße der Benutzereinstellung
    •  
  • 54. API SMS Location Map Sensors
  • 55. SMS senden
      • SmsManger.getDefault()
    •  
      • sendTextMessage( String dest, //Empfänger-Nummer String serviceCenter, //SMS-Service Center (null) String text, //Text PendingIntent sentIntent, //Gesendet Feedback PendingIntent deliveryIntent  
    •       //Angekommen Feedback
    •      )
  • 56. SMS empfangen
      • erstellen eines BroadcastReceivers  
      • dieser erhält ein Intent mit einem Bundle &quot;pdus&quot;
      • PDU-Rohdaten lassen sich mittels SmsMessage.createFromPdu(byte[] pdu) in ein SmsMessage Objekt umwandeln
      • Den erstellten BroadcastReceiver in der AndroidManifest.xml registrieren
    •  
    •  
    <receiver android:name=&quot;SmsReceiver&quot;> <intent-filter> <action android:name=&quot;android.provider.Telephony.SMS_RECEIVED&quot; /> </intent-filter> </receiver>
  • 57. Maps <LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;     android:id=&quot;@+id/main&quot;     android:layout_width=&quot;fill_parent&quot;     android:layout_height=&quot;fill_parent&quot;>     <com.google.android.maps.MapView         android:id=&quot;@+id/map&quot;         android:layout_width=&quot;fill_parent&quot;          android:layout_height=&quot;fill_parent&quot;         android:enabled=&quot;true&quot;         android:clickable=&quot;true&quot;         android:apiKey=&quot;0yPsX1Tb93ThKLOA1zT5GtfuzoSYOP9C9G1Ojzg&quot;         />            </LinearLayout>
      • API-Key
    http://code.google.com/intl/de-DE/android/maps-api-signup.html $ keytool -list -keystore ~/.android/debug.keystore
  • 58. Maps public class MyMapView extends MapActivity {      private MapView map;     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.maplayout);         map =(MapView) findViewById(R.id.map);          map.setBuiltInZoomControls(true);          MapController mapController = map.getController();         GeoPoint geoPoint = new GeoPoint(coordinates[0],coordinates[1]);         mapController.setCenter(geoPoint);         mapController.setZoom(14);       }     protected boolean isRouteDisplayed() {           return false;      } }
  • 59. Location
      • LocationManager lm = getSystemService(LOCATION_SERVICE)
      • String provider = lm.getBestProvider(Criteria c, 
    •      boolean enabled)
      • Location location = lm.getLastKnownLocation(
    •      String provider)
  • 60. Sensors
      • SensorManager sm = getSystemService(SENSOR_SERVICE)
      • sm.registerListener(sensorEventListener, 
    •          sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), 
    •          SensorManager.SENSOR_DELAY_NORMAL
    •          );
      • Sensortypen: Orientation, Accelerometer, Light, Magnetic Field, Pressure, Proximity, Temperature, Gyroscope
  • 61. Dateisystem
      • Anwendungsverzeichnis im Telefonspeicher
    •      File file = context.getDir(&quot;sms&quot;,Context.MODE_PRIVATE);
      • /data/data/de.hdm.smssender/app_sms 
    •  
    •  
      • Zugriff auf SD-Karte mit Java I/O im Pfad  /sdcard
  • 62. SQLite Datenbank erstellen public class SmsDB extends SQLiteOpenHelper {     private static final String DATENBANK_NAME = &quot;sms.db&quot;;     private static final int DATENBANK_V = 1;        public SmsDB (Context context) {         super( context, DATENBANK_NAME , null, DATENBANK_V );     }      public void onCreate(SQLiteDatabase db) {         db.execSQL(&quot;CREATE TABLE ...&quot;);     }        public void onUpgrade (SQLiteDatabase db,int oldV ,int newV){         db.execSQL(&quot;DROP TABLE ...&quot;);         onCreate(db);     } }
  • 63. SQLite Abfrage Cursor cursor = db.query(     false, // distinct     DATABASE_TABLE, // TABLE     new String[] {KEY_SMS, KEY_NR}, // SELECT     KEY_NR+&quot; = ?&quot;, // WHERE-Bedingung     new String[] {&quot;0171 23456&quot;}, // Parameter für WHERE     null, // GROUP BY     null, // HAVING     null, // ORDER BY     null // LIMIT );
  • 64. SQLite Abfrage 2
    • Cursor bielefeldRouten = db.rawQuery(     &quot;SELECT &quot;+KEY_SMS+&quot;, &quot;+KEY_NR+&quot; &quot;+     &quot;FROM &quot;+DATABASE_TABLE+&quot; &quot;+     &quot;WHERE &quot;+KEY_NR+&quot; = ? &quot;,     new String[] { &quot;0171 23456&quot; } );
      • Reines SQL (minimal schneller als OO-Variante)
  • 65. SQLite Abfrage 3 startManagingCursor(cursor); if(cursor.moveToFirst()){     String foo = cursor.getString(0);     display(foo); } ContentValues initialValues = new ContentValues(); initialValues.put(KEY_SMS, &quot;Hallo, Welt&quot;); initialValues.put(KEY_NR, &quot;0171 123456&quot;); db.insert(DATABASE_TABLE, null, initialValues);
  • 66. Security
  • 67. Security
      •   Linux-Security auf Prozessebene
      •   Sandboxing
      •   Application Signing
  • 68. Security - Permissions
      • Standard-Applikation hat keine Permissions
      • Überprüfung während Installation
    <uses-permission android:name=&quot;android.permission.RECEIVE_SMS&quot; />
  • 69. Security - Permissions android.permission.INTERNET   android.permission.BLUETOOTH   android.permission.READ_CONTACTS   android.permission.SEND_SMS   android.permission.VIBRATE
  • 70. Literatur
      • Android Application Development: Programming with the Google SDK - Rock Rogers, John de Lombardo, Ziquard Mednieks, Meike Blake (ISBN: 978-0596521479)
      • Hello Android: Introducing Google's Mobile Development Platform - Ed Burnette, Susannah Davidson Pfalzer ( ISBN: 978-1934356494)
      • Android: Grundlagen und Programmierung - Arno Becker, Marcus Pant (ISBN: 978-3898645744)
      •   http://developer.android.com
  • 71. Android SDK Dominik Gätjens Thomas Maier Fragen? Vielen Dank für die Aufmerksamkeit :-)