SlideShare uma empresa Scribd logo
1 de 105
Baixar para ler offline
Intro to Android
for iOS developers
Chiu-Ki Chan
@chiuki
@chiuki@chiuki
@chiuki@chiuki
Hello World
Layouts
Intents & Components
Hello World
@chiuki
@chiuki
ViewController
@chiuki
@chiuki
@chiuki
xib
@chiuki
@chiuki
@chiuki
@chiuki
@chiuki
IBOutlet
@chiuki
@chiuki@chiuki
Center
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
@chiuki
@chiuki@chiuki
Button
<Button
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/add" />
@chiuki
LinearLayout
@chiuki
@chiuki@chiuki
LinearLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="128sp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add"
android:onClick="add" />
</LinearLayout>
@chiuki@chiuki
IBAction
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="128sp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add"
android:onClick="add" />
</LinearLayout>
@chiuki@chiuki
IBAction
public class MainActivity extends Activity {
private TextView countView;
private int count = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countView = (TextView) findViewById(R.id.count);
updateCount();
}
public void add(View v) {
count += 1;
updateCount();
}
private void updateCount() {
countView.setText(String.valueOf(count));
}
}
android:onClick="add"
@chiuki@chiuki
Update view
public class MainActivity extends Activity {
private TextView countView;
private int count = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countView = (TextView) findViewById(R.id.count);
updateCount();
}
public void add(View v) {
count += 1;
updateCount();
}
private void updateCount() {
countView.setText(String.valueOf(count));
}
}
@chiuki
@chiuki
@chiuki
RelativeLayout
@chiuki
@chiuki
@chiuki
@chiuki
@chiuki
<RelativeLayout>
<TextView
android:id="@+id/count"
android:layout_centerInParent="true" />
<Button
android:id="@+id/reset"
android:layout_below="@id/count"
android:layout_centerHorizontal="true"
android:text="@string/reset" />
<Button
android:layout_below="@id/count"
android:layout_toLeftOf="@id/reset"
android:text="@string/subtract" />
<Button
android:layout_below="@id/count"
android:layout_toRightOf="@id/reset"
android:text="@string/add" />
</RelativeLayout>
@chiuki
<RelativeLayout>
<TextView
android:id="@+id/count"
android:layout_centerInParent="true" />
<Button
android:id="@+id/reset"
android:layout_below="@id/count"
android:layout_centerHorizontal="true"
android:text="@string/reset" />
<Button
android:layout_below="@id/count"
android:layout_toLeftOf="@id/reset"
android:text="@string/subtract" />
<Button
android:layout_below="@id/count"
android:layout_toRightOf="@id/reset"
android:text="@string/add" />
</RelativeLayout>
@chiuki
<RelativeLayout>
<TextView
android:id="@+id/count"
android:layout_centerInParent="true" />
<Button
android:id="@+id/reset"
android:layout_below="@id/count"
android:layout_centerHorizontal="true"
android:text="@string/reset" />
<Button
android:layout_below="@id/count"
android:layout_toLeftOf="@id/reset"
android:text="@string/subtract" />
<Button
android:layout_below="@id/count"
android:layout_toRightOf="@id/reset"
android:text="@string/add" />
</RelativeLayout>
@chiuki
<RelativeLayout>
<TextView
android:id="@+id/count"
android:layout_centerInParent="true" />
<Button
android:id="@+id/reset"
android:layout_below="@id/count"
android:layout_centerHorizontal="true"
android:text="@string/reset" />
<Button
android:layout_toLeftOf="@id/reset"
android:text="@string/subtract" />
<Button
android:layout_below="@id/count"
android:layout_toRightOf="@id/reset"
android:text="@string/add" />
</RelativeLayout>
@chiuki
<RelativeLayout>
<TextView
android:id="@+id/count"
android:layout_centerInParent="true" />
<Button
android:id="@+id/reset"
android:layout_below="@id/count"
android:layout_centerHorizontal="true"
android:text="@string/reset" />
<Button
android:layout_below="@id/count"
android:layout_toLeftOf="@id/reset"
android:text="@string/subtract" />
<Button
android:layout_below="@id/count"
android:layout_toRightOf="@id/reset"
android:text="@string/add" />
</RelativeLayout>
@chiuki@chiuki
Device Preview
@chiuki@chiuki
Bigger text on tablets
Resource Folders
@chiuki@chiuki
textSize
<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="128sp" />
res/layout/activity_main.xml
@chiuki@chiuki
res/values/dimens.xml
<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/counter_size" />
res/layout/activity_main.xml
<dimen name="counter_size" value="128sp" />
res/values/dimens.xml
@chiuki@chiuki
res/values-sw600dp/dimens.xml
<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/counter_size" />
res/layout/activity_main.xml
<dimen name="counter_size" value="128sp" />
<dimen name="counter_size" value="256sp" />
res/values/dimens.xml
res/values-sw600dp/dimens.xml
@chiuki@chiuki
Resource Folders
Type Variation
layout
values
drawable
menu
Language & Region: en, fr, fr-rCA, ja
Screen size: small, large, sw600dp, h400dp
Screen orientation: port, land
Screen density: ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi
Platform version: v4, v11, v14
UI mode: car, desk, television, appliance
http://developer.android.com/guide/topics/resources/providing-resources.html
@chiuki@chiuki
Resource Folders
Type Variation
layout
values
drawable
menu
Language & Region: en, fr, fr-rCA, ja
Screen size: small, large, sw600dp, h400dp
Screen orientation: port, land
Screen density: ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi
Platform version: v4, v11, v14
UI mode: car, desk, television, appliance
http://developer.android.com/guide/topics/resources/providing-resources.html
res/values-sw600dp/dimens.xml
@chiuki@chiuki
Resource Folders
Type Variation
layout
values
drawable
menu
Language & Region: en, fr, fr-rCA, ja
Screen size: small, large, sw600dp, h400dp
Screen orientation: port, land
Screen density: ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi
Platform version: v4, v11, v14
UI mode: car, desk, television, appliance
http://developer.android.com/guide/topics/resources/providing-resources.html
res/drawable-hdpi/ic_launcher.png
@chiuki@chiuki
Resource Folders
Type Variation
layout
values
drawable
menu
Language & Region: en, fr, fr-rCA, ja
Screen size: small, large, sw600dp, h400dp
Screen orientation: port, land
Screen density: ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi
Platform version: v4, v11, v14
UI mode: car, desk, television, appliance
http://developer.android.com/guide/topics/resources/providing-resources.html
res/drawable-hdpi/ic_launcher.png
@2x
@chiuki@chiuki
Resource Folders
Type Variation
layout
values
drawable
menu
Language & Region: en, fr, fr-rCA, ja
Screen size: small, large, sw600dp, h400dp
Screen orientation: port, land
Screen density: ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi
Platform version: v4, v11, v14
UI mode: car, desk, television, appliance
http://developer.android.com/guide/topics/resources/providing-resources.html
res/layout-ja/name.xml
Activity Lifecycle
@chiuki@chiuki
onCreate()
Activity Lifecycle
@chiuki@chiuki
onCreate()
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
viewWillAppear:
viewDidAppear:
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
viewWillAppear:
viewDidAppear:
onPause()
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
viewWillAppear:
viewDidAppear:
onPause()
onStop()
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
viewWillAppear:
viewDidAppear:
onPause()
onStop()
viewWillDisappear:
viewDidDisappear:
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
viewWillAppear:
viewDidAppear:
onPause()
onStop()
viewWillDisappear:
viewDidDisappear:
onDestroy()
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
viewWillAppear:
viewDidAppear:
onPause()
onStop()
viewWillDisappear:
viewDidDisappear:
onDestroy() viewDidUnload:
Activity Lifecycle
@chiuki@chiuki
onCreate() viewDidLoad:
onStart()
onResume()
viewWillAppear:
viewDidAppear:
onPause()
onStop()
viewWillDisappear:
viewDidDisappear:
onDestroy() viewDidUnload:
Activity Lifecycle
@chiuki@chiuki
Visibility
More Activities
@chiuki@chiuki
startActivity (explicit)
Intent intent = new Intent(this, NumberActivity.class);
intent.putExtra("count", count);
startActivity(intent);
@chiuki@chiuki
startActivity (explicit)
Intent intent = new Intent(this, NumberActivity.class);
intent.putExtra("count", count);
startActivity(intent);
@chiuki@chiuki
startActivity (explicit)
Intent intent = new Intent(this, NumberActivity.class);
intent.putExtra("count", count);
startActivity(intent);
@chiuki@chiuki
startActivity (implicit)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
startActivity (implicit)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
startActivity (implicit)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
startActivity (implicit)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
Register your Activity
<activity android:name=".YourActivity">
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" android:host="twitter.com" />
  </intent-filter>
