Android Workshop Handout (PDF)

knapsackyarnMobile - sans fil

14 déc. 2013 (il y a 3 années et 7 mois)

114 vue(s)

Android Workshop Handout
Frank McCown


Working with the emulator

The Emulator Control c ca an n s siim mu ulla at te e s se en nd diin ng g p ph ho on ne e c ca alllls s a an nd d
SMS messages, , c ch ha an ng giin ng g n ne et tw wo or rk k t tr ra an ns sf fe er r r ra at te es s, , and changing
t th he e llo oc ca at tiio on n o of f t th he e d de ev viic ce e. . T To o d diis sp plla ay y, , s se elle ec ct t Window  Show
view  Other…, Android  E Em mu ul la at to or r C Co on nt tr ro ol l. The control is
also visible in the DDMS Perspective: Win nd do ow w  Open
Perspective  Other…  select DDMS o op pt tiio on n. .

You may also use the command-lliin ne e iin nt te er rf fa ac ce e. .

At the command line: tteellnneett llooccaallhhoosstt 55555544

Commands:

gsm call 123 Place incoming call
gsm cancel 123 Hang up on “123”

sms send 123 How are you? S Se en nd d a an n SMS

network speed edge S Siim mu ulla at te e E Ed dg ge e transfer rates
network speed full F Fu ullll t tr ra an ns sf fe er r s sp pe ee ed d

More info on emulator command-lliin ne e o op pt tiio on ns s: :
h ht tt tp p: :/ // /d de ev ve ello op pe er r. .a an nd dr ro oiid d. .c co om m/ /g gu uiid de e/ /d de ev ve ello op piin ng g/ /d de ev viic ce es s/ /e em mu ulla at to or r. .h ht tm mll


I In ns st ta al ll l . .a ap pk k f fi il le e o on n A An nd dr ro oi id d d de ev vi ic ce e u us si in ng g adb

A Af ft te er r y yo ou u h ha av ve e c cr re ea at te ed d a an n A An nd dr ro oiid d a ap pp p, , y yo ou u c ca an n d de ep pllo oy y iit t t to o y your Android device.

1. F Fo or r W Wiin nd do ow ws s, , d do ow wn nllo oa ad d t th he e A An nd dr ro oiid d U US SB B d dr riiv ve er rs s f fr ro om m
h ht tt tp p: :/ // /d de ev ve ello op pe er r. .a an nd dr ro oiid d. .c co om m/ /s sd dk k/ /w wiin n-usb.html
2. C Co on nn ne ec ct t y yo ou ur r A An nd dr ro oiid d d de ev viic ce e t to o y yo ou ur r c co om mp pu ut te er r u us siin ng g t th he e U US SB B c ca ab blle e. .
3. Allow your device to install non-M Ma ar rk ke et t a ap pp ps s: : S Se et tt tiin ng gs s  Applications  c ch he ec ck k U Un nk kn no ow wn n s so ou ur rc ce es s
4. At the command-line: aaddbb iinnssttaallll ppaatthh//ffiillee..aappkk


I In ns st ta al ll l . .a ap pk k f fi il le e o on n A An nd dr ro oi id d d de ev vi ic ce e u us si in ng g t th he e W We eb b

1. Place the .apk file on the Web.
2. Allow your device to install non-M Ma ar rk ke et t a ap pp ps s: : Settings  Applications  check U Un nk kn no ow wn n sources
3. Enable USB debugging: Settings  Applications Development  check U US SB B d de eb bu ug gg gi in ng g
4. U Us siin ng g t th he e A An nd dr ro oiid d w we eb b b br ro ow ws se er r, , a ac cc ce es ss s t th he e U UR RL L o of f t th he e . .a ap pk k f fiille e, , a an nd d y yo ou ur r d de ev viic ce e w wiillll p pr ro om mp pt t y yo ou u t to o iin ns st ta allll t th he e
app.


Viewing the LogCat

T To o v viie ew w o ou ut tp pu ut t s st ta at te em me en nt ts s lliik ke e t th he e o on ne e b be ello ow w, , y yo ou u n ne ee ed d t to o b br riin ng g u up p t th he e L Lo og gC Ca at t w wiin nd do ow w. .

