The Joind.in  Android App  A story about Android programming, API  compatibility and the lessons learned...#4developers - ...
Who am I?
Who am I?Joshua Thijssen (32)
Who am I?Joshua Thijssen (32)Senior Software Engineer @ Enrise
Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....
Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....Blogs: http://ww...
Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....Blogs: http://ww...
Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....Blogs: http://ww...
What is this talk about?‣ QUESTIONS? RAISE YOUR HAND OR YELL LOUD
What is this talk about?   The story about the joind.in website.‣ QUESTIONS? RAISE YOUR HAND OR YELL LOUD
What is this talk about?   The story about the joind.in website.   The story about the joind.in Android app.‣ QUESTIONS? R...
What is this talk about?   The story about the joind.in website.   The story about the joind.in Android app.   The story a...
What is this talk about?   The story about the joind.in website.   The story about the joind.in Android app.   The story a...
The story about joind.inhttp://joind.in/inc/img/splash.jpg
The story about joind.in (1)    Launched by Chris Cornutt    (phpdeveloper.org) in 2008    Adopted by Lorna Mitchell and o...
The story about joind.in (2)    A website for conference organizers and    attendees.    Find information and give feedbac...
The story about joind.in (3)    What events are currently happening?    Which talks are hot (or not)?    Should I see talk...
The story about the joind.in android app
The story about the joind.in android app (1)
The story about the joind.in android app (1)
The story about the joind.in android app (1) Simple buttons
The story about the joind.in android app (1) Simple buttons    Loaded in separate thread
The story about the joind.in android app (1) Simple buttons                        “viewrow” inside                       ...
The story about the joind.in android app (1) Simple buttons                        “viewrow” inside                       ...
The story about the joind.in android app (1)
The story about the joind.in android app (2)
The story about the joind.in android app (2)
The story about the joind.in android app (2)
The story about the joind.in android app (3)
The story about the joind.in android app (3)
The story about the joind.in android app (3)
The story about the joind.in android app (4)
The story about the joind.in android app (4)
The story about the joind.in android app (4)  Loaded from    gravatar / separate thread
The story about the joind.in android app (4)  Loaded from    gravatar / separate thread                                   ...
The story about the joind.in android app (4)
The story about the joind.in android app (5)    First (serious) android project    Open source    http://github.com/jaytap...
Mobile API connectivityhttp://www.flickr.com/photos/stevewilhelm/2591525747/sizes/l/in/photostream/
Mobile API connectivity (1)        CRM                     Accounting                          ERP‣ ISOLATED APPLICATIONS
Mobile API connectivity (1)        CRM                            Accounting         API                              API ...
Mobile API connectivity (1)                                           I haz yar info!                       Oh hai!       ...
Mobile API connectivity (2)                     Twitter                       API Facebook                      YourBlog
Mobile API connectivity (2)                     Twitter                       API Facebook                      YourBlog
Mobile API connectivity (2)                          Twitter                            API   Facebook                    ...
Mobile API connectivity (2)                      Twitter                          API                       Android   Face...
Mobile API connectivity (3)
Mobile API connectivity (4)Is your application REALLY ready for mobile connectivity?
Mobile API connectivity (5)     Mobile bandwidth is expensive.     Connectivity is slow and unreliable.     Client side pr...
Mobile API connectivity (5)     Not giving client what they want.     Updating your API will be harder.     BC breaks are ...
Mobile API connectivity (6)‣ PROBLEMS WITH THE JOIND.IN API
Mobile API connectivity (6)      Authentication‣ PROBLEMS WITH THE JOIND.IN API
Mobile API connectivity (6)      Authentication      Too much data being returned      (>300Kb per request)‣ PROBLEMS WITH...
Mobile API connectivity (6)      Authentication      Too much data being returned      (>300Kb per request)      No pagina...
Mobile API connectivity (6)      Authentication      Too much data being returned      (>300Kb per request)      No pagina...
Mobile API connectivity (6)      Authentication      Too much data being returned      (>300Kb per request)      No pagina...
Mobile API connectivity (7)    This will all change in the v2.0 API release.                       (hopefully)
Writing (native) Android applications
Writing (native) Android applications (1)
Writing (native) Android applications (1) ✓ Native (java) ✗ Non-native (php4android, html5/js)
Writing (native) Android applications (2)http://developer.android.com/guide/basics/what-is-android.html
Writing (native) Android applications (2) You are  herehttp://developer.android.com/guide/basics/what-is-android.html
Writing (native) Android applications (3)                 Activities                 Layouts                 Intentshttp:/...
Activities (1)http://developer.android.com/guide/basics/what-is-android.html
Activities (1)                 provides a screen with which a user                 can interact.http://developer.android.c...
Activities (1)                 provides a screen with which a user                 can interact.                 activitie...
Activities (2)http://developer.android.com/guide/basics/what-is-android.html
Activities (2)                 activity 1 startshttp://developer.android.com/guide/basics/what-is-android.html
Activities (2)                 activity 1 starts                          activity 2 starts & activity 1 pauzeshttp://deve...
Activities (2)                 activity 1 starts                          activity 2 starts & activity 1 pauzes           ...
Activities (2)                 activity 1 starts                          activity 2 starts & activity 1 pauzes           ...
Activities (3)‣ ACTIVITY LIFE CYCLE
Activities (3)‣ ACTIVITY LIFE CYCLE
Writing (native) Android applications (3)                 Activities                 Layouts                 Intentshttp:/...
Layouts (1)
Layouts (1)         Get stuff onto your display
Layouts (1)         Get stuff onto your display         Created as XML resources
Layouts (1)         Get stuff onto your display         Created as XML resources         “inflated” by android (costly)
Layouts (2)   LinearLayout     Single column or row   TableLayout      <table></table>   FrameLayout      <placeholder>   ...
Layouts (2)   LinearLayout     Single column or row   TableLayout      <table></table>   FrameLayout      <placeholder>   ...
Layouts (3)
Layouts (4)XML                                                            Light theme   Dark (normal) theme<?xml version="...
Writing (native) Android applications (3)                 Activities                 Layouts                 Intentshttp:/...
Intents (1)http://developer.android.com/guide/basics/what-is-android.html
Intents (1)                 “message queue” between different                 android components.http://developer.android....
Intents (1)                 “message queue” between different                 android components.                 Explicit...
Intents (2)
Intents (2)Start a new activity (explicit):   Intent myIntent = new Intent ();   myIntent.setClass(class.this, com.another...
Intents (2)    Start a new activity (explicit):         Intent myIntent = new Intent ();         myIntent.setClass(class.t...
Intents (2)    Start a new activity (explicit):         Intent myIntent = new Intent ();         myIntent.setClass(class.t...
Intents (2)    Start a new activity (explicit):         Intent myIntent = new Intent ();         myIntent.setClass(class.t...
Intents (3)
Intents (3)    Visit a website (implicit):	   	   Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.goo...
Intents (3)    Visit a website (implicit):	   	   Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.goo...
Intents (3)    Visit a website (implicit):	   	   Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.goo...
Intents (3)        Visit a website (implicit):	       	    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http:...
Intents (3)        Visit a website (implicit):	       	    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http:...
Intents (3)        Visit a website (implicit):	       	    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http:...
Nine-patch (1)
Nine-patch (1)
Nine-patch (1)   Scalable images that automatically resizes   according to the size of your display (view).
Nine-patch (2)http://www.pookiescreations.com/images/lrg%209%20patch%20kit%20005.jpg
Nine-patch (2)http://www.pookiescreations.com/images/lrg%209%20patch%20kit%20005.jpg
Nine-patch (3)http://www.pookiescreations.com/images/lrg%209%20patch%20kit%20005.jpg
Nine-patch (4)‣ ALMOST IMPOSSIBLE TO TELL THAT THIS IS PHOTOSHOPPED
Nine-patch (5)        ‣ A BETTER EXAMPLEhttp://developer.android.com/images/draw9patch-norm.png
Code exampleshttp://www.flickr.com/photos/oskay/472097903/
Code examples (1)res/layout/main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.a...
Code examples (2)package com.fourdevelopers;import android.app.Activity;import android.os.Bundle;public class Main extends...
Code examples (2)package com.fourdevelopers;            Activityimport android.app.Activity;import android.os.Bundle;publi...
Code examples (2)package com.fourdevelopers;            Activityimport android.app.Activity;                        Saved ...
Code examples (2)package com.fourdevelopers;            Activityimport android.app.Activity;                        Saved ...
Code examples (3)package com.fourdevelopers;import   android.app.Activity;import   android.os.Bundle;import   android.view...
Code examples (3)package com.fourdevelopers;import   android.app.Activity;import   android.os.Bundle;                     ...
Code examples (3)package com.fourdevelopers;import   android.app.Activity;import   android.os.Bundle;                     ...
Code examples (3)package com.fourdevelopers;import   android.app.Activity;import   android.os.Bundle;                     ...
Code examples (3)package com.fourdevelopers;import   android.app.Activity;import   android.os.Bundle;                     ...
Code examples (4)
Code examples (4)  Simple button
Code examples (4)  Simple button
Code examples (4)  Simple button         Toast
About the catches
Tips for writing Android applications (1)
Tips for writing Android applications (1)   Don’t assume anything (Phones,   Tablets, TV?, desktop?)
Tips for writing Android applications (1)   Don’t assume anything (Phones,   Tablets, TV?, desktop?)   Don’t assume connec...
Tips for writing Android applications (1)   Don’t assume anything (Phones,   Tablets, TV?, desktop?)   Don’t assume connec...
Writing (native) Android applications (2)
Writing (native) Android applications (2)   Do your business in separate threads.
Writing (native) Android applications (2)   Do your business in separate threads.   Cache EVERYTHING!
Writing (native) Android applications (2)   Do your business in separate threads.   Cache EVERYTHING!   show what you can,...
Writing (native) Android applications (2)   Do your business in separate threads.   Cache EVERYTHING!   show what you can,...
Writing (native) Android applications (2)
Writing (native) Android applications (2)   BC breaks are a no-go.
Writing (native) Android applications (2)   BC breaks are a no-go.   Make sure you portrait and landscape   are working.
Writing (native) Android applications (2)   BC breaks are a no-go.   Make sure you portrait and landscape   are working.  ...
Sizes and usability (1)PixelsinsteadofDip’s
Sizes and usability (2)
Sizes and usability (3)Scaledproperly                     Scaled                             properly
Sizes and usability (4)                             HereGravatar                     it’simage                        okno...
The most useful link       developer.android.com
And of course...   http://joind.in/talk/view/3180
Any questions?      ‣ QUESTIONS?http://farm1.static.flickr.com/73/163450213_18478d3aa6_d.jpg
‣ THANK YOU FOR YOUR ATTENTION
Upcoming SlideShare
Loading in …5
×

Joind.in Application for Android

1,859
-1

Published on

Joind.in is a website where speakers and conference organizers can publish their conferences and talks and where attendees can leave their comments. It is absolutely a great way for speakers to improve their talks. The joind.in android app is a java based application for android mobile phones and during this talk I will discuss how to start with android, the troubles (and pleasures) with connecting to third party webservices and how you can help this and other java/android-projects and how php programmers can learn from java programmers, and vice versa.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,859
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Joind.in Application for Android

    1. 1. The Joind.in Android App A story about Android programming, API compatibility and the lessons learned...#4developers - 4 april 2011Warsaw - Poland
    2. 2. Who am I?
    3. 3. Who am I?Joshua Thijssen (32)
    4. 4. Who am I?Joshua Thijssen (32)Senior Software Engineer @ Enrise
    5. 5. Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....
    6. 6. Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....Blogs: http://www.adayinthelifeof.nl http://www.enrise.com/blog
    7. 7. Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....Blogs: http://www.adayinthelifeof.nl http://www.enrise.com/blogEmail: joshua@enrise.com
    8. 8. Who am I?Joshua Thijssen (32)Senior Software Engineer @ EnriseDevelopment in PHP, Python, Perl,C, Java....Blogs: http://www.adayinthelifeof.nl http://www.enrise.com/blogEmail: joshua@enrise.comTwitter: @jaytaphIdenti.ca: jaytaph
    9. 9. What is this talk about?‣ QUESTIONS? RAISE YOUR HAND OR YELL LOUD
    10. 10. What is this talk about? The story about the joind.in website.‣ QUESTIONS? RAISE YOUR HAND OR YELL LOUD
    11. 11. What is this talk about? The story about the joind.in website. The story about the joind.in Android app.‣ QUESTIONS? RAISE YOUR HAND OR YELL LOUD
    12. 12. What is this talk about? The story about the joind.in website. The story about the joind.in Android app. The story about mobile API connectivity.‣ QUESTIONS? RAISE YOUR HAND OR YELL LOUD
    13. 13. What is this talk about? The story about the joind.in website. The story about the joind.in Android app. The story about mobile API connectivity. The story about android programming.‣ QUESTIONS? RAISE YOUR HAND OR YELL LOUD
    14. 14. The story about joind.inhttp://joind.in/inc/img/splash.jpg
    15. 15. The story about joind.in (1) Launched by Chris Cornutt (phpdeveloper.org) in 2008 Adopted by Lorna Mitchell and others. https://github.com/joindin/joind.in Large in the PHP community and gaining ground in others as well.
    16. 16. The story about joind.in (2) A website for conference organizers and attendees. Find information and give feedback on conference talks (like this one). Helps speakers to improve their talks. Over 10K registered users and over 30K page views per month.
    17. 17. The story about joind.in (3) What events are currently happening? Which talks are hot (or not)? Should I see talk X or Y? feedback = improvement your future conference planner
    18. 18. The story about the joind.in android app
    19. 19. The story about the joind.in android app (1)
    20. 20. The story about the joind.in android app (1)
    21. 21. The story about the joind.in android app (1) Simple buttons
    22. 22. The story about the joind.in android app (1) Simple buttons Loaded in separate thread
    23. 23. The story about the joind.in android app (1) Simple buttons “viewrow” inside listadapter Loaded in separate thread
    24. 24. The story about the joind.in android app (1) Simple buttons “viewrow” inside listadapter Loaded in separate thread Filtering / searchbox
    25. 25. The story about the joind.in android app (1)
    26. 26. The story about the joind.in android app (2)
    27. 27. The story about the joind.in android app (2)
    28. 28. The story about the joind.in android app (2)
    29. 29. The story about the joind.in android app (3)
    30. 30. The story about the joind.in android app (3)
    31. 31. The story about the joind.in android app (3)
    32. 32. The story about the joind.in android app (4)
    33. 33. The story about the joind.in android app (4)
    34. 34. The story about the joind.in android app (4) Loaded from gravatar / separate thread
    35. 35. The story about the joind.in android app (4) Loaded from gravatar / separate thread Gravatar not yet loaded
    36. 36. The story about the joind.in android app (4)
    37. 37. The story about the joind.in android app (5) First (serious) android project Open source http://github.com/jaytaph Biggest concern now & then: using the API.
    38. 38. Mobile API connectivityhttp://www.flickr.com/photos/stevewilhelm/2591525747/sizes/l/in/photostream/
    39. 39. Mobile API connectivity (1) CRM Accounting ERP‣ ISOLATED APPLICATIONS
    40. 40. Mobile API connectivity (1) CRM Accounting API API API ERP‣ API’S ON TOP OF APPLICATIONS
    41. 41. Mobile API connectivity (1) I haz yar info! Oh hai! kthnxbai I can haz info? CRM Accounting API API API sup! sup! ERP‣ LET’S START CHATTING
    42. 42. Mobile API connectivity (2) Twitter API Facebook YourBlog
    43. 43. Mobile API connectivity (2) Twitter API Facebook YourBlog
    44. 44. Mobile API connectivity (2) Twitter API Facebook YourBlog‣ USING OTHER APPLICATION’S DATA
    45. 45. Mobile API connectivity (2) Twitter API Android Facebook YourBlog IPhone Blackberry‣ ONE TO MANY
    46. 46. Mobile API connectivity (3)
    47. 47. Mobile API connectivity (4)Is your application REALLY ready for mobile connectivity?
    48. 48. Mobile API connectivity (5) Mobile bandwidth is expensive. Connectivity is slow and unreliable. Client side processing is harder.‣ MOBILE FACTS
    49. 49. Mobile API connectivity (5) Not giving client what they want. Updating your API will be harder. BC breaks are a no-go.‣ MOBILE FACTS
    50. 50. Mobile API connectivity (6)‣ PROBLEMS WITH THE JOIND.IN API
    51. 51. Mobile API connectivity (6) Authentication‣ PROBLEMS WITH THE JOIND.IN API
    52. 52. Mobile API connectivity (6) Authentication Too much data being returned (>300Kb per request)‣ PROBLEMS WITH THE JOIND.IN API
    53. 53. Mobile API connectivity (6) Authentication Too much data being returned (>300Kb per request) No pagination (want first 10 talks, get 200+)‣ PROBLEMS WITH THE JOIND.IN API
    54. 54. Mobile API connectivity (6) Authentication Too much data being returned (>300Kb per request) No pagination (want first 10 talks, get 200+) Duplicate data (tracks, talks, speaker info)‣ PROBLEMS WITH THE JOIND.IN API
    55. 55. Mobile API connectivity (6) Authentication Too much data being returned (>300Kb per request) No pagination (want first 10 talks, get 200+) Duplicate data (tracks, talks, speaker info) Occasional BC breaks‣ PROBLEMS WITH THE JOIND.IN API
    56. 56. Mobile API connectivity (7) This will all change in the v2.0 API release. (hopefully)
    57. 57. Writing (native) Android applications
    58. 58. Writing (native) Android applications (1)
    59. 59. Writing (native) Android applications (1) ✓ Native (java) ✗ Non-native (php4android, html5/js)
    60. 60. Writing (native) Android applications (2)http://developer.android.com/guide/basics/what-is-android.html
    61. 61. Writing (native) Android applications (2) You are herehttp://developer.android.com/guide/basics/what-is-android.html
    62. 62. Writing (native) Android applications (3) Activities Layouts Intentshttp://developer.android.com/guide/basics/what-is-android.html
    63. 63. Activities (1)http://developer.android.com/guide/basics/what-is-android.html
    64. 64. Activities (1) provides a screen with which a user can interact.http://developer.android.com/guide/basics/what-is-android.html
    65. 65. Activities (1) provides a screen with which a user can interact. activities are “stacked”.http://developer.android.com/guide/basics/what-is-android.html
    66. 66. Activities (2)http://developer.android.com/guide/basics/what-is-android.html
    67. 67. Activities (2) activity 1 startshttp://developer.android.com/guide/basics/what-is-android.html
    68. 68. Activities (2) activity 1 starts activity 2 starts & activity 1 pauzeshttp://developer.android.com/guide/basics/what-is-android.html
    69. 69. Activities (2) activity 1 starts activity 2 starts & activity 1 pauzes activity 2 stopshttp://developer.android.com/guide/basics/what-is-android.html
    70. 70. Activities (2) activity 1 starts activity 2 starts & activity 1 pauzes activity 2 stops activity 1 resumeshttp://developer.android.com/guide/basics/what-is-android.html
    71. 71. Activities (3)‣ ACTIVITY LIFE CYCLE
    72. 72. Activities (3)‣ ACTIVITY LIFE CYCLE
    73. 73. Writing (native) Android applications (3) Activities Layouts Intentshttp://developer.android.com/guide/basics/what-is-android.html
    74. 74. Layouts (1)
    75. 75. Layouts (1) Get stuff onto your display
    76. 76. Layouts (1) Get stuff onto your display Created as XML resources
    77. 77. Layouts (1) Get stuff onto your display Created as XML resources “inflated” by android (costly)
    78. 78. Layouts (2) LinearLayout Single column or row TableLayout <table></table> FrameLayout <placeholder> RelativeLayout
    79. 79. Layouts (2) LinearLayout Single column or row TableLayout <table></table> FrameLayout <placeholder> RelativeLayout
    80. 80. Layouts (3)
    81. 81. Layouts (4)XML Light theme Dark (normal) theme<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:alwaysDrawnWithCache="true"> <TableLayout android:id="@+id/tableLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="10dip"> <TableRow android:id="@+id/tableRow5" android:layout_width="wrap_content" android:layout_height="match_parent"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textStyle="bold" android:id="@+id/TextView01" android:textSize="20dip" android:text="Username"></TextView> </TableRow>.... ∂ DEFINING ANDROID LAYOUTS
    82. 82. Writing (native) Android applications (3) Activities Layouts Intentshttp://developer.android.com/guide/basics/what-is-android.html
    83. 83. Intents (1)http://developer.android.com/guide/basics/what-is-android.html
    84. 84. Intents (1) “message queue” between different android components.http://developer.android.com/guide/basics/what-is-android.html
    85. 85. Intents (1) “message queue” between different android components. Explicit & implicit intentshttp://developer.android.com/guide/basics/what-is-android.html
    86. 86. Intents (2)
    87. 87. Intents (2)Start a new activity (explicit): Intent myIntent = new Intent (); myIntent.setClass(class.this, com.another.class); myIntent.putExtra("Data", "somedata"); startActivity(myIntent);
    88. 88. Intents (2) Start a new activity (explicit): Intent myIntent = new Intent (); myIntent.setClass(class.this, com.another.class); myIntent.putExtra("Data", "somedata"); startActivity(myIntent); Dial a number (implicit): Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:123-456789")); startActivity(intent);
    89. 89. Intents (2) Start a new activity (explicit): Intent myIntent = new Intent (); myIntent.setClass(class.this, com.another.class); myIntent.putExtra("Data", "somedata"); startActivity(myIntent); Dial a number (implicit): Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:123-456789")); startActivity(intent);
    90. 90. Intents (2) Start a new activity (explicit): Intent myIntent = new Intent (); myIntent.setClass(class.this, com.another.class); myIntent.putExtra("Data", "somedata"); startActivity(myIntent); Dial a number (implicit): Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:123-456789")); startActivity(intent);
    91. 91. Intents (3)
    92. 92. Intents (3) Visit a website (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(intent);
    93. 93. Intents (3) Visit a website (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(intent);
    94. 94. Intents (3) Visit a website (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(intent);
    95. 95. Intents (3) Visit a website (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(intent); Open Google Maps (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:52.257651,21.058044?z=17")); startActivity(intent);
    96. 96. Intents (3) Visit a website (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(intent); Open Google Maps (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:52.257651,21.058044?z=17")); startActivity(intent);
    97. 97. Intents (3) Visit a website (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(intent); Open Google Maps (implicit): Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:52.257651,21.058044?z=17")); startActivity(intent);
    98. 98. Nine-patch (1)
    99. 99. Nine-patch (1)
    100. 100. Nine-patch (1) Scalable images that automatically resizes according to the size of your display (view).
    101. 101. Nine-patch (2)http://www.pookiescreations.com/images/lrg%209%20patch%20kit%20005.jpg
    102. 102. Nine-patch (2)http://www.pookiescreations.com/images/lrg%209%20patch%20kit%20005.jpg
    103. 103. Nine-patch (3)http://www.pookiescreations.com/images/lrg%209%20patch%20kit%20005.jpg
    104. 104. Nine-patch (4)‣ ALMOST IMPOSSIBLE TO TELL THAT THIS IS PHOTOSHOPPED
    105. 105. Nine-patch (5) ‣ A BETTER EXAMPLEhttp://developer.android.com/images/draw9patch-norm.png
    106. 106. Code exampleshttp://www.flickr.com/photos/oskay/472097903/
    107. 107. Code examples (1)res/layout/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"> <Button android:text="Clickme" android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="fill_parent"></Button></LinearLayout>‣ DEFINE LAYOUT
    108. 108. Code examples (2)package com.fourdevelopers;import android.app.Activity;import android.os.Bundle;public class Main extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}‣ HELLO WORLD
    109. 109. Code examples (2)package com.fourdevelopers; Activityimport android.app.Activity;import android.os.Bundle;public class Main extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}‣ HELLO WORLD
    110. 110. Code examples (2)package com.fourdevelopers; Activityimport android.app.Activity; Saved state afterimport android.os.Bundle; onSaveInstanceState()public class Main extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}‣ HELLO WORLD
    111. 111. Code examples (2)package com.fourdevelopers; Activityimport android.app.Activity; Saved state afterimport android.os.Bundle; onSaveInstanceState()public class Main extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }} Layout XML to display‣ HELLO WORLD
    112. 112. Code examples (3)package com.fourdevelopers;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class main extends Activity implements OnClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(this); } public void onClick(View v) { Toast.makeText(this, "Button clicked", Toast.LENGTH_SHORT).show(); }}‣ REMEMBER: TMTOWTDI!
    113. 113. Code examples (3)package com.fourdevelopers;import android.app.Activity;import android.os.Bundle; Importsimport android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class main extends Activity implements OnClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(this); } public void onClick(View v) { Toast.makeText(this, "Button clicked", Toast.LENGTH_SHORT).show(); }}‣ REMEMBER: TMTOWTDI!
    114. 114. Code examples (3)package com.fourdevelopers;import android.app.Activity;import android.os.Bundle; Importsimport android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast; Implement click listenerpublic class main extends Activity implements OnClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(this); } public void onClick(View v) { Toast.makeText(this, "Button clicked", Toast.LENGTH_SHORT).show(); }}‣ REMEMBER: TMTOWTDI!
    115. 115. Code examples (3)package com.fourdevelopers;import android.app.Activity;import android.os.Bundle; Importsimport android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast; Implement click listenerpublic class main extends Activity implements OnClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Connect click listener to button Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(this); } public void onClick(View v) { Toast.makeText(this, "Button clicked", Toast.LENGTH_SHORT).show(); }}‣ REMEMBER: TMTOWTDI!
    116. 116. Code examples (3)package com.fourdevelopers;import android.app.Activity;import android.os.Bundle; Importsimport android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast; Implement click listenerpublic class main extends Activity implements OnClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Connect click listener to button Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(this); } Called when “something” is clicked public void onClick(View v) { Toast.makeText(this, "Button clicked", Toast.LENGTH_SHORT).show(); }}‣ REMEMBER: TMTOWTDI!
    117. 117. Code examples (4)
    118. 118. Code examples (4) Simple button
    119. 119. Code examples (4) Simple button
    120. 120. Code examples (4) Simple button Toast
    121. 121. About the catches
    122. 122. Tips for writing Android applications (1)
    123. 123. Tips for writing Android applications (1) Don’t assume anything (Phones, Tablets, TV?, desktop?)
    124. 124. Tips for writing Android applications (1) Don’t assume anything (Phones, Tablets, TV?, desktop?) Don’t assume connectivity.
    125. 125. Tips for writing Android applications (1) Don’t assume anything (Phones, Tablets, TV?, desktop?) Don’t assume connectivity. You’re not alone. Don’t hog resources.
    126. 126. Writing (native) Android applications (2)
    127. 127. Writing (native) Android applications (2) Do your business in separate threads.
    128. 128. Writing (native) Android applications (2) Do your business in separate threads. Cache EVERYTHING!
    129. 129. Writing (native) Android applications (2) Do your business in separate threads. Cache EVERYTHING! show what you can, fetch more up- to-date info in the background.
    130. 130. Writing (native) Android applications (2) Do your business in separate threads. Cache EVERYTHING! show what you can, fetch more up- to-date info in the background. Don’t quit when something fails, display what you know.
    131. 131. Writing (native) Android applications (2)
    132. 132. Writing (native) Android applications (2) BC breaks are a no-go.
    133. 133. Writing (native) Android applications (2) BC breaks are a no-go. Make sure you portrait and landscape are working.
    134. 134. Writing (native) Android applications (2) BC breaks are a no-go. Make sure you portrait and landscape are working. Usability is an art (and I’m not an artist)
    135. 135. Sizes and usability (1)PixelsinsteadofDip’s
    136. 136. Sizes and usability (2)
    137. 137. Sizes and usability (3)Scaledproperly Scaled properly
    138. 138. Sizes and usability (4) HereGravatar it’simage oknotscaledproperly
    139. 139. The most useful link developer.android.com
    140. 140. And of course... http://joind.in/talk/view/3180
    141. 141. Any questions? ‣ QUESTIONS?http://farm1.static.flickr.com/73/163450213_18478d3aa6_d.jpg
    142. 142. ‣ THANK YOU FOR YOUR ATTENTION
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×