</activity>
AndroidManifest.xml
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
Info.plist
@chiuki@chiuki
IntentFilter: Action
<activity android:name=".YourActivity">
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" android:host="twitter.com" />
  </intent-filter>
</activity>
AndroidManifest.xml
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
IntentFilter: Data
<activity android:name=".YourActivity">
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" android:host="twitter.com" />
  </intent-filter>
</activity>
AndroidManifest.xml
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
IntentFilter: Category
<activity android:name=".YourActivity">
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" android:host="twitter.com" />
  </intent-filter>
</activity>
AndroidManifest.xml
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
IntentFilter: Category
<activity android:name=".YourActivity">
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" android:host="twitter.com" />
  </intent-filter>
</activity>
AndroidManifest.xml
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://twitter.com/chiuki"));
startActivity(intent);
@chiuki@chiuki
Intent Data
<activity android:name=".YourActivity">
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" android:host="twitter.com" />
  </intent-filter>
</activity>
Uri uri = getIntent().getData();
AndroidManifest.xml
YourActivity.java
@chiuki@chiuki
startActivityForResult
private static final int REQUEST_CODE_CAMERA = 1;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_CAMREA);
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CAMERA &&
resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
}
}
@chiuki@chiuki
startActivityForResult
private static final int REQUEST_CODE_CAMERA = 1;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CAMERA &&
resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
}
}
@chiuki@chiuki
Providing Result
Intent data = new Intent();
data.putExtra("data", bitmap);
setResult(RESULT_OK, data);
finish();
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CAMERA &&
resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
}
}
@chiuki@chiuki
Intent Data
Intent data = new Intent();
data.putExtra("data", bitmap);
setResult(RESULT_OK, data);
finish();
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CAMERA &&
resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
}
}
@chiuki@chiuki
Result Code
Intent data = new Intent();
data.putExtra("data", bitmap);
setResult(RESULT_OK, data);
finish();
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CAMERA &&
resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
}
}
@chiuki@chiuki
Share intent
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, message);
intent.setType("image/*");
Uri uri = Uri.fromFile(new File(path));
intent.putExtra(Intent.EXTRA_STREAM, uri);
@chiuki@chiuki
IntentFilter: Type
<activity android:name=".YourActivity">
<intent-filter>
   <action android:name="android.intent.action.ACTION_SEND" />
    <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="image/*" />
  </intent-filter>
