Download
jochen hiller deutsche telekom ag bernd kolb kolbware n.
Skip this Video
Loading SlideShow in 5 Seconds..
Android for Java Developers PowerPoint Presentation
Download Presentation
Android for Java Developers

Android for Java Developers

165 Views Download Presentation
Download Presentation

Android for Java Developers

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Jochen Hiller | Deutsche Telekom AG Bernd Kolb | Kolbware Android for Java Developers

  2. Android for Java Developers Source: http://duke.kenai.com/misc/DukePhoning.png

  3. About Us • Jochen Hiller • jo.hiller@googlemail.com • Bernd Kolb • b.kolb@kolbware.de

  4. Introduction

  5. What is Android?

  6. Software for making phone calls Image by Mike Licht: http://farm2.static.flickr.com/1264/869847216_72511aa360.jpg Licensed under Creative Commons Attribution 2.0 Generic

  7. A network stack and Internet client Image by compscigrad: http://farm4.static.flickr.com/3103/3200982454_8a25ed6e84.jpg Licensed under Creative Commons Attribution 2.0 Non-Commercial Share-Alike

  8. A platform for running code Image by Andy F: http://www.geograph.org.uk/photo/1525054 Licensed under Creative Commons Attribution Share-Alike 2.0

  9. What else is Android? The first complete, open and free mobile platform.* • Open: Android source code available • Free: Licensed under Apache 2.0 • Hardware vendor independent • Initiated by Google * Free according Google license agreements

  10. The Android Architecture

  11. Some characteristics • based on Linux 2.6.x kernel • Mobile Hardwaresupport (GSM, WiFi,GPS, Camera,Bluetooth, USB, ...)‏ • Integrated Browser (WebKit Engine)‏ • Graphics (OpenGL/ES), DB, Media, ... Support • Dalvik Virtual Machine

  12. What is Dalvik?

  13. What Where is Dalvik?

  14. What Where is Dalvik?

  15. Dalvik was written by Dan Bornstein, who named it after the fishing village of Dalvík in Eyjafjörður, Iceland, where some of his ancestors lived. Source: Wikipedia, http://en.wikipedia.org/wiki/Dalvik_virtual_machine

  16. Dalvik – An Overview • Dalvik is a Virtual Machine,like JVM, .NET CLR • Register-based VM, not stack based. Optimized for embedded environments • Memory-protection, memory-optimized • Garbage-collection supported • Lifecycle management of applications • Clever: Translator (dx) from Java bytecode to Dalvik bytecode

  17. Runtime – Core Libraries • Java required core packages(java.*) • Android specific libraries in android.* namespace • Java libraries based on Apache Harmony and other Open Source implementations • Most Java 1.5 language features supported • Java based application framework

  18. Application Framework • Views, Layout Manager – UI elements • Activities – screen of an Android application • Intents – provide / requests services from other applications • Resource Manager – handles all text and graphical resources in an optimized way • Services – background activities • Content Providers – provides data to applications

  19. Create and run project

  20. Project layout • R.java generated from res folder, compiled code references to resources • Layout, values, resources may be density / locale dependent • Resources may be localized • Assets for all static resources (media, html, JavaScript, other web resources, …)

  21. AndroidManifest.mf <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=http://schemas.android.com/apk/res/androidpackage="hello.android“android:versionCode="1“android:versionName="1.0"> <applicationandroid:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest>

  22. AndroidManifest.mf Reference to drawable resources Reference to external text resources <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=http://schemas.android.com/apk/res/androidpackage="hello.android“android:versionCode="1“android:versionName="1.0"> <applicationandroid:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest> “Main” activity to be launched when starting app API compatibility Activity may start app. It will be present in app launcher

  23. Activity Lifecycle • on<Method> Callbacks • Android may kill process due to lacking resources • onPause/onResume: persist ad restore state • onStart/onStop: act. Is visible / hidden to the user

  24. HelloActivity.java package hello.android; import android.app.Activity; import android.os.Bundle; publicclass HelloActivity extends Activity { publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button aboutButton = (Button) findViewById(R.id.about); aboutButton.setOnClickListener(new View.OnClickListener() { publicvoid onClick(View v) { Log.e("hello", "about button clicked"); showDialog(DIALOG_ABOUT); } }); } }

  25. HelloActivity.java onCreate: set content view Reference to an view id package hello.android; import android.app.Activity; import android.os.Bundle; publicclass HelloActivity extends Activity { publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button aboutButton = (Button) findViewById(R.id.about); aboutButton.setOnClickListener(new View.OnClickListener() { publicvoid onClick(View v) { Log.e("hello", "about button clicked"); showDialog(DIALOG_ABOUT); } }); } } Logging with category, message

  26. UI: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/about“ android:text="@string/about.button" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

  27. UI: main.xml Reference to an view id <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/about“ android:text="@string/about.button" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> Reference to external text resources

  28. Resources: res/values/strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, HelloAndroidActivity!</string> <string name="app_name">HelloAndroid</string> <string name="about.button">About</string> <string name="about.dialog.title">About</string> <string name="about.dialog.message"> Hello Android sample for W-JAX 2009 </string> <string name="about.dialog.ok_button">OK</string> </resources>

  29. Resources: res/values/strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, HelloAndroidActivity!</string> <string name="app_name">HelloAndroid</string> <string name="about.button">About</string> <string name="about.dialog.title">About</string> <string name="about.dialog.message"> Hello Android sample for W-JAX 2009 </string> <string name="about.dialog.ok_button">OK</string> </resources> Resources (like properties) May be localized (e.g. res/values-de/strings.xml)

  30. Tool chain Image by schillergarcia: http://www.flickr.com/photos/81576192@N00/2508086911/ Licensed under Creative Commons Attribution 2.0 Generic

  31. Tool chain • Android SDK (SDK r3) • Complete tool chain (emulator, shell, deployment tools, …) • Eclipse IDE (>=3.4) • Android Development Toolkit (ADT) (0.9.4) • Wizards, debugging, logging, emulator control • Supported for Win, Mac, Linux

  32. Unpack Android SDK

  33. Install ADT plugins

  34. Configure Android SDK

  35. Install SDK versions from Internet

  36. Configure Android Virtual Device

  37. Emulator

  38. Eclipse Plugin

  39. Debugging

  40. Location • LocationManager as a system service • Multiple LocationProvider (device dependent) • Network: based on WiFi hotspots triangulation • GPS: based on satellites • Choose best provider for criteria: • Accuracy, power consumption • LocationListener: track changes of location/providers • For energy efficiency: longer intervals for location update • Minimal location change for notification

  41. Location, Location • Application must express need for location access • User must give consent during installation process (only once!) • Extend AndroidManifest.mf for required permissions <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> Different accuracy may be requested

  42. Location, Location, Location // getlocationmanager LocationManagerlocManager = (LocationManager) getSystemService(LOCATION_SERVICE); // therearemoreproviders: network, gps List<String> providers = locManager.getAllProviders(); // choose best providerforaccurancy, power consumption Criteriacriteria = newCriteria(); criteria.setPowerRequirement(Criteria.POWER_LOW); String bestProvider = locManager.getBestProvider(criteria, true); // last location will becached Locationlocation = locManager.getLastKnownLocation(bestProvider); // register and unregister a locationlistener // Start updates (doc recommendsdelay >= 60000 ms) // 1 meansnotifywhenlocationchangemorethan 1 meter locManager.requestLocationUpdates(bestLocationProvider, 15000, 1, aListener); // Stopupdates to save power whileapppausedlocManager.removeUpdates(aListener);

  43. Geocoder • Handling geocoding and reverse geocoding • Requires a backend service (provided by Google) • Returns empty list when backend service is not available (latency time!) • Should be called in background thread

  44. Geocoder - API • publicGeocoder(Contextcontext) { ... }; • publicGeocoder(Contextcontext, Localelocale) { ... }; • publicList<Address> getFromLocation(doublelatitude, doublelongitude, • intmaxResults) { ... }; • publicList<Address> getFromLocationName( • String name, intmaxResults) { ... }; • publicList<Address> getFromLocationName( • String name, intmaxResults, • doublelowerLeftLatitude, doublelowerLeftLongitude, • doubleupperRightLatitude, doubleupperRightLongitude) { ... };

  45. SQLite • Android provides SQLite database • Security sandbox:Databases are visible to application only • /data/data/<appname>/databases • SQLite Helper classes implementation • Supports cursor for incremental data access • No JDBC layer! As simple as possible!

  46. SQLite – Sample code publicclassDBRouteextendsSQLiteOpenHelper { publicvoidonCreate(SQLiteDatabasedb) { db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_TIME + " INTEGER," + COLUMN_LONGITUDE + " NUMERIC, " + COLUMN_LATITUDE + " NUMERIC, " + COLUMN_ALTITUDE + " NUMERIC, " + COLUMN_DESCRIPTION + " TEXT);"); } publicvoidaddLocation(Locationloc, String desc) { // Insert a newrecordintothe route datasource. // Youwould do somethingsimilarfordelete and update. SQLiteDatabasedb = getWritableDatabase(); ContentValuesvalues = newContentValues(); values.put(COLUMN_TIME, System.currentTimeMillis()); values.put(COLUMN_LONGITUDE, loc.getLongitude()); values.put(COLUMN_LATITUDE, loc.getLatitude()); values.put(COLUMN_ALTITUDE, loc.getAltitude()); values.put(COLUMN_DESCRIPTION, desc); db.insertOrThrow(TABLE_NAME, null, values); } }