SSyysstteemm..oouutt..pprriinnttllnn((""TTHHIISS IISS AA TTEESSTT!!""));;

This w wo or rk k iis s lliic ce en ns se ed d u un nd de er r a a
C Cr re ea at tiiv ve e C Co om mm mo on ns s A At tt tr riib bu ut tiio on n 3 3. .0 0 Unported License To view the LogCat, select Window  S Sh ho ow w v vi ie ew w  Other…, Android  LogCat. . N No ow w y yo ou u’ ’llll s se ee e t th he e L Lo og gC Ca at t f fiilllle ed d w wiit th h
many different me es ss sa ag ge es s, , iin nc cllu ud diin ng g t th he e o on ne e y yo ou u j ju us st t o ou ut tp pu ut t t to o s st td do ou ut t: :



B Be ec ca au us se e t th he er re e a ar re e s so o m ma an ny y m me es ss sa ag ge es s, , y yo ou u m ma ay y w wa an nt t t to o f fiillt te er r
o ou ut t o on nlly y t th ho os se e t to o s st td do ou ut t, , s so o y yo ou u’ ’llll n ne ee ed d t to o c cr re ea at te e a a f fiillt te er r t th ha at t
s sh ho ow ws s o on nlly y m me es ss sa ag ge es s t ta ag gg ge ed d w wiit th h “ “S Sy ys st te em m. .o ou ut t” ”. . P Pr re es ss s t th he e
green + which willll d diis sp plla ay y t th he e L Lo og g F Fiillt te er r d diia allo og g b bo ox x d diis sp plla ay ye ed d o on n
t th he e r riig gh ht t. . E En nt te er r “ “s st td do ou ut t” ” f fo or r t th he e f fiillt te er r n na am me e a an nd d “ “S Sy ys st te em m. .o ou ut t” ”
for the Log Tag.

N No ow w y yo ou u w wiillll h ha av ve e a a t ta ab b iin n L Lo og gC Ca at t c ca alllle ed d “ “s st td do ou ut t” ” w wh hiic ch h w wiillll
only contain messages sent to stdout.



Logging Messages