</activity>
AndroidManifest.xml
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
@chiuki@chiuki
Intent Data
String subject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
String message = intent.getStringExtra(Intent.EXTRA_TEXT);
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
YourActivity.java
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, message);
intent.setType("image/*");
Uri uri = Uri.fromFile(new File(path));
intent.putExtra(Intent.EXTRA_STREAM, uri);
Beyond Activities
@chiuki@chiuki
Service BroadcastReceiver
ContentProvider Notification
@chiuki@chiuki
Service
Look ma, no UI!
@chiuki@chiuki
Service
Long-running
@chiuki@chiuki
BroadcastReceiver
Respond
@chiuki@chiuki
BroadcastReceiver
Respond
Battery low
Wifi connected
Incoming SMS
App installed
Screen off
@chiuki@chiuki
ContentProvider
Provide data to other apps
@chiuki@chiuki
ContentProvider
Provide data to other apps
Contacts
Images Music
Calendar
@chiuki@chiuki
ContentProvider
Internal data
(unless you need SQLite interface)
@chiuki@chiuki
Notification
Notify
@chiuki@chiuki
Notify
@chiuki@chiuki
Notification
Communicate with background Service
@chiuki@chiuki
Background Service
Case study
@chiuki
Email Outbox
@chiuki
@chiuki@chiuki
Notification
@chiuki@chiuki
AlarmService
@chiuki@chiuki
Connectivity change
Summary
@chiuki@chiuki
Summary
Hello World
Layouts
Resource Folders
Activity Lifecycle
Intents & Components
Case Study
@chiuki@chiuki
Thank you!
http://eepurl.com/lR5uD
http://blog.sqisland.com
http://twitter.com/chiuki

Mais conteúdo relacionado

Semelhante a Intro to Android for iOS developers

Intro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildIntro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildChris Griffith
 
Android material design lecture #2
Android material design   lecture #2Android material design   lecture #2
Android material design lecture #2Vitali Pekelis
 
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...Ted Chien
 
Cross Device UI Designing
Cross Device UI DesigningCross Device UI Designing
Cross Device UI DesigningDeepu S Nath
 
Fake it 'til you make it
Fake it 'til you make itFake it 'til you make it
Fake it 'til you make itJonathan Snook
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDee Sadler
 
What's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseWhat's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseParis Android User Group
 
HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureMotorola Mobility - MOTODEV
 
Android Starting App Development
Android  Starting App DevelopmentAndroid  Starting App Development
Android Starting App DevelopmentParamvir Singh
 
Supporting multi screen in android
Supporting multi screen in androidSupporting multi screen in android
Supporting multi screen in androidrffffffff007
 
Andriy Vandakurov about "Frontend. Global domination"
Andriy Vandakurov about  "Frontend. Global domination" Andriy Vandakurov about  "Frontend. Global domination"
Andriy Vandakurov about "Frontend. Global domination" Pivorak MeetUp
 
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...IndicThreads
 
Accessibility for hybrid mobile
Accessibility for hybrid mobileAccessibility for hybrid mobile
Accessibility for hybrid mobileBobby Bristol
 
Android Workshop
Android WorkshopAndroid Workshop
Android WorkshopJunda Ong
 

Semelhante a Intro to Android for iOS developers (20)

Intro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildIntro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap Build
 
Android material design lecture #2
Android material design   lecture #2Android material design   lecture #2
Android material design lecture #2
 
Effective Android UI - English
Effective Android UI - EnglishEffective Android UI - English
Effective Android UI - English
 
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
viWave Study Group - Introduction to Google Android Development - Chapter 23 ...
 
Cross Device UI Designing
Cross Device UI DesigningCross Device UI Designing
Cross Device UI Designing
 
Fake it 'til you make it
Fake it 'til you make itFake it 'til you make it
Fake it 'til you make it
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
 
What's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseWhat's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet Haase
 
HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the Future
 
Resume_Haran21 mca
Resume_Haran21 mcaResume_Haran21 mca
Resume_Haran21 mca
 
Android Starting App Development
Android  Starting App DevelopmentAndroid  Starting App Development
Android Starting App Development
 
Introduction to flutter
Introduction to flutter Introduction to flutter
Introduction to flutter
 
Supporting multi screen in android
Supporting multi screen in androidSupporting multi screen in android
Supporting multi screen in android
 
Pivorak.javascript.global domination
Pivorak.javascript.global dominationPivorak.javascript.global domination
Pivorak.javascript.global domination
 
Andriy Vandakurov about "Frontend. Global domination"
Andriy Vandakurov about  "Frontend. Global domination" Andriy Vandakurov about  "Frontend. Global domination"
Andriy Vandakurov about "Frontend. Global domination"
 
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...
 
Accessibility for hybrid mobile
Accessibility for hybrid mobileAccessibility for hybrid mobile
Accessibility for hybrid mobile
 