Android provides a built-iin n llo og gg giin ng g f fa ac ciilliit ty y ( (android.util.Log) which allows for fine-g gr ra aiin ne ed d llo og gg giin ng g a an nd d filtering. Use
t th he e s sa am me e llo og g t ta ag g f fo or r e ea ac ch h o of f y yo ou ur r m me es ss sa ag ge es s: :

pprriivvaattee ssttaattiicc ffiinnaall SSttrriinngg LLOOGG__TTAAGG == ""LLoogg__HHeellllooAAnnddrrooiidd"";;

To log a message:

int x = 2;
Log.v(LOG_TAG, "x is " + x);

T Th he er re e a ar re e v va ar riio ou us s t ty yp pe es s o of f m me es ss sa ag ge es s y yo ou u m ma ay y w wa an nt t t to o llo og g: :

v = verbose d = debug i = = iin nf fo or rm ma at tiio on n w = warning e = error

Create a log filter for "L L Lo o og g g_ _ _H H He e el lll llo o oA A An n nd d dr r ro o oi iid d d" " " t t to o o s s se e ee e e o o on n nl lly y y m m me e es s ss s sa a ag g ge e es s s i iin n n L L Lo o og g gC C Ca a at t t t t th h ha a at t t a a ar r re e e f f fr r ro o om m m t t th h hi iis s s a a ap p pp p pl lli iic c ca a at t ti iio o on n n. . .


This w wo or rk k iis s lliic ce en ns se ed d u un nd de er r a a
C Cr re ea at tiiv ve e C Co om mm mo on ns s A At tt tr riib bu ut tiio on n 3 3. .0 0 Unported License This example application lla au un nc ch he es s a a s se ec co on nd d a ac ct tiiv viit ty y, , p pa as ss siin ng g iit t t th he e v va allu ue e of the mHelloCount v va ar riia ab blle e. . T Th he e s se ec co on nd d
a ac ct tiiv viit ty y s se en nd ds s b ba ac ck k a a b bo oo olle ea an n v va allu ue e iin nd diic ca at tiin ng g iif f t th he e c ch he eckbox was clicked or not. The value of mmHHeellllooCCoouunntt is also
maintained when the app’s s lla ay yo ou ut t iis s c ch ha an ng ge ed d f fr ro om m p pe er rs sp pe ec ct tiiv ve e t to o landscape.

HelloAndroid.java

package com.example.helloandroid;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

ppuubblliicc ccllaassss HHeellllooAAnnddrrooiidd eexxtteennddss AAccttiivviittyy {{

private int mHelloCount = 0;

//**** CCaalllleedd wwhheenn tthhee aaccttiivviittyy iiss ffiirrsstt ccrreeaatteedd.. **//
@Override
ppuubblliicc vvooiidd oonnCCrreeaattee((BBuunnddllee ssaavveeddIInnssttaanncceeSSttaattee)) {{
ssuuppeerr..oonnCCrreeaattee((ssaavveeddIInnssttaanncceeSSttaattee));;
sseettCCoonntteennttVViieeww((RR..llaayyoouutt..mmaaiinn));;

ffiinnaall EEddiittTTeexxtt eeddiitttteexxtt == ((EEddiittTTeexxtt)) ffiinnddVViieewwBByyIIdd((RR..iidd..nnaammee));;

ffiinnaall BBuuttttoonn bbuuttttoonn == ((BBuuttttoonn)) ffiinnddVViieewwBByyIIdd((RR..iidd..hheelllloo__bbuuttttoonn));;
bbuuttttoonn..sseettOOnnCClliicckkLLiisstteenneerr((nneeww VViieeww..OOnnCClliicckkLLiisstteenneerr(()) {{
public void onClick(Vieeww vv)) {{

mHelloCount++;
TTooaasstt..mmaakkeeTTeexxtt((HHeellllooAAnnddrrooiidd..tthhiiss,, ""HHeelllloo,, "" ++ eeddiitttteexxtt..ggeettTTeexxtt(()) ++
"" (("" ++ mmHHeellllooCCoouunntt ++ "")) "",,
TTooaasstt..LLEENNGGTTHH__SSHHOORRTT))..sshhooww(());;

//// SSeenndd tthhee vvaalluuee ooff mmHHeellllooCCoouunntt ttoo tthhee SSeeccoonnddAAccttiivviittyy
IInntteenntt mmyyIInntteenntt == nneeww IInntteenntt((HHeellllooAAnnddrrooiidd..tthhiiss,, SSeeccoonnddAAccttiivviittyy..ccllaassss));;
mmyyIInntteenntt..ppuuttEExxttrraa((""mmHHeellllooCCoouunntt"",, mmHHeellllooCCoouunntt));;

//// GGeett AAccttiivviittyyNNoottFFoouunnddEExxcceeppttiioonn iiff aaccttiivviittyy iissnn''tt rreeggiisstteerreedd iinn AAnnddrrooiiddMMaanniiffeesstt..xxmmll
ssttaarrttAAccttiivviittyyFFoorrRReessuulltt((mmyyIInntteenntt,, 00));;
}
});
}

@Override
pprrootteecctteedd vvooiidd oonnAAccttiivviittyyRReessuulltt((iinntt rreeqquueessttCCooddee,, iinntt rreessuullttCCooddee,, IInntteenntt ddaattaa)) {{
if (requestCode == 0) {
iiff ((rreessuullttCCooddee ==== RREESSUULLTT__OOKK)) {{

//// GGeett tthhee vvaalluuee rreettuurrnneedd bbyy tthhee SSeeccoonnddAAccttiivviittyy
bboooolleeaann rreett == ((bboooolleeaann)) ddaattaa..ggeettBBoooolleeaannEExxttrraa((""iiss__cchheecckkeedd"",, ffaallssee));;
TTooaasstt..mmaakkeeTTeexxtt((HHeellllooAAnnddrrooiidd..tthhiiss,, ""VVaalluuee rreettuurrnneedd:: "" ++ rreett,,
TTooaasstt..LLEENNGGTTHH__SSHHOORRTT))..sshhooww(());;
}
}
}

@Override
protected void onResttoorreeIInnssttaanncceeSSttaattee((BBuunnddllee ssaavveeddIInnssttaanncceeSSttaattee)) {{
ssuuppeerr..oonnRReessttoorreeIInnssttaanncceeSSttaattee((ssaavveeddIInnssttaanncceeSSttaattee));;
mmHHeellllooCCoouunntt == ssaavveeddIInnssttaanncceeSSttaattee..ggeettIInntt((""mmHHeellllooCCoouunntt""));;
}

@Override
pprrootteecctteedd vvooiidd oonnSSaavveeIInnssttaanncceeSSttaattee((BBuunnddllee oouuttSSttaattee)) {{
super.onSaveInstanceState(ouuttSSttaattee));;
oouuttSSttaattee..ppuuttIInntt((""mmHHeellllooCCoouunntt"",, mmHHeellllooCCoouunntt));;
}
}

This w wo or rk k iis s lliic ce en ns se ed d u un nd de er r a a
C Cr re ea at tiiv ve e C Co om mm mo on ns s A At tt tr riib bu ut tiio on n 3 3. .0 0 Unported License SecondActivity.java


package com.example.helloandroid;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;

ppuubblliicc ccllaassss SSeeccoonnddAAccttiivviittyy eexxtteennddss AAccttiivviittyy {{

@Override
ppuubblliicc vvooiidd oonnCCrreeaattee((BBuunnddllee ssaavveeddIInnssttaanncceeSSttaattee)) {{
ssuuppeerr..oonnCCrreeaattee((ssaavveeddIInnssttaanncceeSSttaattee));;
sseettCCoonntteennttVViieeww((RR..llaayyoouutt..sseeccoonndd));;

ffiinnaall CChheecckkBBooxx cchheecckkbbooxx == ((CChheecckkBBooxx)) ffiinnddVViieewwBByyIIdd((RR..iidd..mmyy__cchheecckk__bbooxx));;

ffiinnaall BBuuttttoonn bbuuttttoonn == ((BBuuttttoonn)) ffiinnddVViieewwBByyIIdd((RR..iidd..mmyy__bbuuttttoonn));
bbuuttttoonn..sseettOOnnCClliicckkLLiisstteenneerr((nneeww VViieeww..OOnnCClliicckkLLiisstteenneerr(()) {{
ppuubblliicc vvooiidd oonnCClliicckk((VViieeww vv)) {{
//// SSeenndd bbaacckk ttoo tthhee HHeellllooAAnnddrrooiidd aaccttiivviittyy tthhee cchheecckkbbooxx ssttaattuuss
IInntteenntt ddaattaa == nneeww IInntteenntt(());;
ddaattaa..ppuuttEExxttrraa((""iiss__cchheecckkeedd"",, ccheckbox.isChecked());
sseettRReessuulltt((RREESSUULLTT__OOKK,, ddaattaa));;
finish();
}
});

//// GGeett tthhee hheelllloo ccoouunntt sseenntt ffrroomm HHeellllooAAnnddrrooiidd
IInntteenntt ssoouurrcceeIInntteenntt == ggeettIInntteenntt(());;
iinntt hheellllooCCoouunntt == ssoouurrcceeIInntteenntt..ggeettIInnttEExxttrraa((""mmHHeellloCount", -1);
TTooaasstt..mmaakkeeTTeexxtt((tthhiiss,, ""HHeelllloo ccoouunntt:: "" ++ hheellllooCCoouunntt,,
TTooaasstt..LLEENNGGTTHH__SSHHOORRTT))..sshhooww(());;
}
}






AndroidManifest.xml


<?xml version="1.0" encoding="utf-88""??>>
<<mmaanniiffeesstt xxmmllnnss::aannddrrooiidd==""hhttttpp::////sscchheemmaass..aannddrrooiidd..ccoomm//aappkk//rreess//aannddrrooiidd""
ppaacckkaaggee==""ccoomm..eexxaammppllee..hheellllooaannddrrooiidd""
android:versionCode="1"
android:versionName="1.0">
<<aapppplliiccaattiioonn aannddrrooiidd::iiccoonn==""@@ddrraawwaabbllee//iiccoonn"" aannddrrooiidd::llaabbeell==""@@ssttrriinngg//aapppp__nnaammee"">>
<<aaccttiivviittyy aannddrrooiidd::nnaammee==""..HHeellllooAAnnddrrooiidd""
androidd::llaabbeell==""@@ssttrriinngg//aapppp__nnaammee"">>
<intent-filter>
<<aaccttiioonn aannddrrooiidd::nnaammee==""aannddrrooiidd..iinntteenntt..aaccttiioonn..MMAAIINN"" //>>
<<ccaatteeggoorryy aannddrrooiidd::nnaammee==""aannddrrooiidd..iinntteenntt..ccaatteeggoorryy..LLAAUUNNCCHHEERR"" //>>
</intent-filter>
</activity>

<!-- Added activity -->
<<aaccttiivviittyy aannddrrooiidd::nnaammee==""..SSeeccoonnddAAccttiivviittyy""
aannddrrooiidd::llaabbeell==""SSeeccoonndd AAccttiivviittyy"" //>>
</application>
</manifest>



This w wo or rk k iis s lliic ce en ns se ed d u un nd de er r a a
C Cr re ea at tiiv ve e C Co om mm mo on ns s A At tt tr riib bu ut tiio on n 3 3. .0 0 Unported License
res/layout/main.xml

<?xml version="1.0" encoding="utf-88""??>>
<<LLiinneeaarrLLaayyoouutt xxmmllnnss::aannddrrooiidd==""hhttttpp::////sscchheemmaass..aannddrrooiidd..ccoomm//aappkk//rreess//aannddrrooiidd""
android:orientation="vertical"
aannddrrooiidd::llaayyoouutt__wwiiddtthh==""ffiillll__ppaarreenntt""
aannddrrooiidd::llaayyoouutt__hheeiigghhtt==""ffiillll__ppaarreenntt"" >>

<EditText
android:id="@+id/name"
aannddrrooiidd::llaayyoouutt__wwiiddtthh==""ffiillll__ppaarreenntt""
aannddrrooiidd::llaayyoouutt__hheeiigghhtt==""wwrraapp__ccoonntteenntt""
aannddrrooiidd::tteexxtt==""@@ssttrriinngg//hheelllloo"" //>>

<Button
aannddrrooiidd::iidd==""@@++iidd//hheelllloo__bbuuttttoonn""
aannddrrooiidd::llaayyoouutt__hheeiigghhtt==""wwrraapp__ccoonntteenntt""
aannddrrooiidd::llaayyoouutt__wwiiddtthh==""wwrraapp__ccoonntteenntt""
android:text="Press Me" />

</LinearLayout>





res/layout/second.xml


<?xml version="1.0" encoding="utf-88""??>>
<<LLiinneeaarrLLaayyoouutt xxmmllnnss::aannddrrooiidd==""hhttttpp::////sscchheemmaass..aannddrrooiidd..ccoomm//aappkk//rreess//aannddrrooiidd""
android:orientation="vertical"
aannddrrooiidd::llaayyoouutt__wwiiddtthh==""ffiillll__ppaarreenntt""
aannddrrooiidd::llaayyoouutt__hheeiigghhtt==""ffiillll__ppaarreenntt"" >

<<CChheecckkBBooxx aannddrrooiidd::tteexxtt==""CChheecckkeedd??""
aannddrrooiidd::iidd==""@@++iidd//mmyy__cchheecckk__bbooxx""
aannddrrooiidd::llaayyoouutt__wwiiddtthh==""wwrraapp__ccoonntteenntt""
android::llaayyoouutt__hheeiigghhtt==""wwrraapp__ccoonntteenntt"" />

<Button
android:id="@+id/my_button"
aannddrrooiidd::llaayyoouutt__hheeiigghhtt==""wwrraapp__ccoonntteenntt""
aannddrrooiidd::llaayyoouutt__wwiiddtthh==""wwrraapp__ccoonntteenntt""
aannddrrooiidd::tteexxtt==""SSeenndd IInnffoo BBaacckk"" />

</LinearLayout>







values/strings.xml


<?xml version="1.0" encoding="utf-88""??>>
<resources>
<<ssttrriinngg nnaammee==""hheelllloo"">>AAnnddrrooiidd<<//ssttrriinngg>>
<<ssttrriinngg nnaammee==""aapppp__nnaammee"">>HHeelllloo AAnnddrrooiidd<<//ssttrriinngg>>
</resources>
This w wo or rk k iis s lliic ce en ns se ed d u un nd de er r a a
C Cr re ea at tiiv ve e C Co om mm mo on ns s A At tt tr riib bu ut tiio on n 3 3. .0 0 Unported License