Flutter
FlutterFlutter
Flutter
 
Android Workshop
Android WorkshopAndroid Workshop
Android Workshop
 
Hybrid HTML5 Apps
Hybrid HTML5 AppsHybrid HTML5 Apps
Hybrid HTML5 Apps
 

Mais de Chiu-Ki Chan

Yes, you can draw with your engineering brain
Yes, you can draw with your engineering brainYes, you can draw with your engineering brain
Yes, you can draw with your engineering brainChiu-Ki Chan
 
How to be an Android Expert: Women Who Code Connect
How to be an Android Expert: Women Who Code ConnectHow to be an Android Expert: Women Who Code Connect
How to be an Android Expert: Women Who Code ConnectChiu-Ki Chan
 
how-to-be-an-android-expert-wwcode
how-to-be-an-android-expert-wwcodehow-to-be-an-android-expert-wwcode
how-to-be-an-android-expert-wwcodeChiu-Ki Chan
 
How to be an Android Expert: Droidcon Berlin
How to be an Android Expert: Droidcon BerlinHow to be an Android Expert: Droidcon Berlin
How to be an Android Expert: Droidcon BerlinChiu-Ki Chan
 
How to be an Android Expert: Droidcon Boston
How to be an Android Expert: Droidcon BostonHow to be an Android Expert: Droidcon Boston
How to be an Android Expert: Droidcon BostonChiu-Ki Chan
 
How to Write a Conference Proposal
How to Write a Conference ProposalHow to Write a Conference Proposal
How to Write a Conference ProposalChiu-Ki Chan
 
How to be an Android Expert: Android Summit
How to be an Android Expert: Android SummitHow to be an Android Expert: Android Summit
How to be an Android Expert: Android SummitChiu-Ki Chan
 
Hands-on Icon creation
Hands-on Icon creationHands-on Icon creation
Hands-on Icon creationChiu-Ki Chan
 
Develop your voice
Develop your voiceDevelop your voice
Develop your voiceChiu-Ki Chan
 
How to win hackathons, Ignite Google I/O 2012
How to win hackathons, Ignite Google I/O 2012How to win hackathons, Ignite Google I/O 2012
How to win hackathons, Ignite Google I/O 2012Chiu-Ki Chan
 

Mais de Chiu-Ki Chan (10)

Yes, you can draw with your engineering brain
Yes, you can draw with your engineering brainYes, you can draw with your engineering brain
Yes, you can draw with your engineering brain
 
How to be an Android Expert: Women Who Code Connect
How to be an Android Expert: Women Who Code ConnectHow to be an Android Expert: Women Who Code Connect
How to be an Android Expert: Women Who Code Connect
 
how-to-be-an-android-expert-wwcode
how-to-be-an-android-expert-wwcodehow-to-be-an-android-expert-wwcode
how-to-be-an-android-expert-wwcode
 
How to be an Android Expert: Droidcon Berlin
How to be an Android Expert: Droidcon BerlinHow to be an Android Expert: Droidcon Berlin
How to be an Android Expert: Droidcon Berlin
 
How to be an Android Expert: Droidcon Boston
How to be an Android Expert: Droidcon BostonHow to be an Android Expert: Droidcon Boston
How to be an Android Expert: Droidcon Boston
 
How to Write a Conference Proposal
How to Write a Conference ProposalHow to Write a Conference Proposal
How to Write a Conference Proposal
 
How to be an Android Expert: Android Summit
How to be an Android Expert: Android SummitHow to be an Android Expert: Android Summit
How to be an Android Expert: Android Summit
 
Hands-on Icon creation
Hands-on Icon creationHands-on Icon creation
Hands-on Icon creation
 
Develop your voice
Develop your voiceDevelop your voice
Develop your voice
 
How to win hackathons, Ignite Google I/O 2012
How to win hackathons, Ignite Google I/O 2012How to win hackathons, Ignite Google I/O 2012
How to win hackathons, Ignite Google I/O 2012
 

Último

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)Samir Dash
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 

Último (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 

Intro to Android for iOS developers