Manual Inicio Android

download Manual Inicio Android

of 276

Transcript of Manual Inicio Android

  • 7/23/2019 Manual Inicio Android

    1/276

    "#$%#& '$()(* +$,-*(,.#/*/ 01/()*/ 2#-# )-3#- %$# #2&()#)(4$+$,-*(, )*$ 35362&*/7

    8& 2-3/3$93 ,*)%63$9* 9-#9# ,3 ($9-*,%)(- #& #&%6$* #& ,3/#--*&&* ,3 #2&()#)(*$3/+$,-*(,: ;%(1$,*&* 3$ 3& ,3/#--*&&* ,3 %$# #2&()#)(4$ )*$ #$,* 3& +?@ A+$,-*(, ?3

  • 7/23/2019 Manual Inicio Android

    2/276

    !

    !"#$" &' ()*+'*,&)

    -./0 '1 2*&3),&4 5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 6

    8& /(/936# *23-#9(/3,&"& ? 9'3:,1)1 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 ;@

    K*$)329* ,3 /3;%-(,#, 3$ +$,-*(, 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 EC

    K*$)329* ,3 23-6(/* 3$ +$,-*(, 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 EC

    A*1+"$"(,B* 5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 ;C

    K*$/(,3-#)(*$3/ 2-3

  • 7/23/2019 Manual Inicio Android

    3/276

    #

    A*+'>3"(,B* &' 27! &'*+3) &' D($,91' 5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 C;

    '$93;-#)(4$ ,3 +$,-*(, ,3$9-* ,3 23-/23)9(

  • 7/23/2019 Manual Inicio Android

    4/276

    $

    85362&* ,3 -3)%-/* 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 FE

    K#&(U()#,*-3/ ,3 -3)%-/*/ 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 FE

    ',/ ,3 -3)%-/*/ W L75#3'>"3 ,*+'3"((,B* 5555555555555555555555555555555555555555555555555555555555555555555555555555 QW

    K#60(#- W*%9 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 Fb

    +;-3;#$,* 0*94$ ($93-#)9(

  • 7/23/2019 Manual Inicio Android

    5/276

    %

    DJ'3(,(,)K L3'"3 /* ()*8'3+,&)3 &' +':9'3"+/3"5 5555555555555555555555555555555555555555555555555555555555555555555 WC

    K-3#- 2-*W3)9* 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 b[

    K-3#- #9-(0%9*/ 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 bb

    Q/#$,* 3& 3,(9*- ,3 W*%9/ 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 b\

    +;-3;#-

  • 7/23/2019 Manual Inicio Android

    6/276

    &

    A*+'3"(+/"3 ()* /*" \"1' &' 7"+)1 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 ;;

    +;-3;#- -3)%-/*/ # #2&()#)(4$ 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 EEX

    ?(/3c* ,3 W*%9/ 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 ECE

    +;-3;#- )/3/ 2#-# 6#$35* ,3 ($93-#))(4$ )*$ 0#/3 ,3 ,#9*/ 777777777777777777777777777777777777777777777777777777777777 ECC

    !3"O"3 /*" 3/+" 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 ;C@

    !"#$%&'()( &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& +,-

    ./0012"#/031"12"14&'()( &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& +,5

    67(8%3#412"#/0&'()(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& +,9

    .41(2#:0 ;1 1$1

    L3'"3 /* $'(+)3 .S 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 ;X;

    ij%h /*$ &*/ )4,(;*/ jLk 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 E]C

    H(0-3-d# Mf($; 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 E]C

    D14')>3_P,(" '* 2*&3),& 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 @#)(4$ 93$36*/ ,(/2*$(0&3/k 77777777777777777777777777777777777777777777777777777777777777777777777 CDX

    ij%h 2-*#)(4$ 3/ 635*- 2#-# 6( #2&()#)(4$k 7777777777777777777777777777777777777777777777777777777777777777 CED

    i8/91 ,(/2*$(0&3 W #)9($' 299=(3,9+ ? /1) &'

    E)$$'? a3":'T)3` '* 2*&3),& 5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 @@;

    P*&&3Wg %$ )&(3$93 l@@. 2#-# +$,-*(,7 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 CC\

    +;-3;#$,* H(0-3-d# 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 CC]

    .-32#-#$,* P*&&3W 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 CCX

    K*$9($%#6*/ )*$ 3& ,(/3c* 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 C[D

    7/;1$/ D14%/0( &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& F,I

  • 7/23/2019 Manual Inicio Android

    7/276

    '

    .=%"/5;8S &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& F??

    .=#;(;/ 2/0 1$ T=12/ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& F?-

    !"#$%&'()' 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 Cb]

    ./$/41% ;1 "#8/ 841;1"14

  • 7/23/2019 Manual Inicio Android

    8/276

    (

  • 7/23/2019 Manual Inicio Android

    9/276

    )

    !"#$ &' ()*+,-*.

    !" $%$&'() *+',)&%-* ./0,*%0

    +$,-*(, 3/ %$ /(/936# *23-#9(

  • 7/23/2019 Manual Inicio Android

    10/276

    *

    8& /(/936# +$,-*(, 3/ %$# )*62&39# 2( ,3 /*U9a#-3: =%3 /%3&3 3/9#- ,(

  • 7/23/2019 Manual Inicio Android

    11/276

    !+

    6//A$1*U-3)3 3& /3-#$ #2&()#)(4$ 6//A$1 D$(N &* =%3

    &3/ 23-6(93 )*62-#- 3 ($/9#- / #2&()#)(*$3/ ,3& /3-#,*/ 2#-# #-)Z(

  • 7/23/2019 Manual Inicio Android

    12/276

    !!

    +60*/ '?8/ )*$9(3$3$ 9*,# U%$)(*$#&(,#, $3)3/#-(# 2#-# )-3#-: )*62(-: ,32%-#- W ,3/2&3;#-

    #2&()#)(*$3/ ,3 +$,-*(,7 @#60(h$ 23-6(93$ # &*/ ,3/#--*&,*-3/ )-3#- 3 ($()(#- &*/ ,(/2*/(9(

  • 7/23/2019 Manual Inicio Android

    13/276

    !#

    H*/ #-)Z(

  • 7/23/2019 Manual Inicio Android

    14/276

    !$

    /3 2-3/3$9#$ #& %/%#-(* #$93/ ,3 ($/9#- #2&()#)(4$7 8& %/%#-(* 9(3$3 =%3 ,3)(,(- /( 3/9*/ 23-6(/*/

    /3-1$ *9*-;#,*/ # #2&()#)(4$7

    I( 3& %/%#-(* ,3$(3;# %$# #%9*-(>#)(4$ $3)3/#-(#: #2&()#)(4$ -3)(*$#,# $* /3 2%3,3 ($/9#-7 H#

    )*62-*0#)(4$ ,3 #%9*-(>#)(4$ /4&* /3 -3#&(># ,%-#$93 ($/9#)(4$: &*/ 23-6(/*/ $* 2%3,3$ /3-

    $3;#,*/ % *9*-;#,*/ ,3/2%h/ ,3 ($/9#)(4$7

    Q$# #2&()#)(4$ +$,-*(, ,3)-# &*/ 23-6(/*/ $3)3/#-(*/ 3$ /% #-)Z(

  • 7/23/2019 Manual Inicio Android

    15/276

    !%

    01/234 #

    )7 +Z*-# Z#)3- )&()T 3$ 3& 0*94$ 6*/9-#,* 3$ '6#;3$ [: W 3/23-#- # ,3/)#-;#- 2#-#

    ($/9#-&*

    01/234 $

    9,'+),), F

    E7 .#-# )*$/(,3-#)(*$3/ ,3 3/93 6#$%#& /3 9-#0#5#-1 )*$

  • 7/23/2019 Manual Inicio Android

    16/276

    !&

    01/234 &

    F7 H# C W &%3;* )&()T #& 0*94$

    04=./>>: )*6* /3 6%3/9-# 3$ '6#;3$ ]

  • 7/23/2019 Manual Inicio Android

    17/276

    !'

    01/234 (

    07 8/23-#6*/ %$ 9(362* 6(3$9-#/ ,3/)#-;# 3& /,T ,3 ($93-$39 W /3 ($/9#

    @3-6($#,# ,3/)#-;# 3 ($/9#)(4$ )3--#6*/ 3& 5467-86 9:;

  • 7/23/2019 Manual Inicio Android

    18/276

    !(

    +P?/ &3 23-6(93$ 2-*0#- /%/ #2&()#)(*$3/ ,3 +$,-*(, 3$ ,(U3-3$93/

  • 7/23/2019 Manual Inicio Android

    19/276

    !)

    E/F>/ !D 5./G-= ?/7/ 3> 31H>/6-7 63 68=?-=8.8I-= 63 5467-86

    5E5JK :L9MN0OM0P,

    5QEuL,ELN "+f'"'M+ 8H 8"QH+?JL7

    MENQuR!! K+"N'+ H+ JL'8G@+K'vG ?8H 8"QH+?JL ?8 lJL'MJG@+H + P8L@'K+H O P'K8P8LI+ 7

    R) 8GK'8G?8 O +.+V+ H+ L8?

    7**8"' -$H ./0,*%0 .@#,* 6%)Z* 61/ -12(,*7

    ?3/2%h/ 2-3/(*$#- 3& 0*94$ JY7 8/9* )-3#-1 )*$U(;%-#)(4$ ,3& +P? W &* ,3/2&3;#-1 0#5* &(/9# ,3

    ,(/2*/(9(

  • 7/23/2019 Manual Inicio Android

    23/276

    ##

    F/%B%), &? .@#,*: $* ,393$3- 3& +P? ,%-#$93 3& ,3/#--*&&*7 I( /3 )#60(# #&;* 3$ #2&()#)(4$ W =%(3-3

    2-*0#- %$# $%3

  • 7/23/2019 Manual Inicio Android

    25/276

    #%

    .#-# )-3#- %$ $%3

  • 7/23/2019 Manual Inicio Android

    26/276

    #&

    .%&/3 3& 0*94$ G3`9 W /3&3))(*$3 2$9(& N$T+)9(

  • 7/23/2019 Manual Inicio Android

    27/276

    #'

    '$9-*,%)3 &*/ /(;%(3$93/ ,#9*/ 3$ 3& )%#,-* ,3 ,(1&*;* 2#-# 2$9(& N$T+)9(/ $D T/>-73= ?/7/ >/ ?>/4.8>>/

    O/7/13.37 T/>H3

    +)9(

  • 7/23/2019 Manual Inicio Android

    28/276

    #(

    .%&/3 3& 0*94$ _($(/Z7 8& #/(/93$93 &3 2%3,3 23,(- =%3 ($/9#&3 0(0&(*93)# ,3 )*62#9(0(&(,#,7 I( 3/ #/d:

    /3&3))(*$3 2#-# ($/9#-

  • 7/23/2019 Manual Inicio Android

    29/276

    #)

    !"#$%&%&'( *+&% ,- -.,&%-%&/+ 0+1$'&1

    !"#"$%&%

    F/%B%), .@#- &*/ )*62*$3$93/ ,3 ($93-U#> ,3

    %/%#-(* 2#-# ,(U3-3$93/ )*$U(;%-#)(*$3/ ,3 ,(/2*/(9(?B%E/

    H#/ )#1K%/*$ a(,;39/ ,3 ($93-U#> ,3 %/%#-(*: 2*- 35362&*: 0*9*$3/ * )#62*/ ,3 93`9*7 H#/ #-/3 2#-# )*$U(;%-#- /% #2#-(3$)(# W )*62*-9#6(3$9*7

    + _#1K64/=83/ -3/2*$/#0&3 ,3 *-;#$(>#)(4$ ,3 *9-#/

  • 7/23/2019 Manual Inicio Android

    37/276

    $'

    android.view.ViewGroup=%3 3`9(3$,3 AZ3-3,#B ,3 )/3 android.view.View =%3 3/

    )/3 0#/3 2#-# /

  • 7/23/2019 Manual Inicio Android

    38/276

    $(

    @*,#/ / #)9(

  • 7/23/2019 Manual Inicio Android

    39/276

    $)

    !" $%&'(')*+, -) .&-/,'-

    @',$%E/ : +)R?'&'

    8& #9-(0%9* ,3 3!(4!5* ,3U($3 3& 2#=%393 0#/3 2#-# &*/ *0539*/ ^#

  • 7/23/2019 Manual Inicio Android

    40/276

    $*

    H# /3))(4$ %/3/n/,T 3$ 3& 6#$(U(3/9* 93 23-6(93 3/23)(U()#- 3& minSdkVersionW targetSdkVersion

    / %D -7 :3=@78?@8U4

    6($I,TP3-/(*$

    ?3U($3 # )*6* U(&9-* 3$ V**;&3 .W: 3/ ,3)(-: %$ %/%#-(* $* 2%3,3 ($/9#- #2&()#)(4$

    3$ %$ ,(/2*/(9(

  • 7/23/2019 Manual Inicio Android

    41/276

    %+

    8$ -3#&(,#, 3/9# *2)(4$ /3 %9(&(># 6%W 2*)*: )*6* %$# #2&()#)(4$ ($/9#,# 3$ 3& #&6#)3$#6(3$9*

    3`93-$* /3 ,39(3$3 %$# =%3 3& ,(/2*/(9(

  • 7/23/2019 Manual Inicio Android

    42/276

    %!

    N3@H7=-= R->637 :3=@78?.8-4

    / 2-*2(3,#,3/ #-0(9-#-(#/ ,3 *0539*/ )*$ 3& 9(362*7

    L#a ,#9# R-3/R-#a

    +-)Z(

  • 7/23/2019 Manual Inicio Android

    43/276

    %#

    I( /3 #;-3;# %$ $%3

  • 7/23/2019 Manual Inicio Android

    44/276

    %$

    H*/ ,3/#--*&,*-3/ /*$ &(0-3/ ,3 ,3/#--*&- /%/ 2-*2(*/

  • 7/23/2019 Manual Inicio Android

    45/276

    %%

    @Overrideprotected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

    }

    }

  • 7/23/2019 Manual Inicio Android

    46/276

    %&

    tools:context=".MainActivity">

    5*/$%0',)B%*/'$ 0' 0'$'(+'P* B*/ "):*?&$

    K1&)%$,* 3& W*%9 W 3*-#$,* /

  • 7/23/2019 Manual Inicio Android

    47/276

    %'

    +/(;$#- 3& $*60-3 onClick # 2-*2(3,#, android:onClick ,3 9% Button7

    E8?

    8/9* ,3U($3 =%3 %$ 6h9*,* public void onClick (View view)/3-1 ,* 3$ #)9(

  • 7/23/2019 Manual Inicio Android

    48/276

    %(

    Q/# 3& 6h9*,* text.getText().toString()2#-# &33- )#,3$# =%3 /3 3$)%3$9-# 3$ 3& )#62* 3,(9*- W

    #;-3;# 3& 93`9* #& 63$/#53 ,3 9% @*#/97

    @)"%0), ('/$)G' '(',8'/&'

    L3($()(3 #2&()#)(4$ W #/3;%-#- =%3 3& Toast6%3/9-# 3& 93`9* =%3 )*$9(3$3 3& )#62* EditText7

    !"#$%&%&'( *+,-.&$ #+ -/ 0&12/ 3#- -/4'.2 #+

    !"#$%& (# #)#*+*",-

    .8 ,' 8) , ,) 0% * 8, *? + : ,)0 %* >?& &* /$ )" ") :* ?&

    I3;%(- %/#$,* 3& 2-*W3)9* ,3$*6($#,* com.utm.primero7 8$ 3/93 353-)()(* /3 #;-3;# -#,(* 0%99*$/

    #& W*%97 ?323$,(3$,* ,3 /3&3))(4$ ,3& %/%#-(* 3& #)*6*,* ,3 &*/ -#,(* 0%99*$/ )#60(# ,3 Z*-(>*$9#&

    #

  • 7/23/2019 Manual Inicio Android

    49/276

    %)

    .#-# #/(;$#- ',/ # /

  • 7/23/2019 Manual Inicio Android

    50/276

    %*

    5)(>%), ") *,%'/&)B%E/ 0'" ,)0%* 8,*?+ 0%/)(QB)('/&'

    K#60(#- 3& 6h9*,* onCreate() 3$ 9% #)9(

  • 7/23/2019 Manual Inicio Android

    51/276

    &+

    break;}

    }});

    @)"%0),

    K*--3- #2&()#)(4$ W /3&3))(*$#- &*/ ,(U3-3$93/ -#,(* 0%99*$/7 +/3;%-#-/3 =%3 *-(3$9#)(4$ ,3 &*/

    0*9*$3/ )#60(3 3$ 0#/3 # /3&3))(4$7

    !"#$%& ()"&*+,)"

    D'6','/B%)$ ) ,'B?,$*$ '/ BE0%8*

    H# )/3 Reosurces 23-6(93 #))3,3- # -3)%-/*/ ($,(

  • 7/23/2019 Manual Inicio Android

    52/276

    &!

    TextView textView = (TextView) findViewById(R.id.action_settings);

    // TODOdo something with the TextView}

    }

    @#60(h$ 3/ 2*/(0&3 -3#&(>#- 0m/=%3,#/ 3$ %$# 53-#-=%d# ,3

  • 7/23/2019 Manual Inicio Android

    53/276

    @#60(h$ /3 2*,-d# #&6#)3$#- ,#9*/ 3/9-%)9%-#,*/ 3$ )#-239# /res/raw: 23-* 3/ )*$/(,3-#,# 0%3$#

    2-#)9()# %/#- 3& ,(-3)9*-(* assets2#-# 9#&3/ ,#9*/7

    .B B'$)/ 0* )$ $'&$

    .#-# #))3/#- # 3/9*/ ,#9*/ /3 Z#)3

  • 7/23/2019 Manual Inicio Android

    54/276

    &$

    .$ %8 /) /0 * ") %()8' / ) ?/ -%' N %( )8 '/H

    +/(;$#- 3& #-)Z(

  • 7/23/2019 Manual Inicio Android

    55/276

    &%

    O7-?836/6 T/>-7

    G*60-3 2#=%393 )*67%967#$,-*(,7)*$

  • 7/23/2019 Manual Inicio Android

    56/276

    &&

    5,'), )&,%>?&*$

    +$,-*(, 23-6(93 )-3#- -3)%-/*/ 3/919()*/ 2#-# ,3U($(- #9-(0%9*/: 2*- 35362&*: I9-($;/ * )*&*-3/7 8/*/

    #9-(0%9*/ 2%3,3$ /3- %/#,*/ 3$ *9-*/ #-)Z(

  • 7/23/2019 Manual Inicio Android

    57/276

    &'

    '$;-3/#- myColor)*6* 3& $*60-3 W #F5F5F5 )*6* 3& -7

    )3&/(%/ # K3&/(%/

    U#Z-3$Z3(9 # _#Z-3$Z3(9

    )#&) K#&)%-

    E/F>/ )D 5.78FH.-= 9.7842

    K#60(#- # -32-3/3$9#)(4$ f"H W

  • 7/23/2019 Manual Inicio Android

    58/276

    &(

    I3&3))(*$#- 3& #-)Z(

  • 7/23/2019 Manual Inicio Android

    59/276

  • 7/23/2019 Manual Inicio Android

    60/276

    &*

    +--#/9-#- %$ N%99*$ ,3/,3 /3))(4$ _*-6 e(,;39/ ,3$9-* ,3& W*%97

    8& -3/%&9#,* ,303-d# ,3 &%)(- /(6(- # /(;%(3$93 )#29%-# ,3 2#$9#&

    K#60(#$,* # 23/9#c# f"H ,3& #-)Z(

  • 7/23/2019 Manual Inicio Android

    61/276

    '+

    android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity">

    ,-./

    .*,-d#$

  • 7/23/2019 Manual Inicio Android

    62/276

    '!

    H*/ #9-(0%9*/ ,3 %$#

  • 7/23/2019 Manual Inicio Android

    63/276

    '#

    android:ems="10"android:inputType="numberSigned|numberDecimal">

    @*,*/ &*/ )*62*$3$93/ ,3 ($93-U#> ,3 %/%#-(* 3/91$ )*$93$(,*/ 3$ %$ W*%97 +/(;$#- 3& )*&*- ,3

    U*$,* # 3/93 Layout. I3&3))(*$#- K*&*- W 3$9*$)3/ /3&3))(*$#- myColor3$ 3& ,(#&*;*7 K*6* %$

    35362&* /3 2%3,3 %/#- m&9(6# &d$3# ,3& /(;%(3$93 /3;63$9* ,3 f"H7

    + )*$9($%#)(4$ 3& 0#)T;-*%$, ,303-d# ,3 )#60(#- #& )*&*- whitesmoke 7 .*,-d# /3- ,(U()(& $*9#-

    ,(U3-3$)(#7

    K#60(#- # 9#0 activity_main.xml W

  • 7/23/2019 Manual Inicio Android

    64/276

    '$

    android:layout_marginTop="41dp">

    5,'), B")$' ?&%"%&),%)

    K-3#- /(;%(3$93 )/3 %9(&(9#-(# 2#-# )*$

  • 7/23/2019 Manual Inicio Android

    65/276

    '%

    importandroid.view.View;importandroid.widget.EditText;importandroid.widget.RadioButton;importandroid.widget.Toast;

    publicclassMainActivity extendsActivity {

    privateEditText texto;

    @OverrideprotectedvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);texto= (EditText) findViewById(R.id.editText1);

    }

    @OverridepublicbooleanonCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it ispresent.

    getMenuInflater().inflate(R.menu.main, menu);returntrue;}

    publicvoidonClick(View view){switch(view.getId()) {caseR.id.button1:

    RadioButton celsiusBtn = (RadioButton)findViewById(R.id.radio0);

    RadioButton fahrenheitBtn = (RadioButton)findViewById(R.id.radio1);

    if(texto.getText().length() == 0){Toast.makeText(this, "Por favor ingrese un nmero

    vlido", Toast.LENGTH_LONG).show();return;

    }floatinputValue =

    Float.parseFloat(texto.getText().toString());if(celsiusBtn.isChecked()){

    texto.setText(String.valueOf(Convertidor.convertirFahrenheitACelsius(inputValue)));

    celsiusBtn.setChecked(false);fahrenheitBtn.setChecked(true);

    }else{

    texto.setText(String.valueOf(Convertidor.convertirCelsiusAFahrenheit(inp

    utValue))); fahrenheitBtn.setChecked(false);celsiusBtn.setChecked(true);

    }break;

    }}

    }

  • 7/23/2019 Manual Inicio Android

    66/276

    '&

    ,-./

    8& onClick 3/ ,* 2*- %$ )&()T 3$ 3& 0*94$ # )#%/# ,3 2-*2(3,#, onClick ,3& 0*94$7

    F/%B%), )+"%B)B%E/

    K&()T ,3-3)Z* /*0-3 3& 2-*W3)9* W /3&3))(*$#- L%$n+/ x +$,-*(, +22&()#9(*$7 I( %$ 36%,*- #m$ $* 3/91)*--(3$,*: 3$9*$)3/ /3 ($()(#-17

    8/)-(0(- %$ $m63-*: /3&3))(*$#- )*$

  • 7/23/2019 Manual Inicio Android

    67/276

    ''

    56I37.34@8/

    RelativeLayout 3/ %$ 6#$35#,*- ,3 W*%9 )*62&35* W ,303-d# /3- /*#63$93 %/#,* /(

    )*62&35(,#, ,3& W*%9 &* -3=%(3-37

    .& ,% >? &* $ 0' " ") :* ?&

    @*,*/ &*/ W*%9/ 23-6(93$ #& ,3/#--*&,*- ,3U($(- &*/ #9-(0%9*/7 H*/ Z(5*/ 2%3,3$ 9#60(h$ ,3U($(-

    #9-(0%9*/ &*/ )%#&3/ 2%3,3$ /3- 3.- S /4@X-

    5.78FH.- :3=@78?@8U4

    #$,-*(,gW*%9sa(,9Z ?3U($3 3& #$)Z* ,3& a(,;397

    #$,-*(,gW*%9sZ3(;Z9 ?3U($3 3& #&9* ,3& a(,;397

    H*/ a(,;39/ 2%3,3$ %/#- 9#6#c*/ U(5*/: 3/9* 3/: )*$ ,3U($()(4$ dp: 2*- 35362&*: 100dp7 "(3$9-#/ dp

    3/ %$ 9#6#c* U(5* 3/93 /3 3/)#-1 )*$ / )*$U(;%-#)(*$3/ ,3 ,(U3-3$93/ ,(/2*/(9(

  • 7/23/2019 Manual Inicio Android

    68/276

    '(

    L,)('S):*?&

    FrameLayout 3/ %$ 6#$35#,*- ,3 W*%9 3& )%#& ,(0%5# 9*,*/ &*/ 3&363$9*/ Z(5*/ %$* #--(0# ,3& *9-*7

    8/93 23-6(93 )-3#- #;-#,#0&3/ 3U3)9*/

  • 7/23/2019 Manual Inicio Android

    69/276

    ')

    P3-9()#& 2*,-d# -3/%&9#- 3$ %$ W*%9 )*6* /3 6%3/9-# 3$ /(;%(3$93 (6#;3$7

    LinearLayout 2%3,3 /3- #$(,#,* 2#-# &*;-#- W*%9/ 61/ )*62&35*/7

    LinearLayout /*2*-9# #/(;$#- %$ 23/* ($,(

  • 7/23/2019 Manual Inicio Android

    70/276

    '*

    7,%0S):*?&

    GridLayout U%3 ($9-*,%)(,* )*$ +$,-*(, F7D7 8/93 W*%9 23-6(93 *-;$(>#- %$#

  • 7/23/2019 Manual Inicio Android

    71/276

    (+

    android:layout_column="1"android:layout_columnSpan="2"android:layout_row="1"android:ems="10"/>

    8/9* )-3# %$# ($93-U#> ,3 %/%#-(* )*6* 3$ /(;%(3$93 9*6# ,3 2#$9#&

  • 7/23/2019 Manual Inicio Android

    72/276

    (!

    ;B,*""@%'N

    H# )/3 ScrollView 2%3,3 /3- %/#,# 2#-# )*$93$3- %$ View =%3 2*,-d# /3- 61/ ;-#$,3 * #$)Z# =%3

    2#$9#& 8$ 3/93 )#/* ScrollView ,3/2&3;#-1 %$# 0#--# ,3 /)-*&& 2#-# ,3/2>#-/3 3$ 3& )*$93`9*7

    .*- /%2%3/9* 3/93 View 2%3,3 /3- %$ W*%9 =%3 2%3,3 )*$93$3- *9-*/ 3&363$9*/7

    8& /(;%(3$93 )4,(;* 6%3/9-# %$ 35362&* ,3 %$ #-)Z(

  • 7/23/2019 Manual Inicio Android

    73/276

    (#

    android:orientation="vertical">

    K#60(#- )/3 ScrollViewActivity # )*6* /3 6%3/9-# 3& /(;%(3$93 )4,(;*7

    package de.vogella.android.scrollview;

    import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TextView;

  • 7/23/2019 Manual Inicio Android

    74/276

  • 7/23/2019 Manual Inicio Android

    75/276

    (%

  • 7/23/2019 Manual Inicio Android

    76/276

    (&

    !M+*,&), )+"%B)B%*/'$

    H#/ #2&()#)(*$3/ #$,-*(, ,303$ /3- U(-6#,#/ #$93/ ,3 =%3 /3#$ ($/9#,#/ 3$ %$ ,(/2*/(9(

  • 7/23/2019 Manual Inicio Android

    77/276

    ('

    ?3$9-* ,3 &*/ 6h9*,*/ ,3 ,#/ ,3& )()&* ,3

  • 7/23/2019 Manual Inicio Android

    78/276

    ((

    l#W #)(4$ ,3 0#/3/ ,3 ,#9*/ 3$ +$,-*(,g

    E7 ?(/3c#- W )-3#- 0#/3 ,3 ,#9*/ ,3 6#$3-# 3`93-$# %/#$,* #&;%$# #2&()#)(4$ A3$ 3/93 )#/*

    G##)4$ ,3 )/3 SQLiteOpenHelper 2#-# )-3#- 3/9-%)9%-# ,3 0#/3 ,3 ,#9*/ ,3/,3

    3& )4,(;*7

    5,'), ") O< B*/ ;ZS%&' '/ ])-%B)&H

    E7 H* 2-(63-* =%3 Z#W =%3 Z#)3- 3/ #0-(- 3& G#

  • 7/23/2019 Manual Inicio Android

    79/276

    ()

    01/234 *

    C7 8/)*;3- %$ $*60-3 # )*$3`(4$ 3$ $%3/9-* )#/* /3 -1 F6[/>H14-=C 3$ /3))(4$ UN81

    /3&3))(*$#- *2)(4$ G3a IjH(93 [: W 3$ /3))(4$ ,3 3("(^(%1 L#$1,3036*/ ,3 3/23)(U()#- %$

    &%;#- ,*$,3 ;%#-,#-36*/ $%3/9-# 0#/3 ,3 ,#9*/ -3)(3$9363$93 )-3#,# #/d 6(/6* )*6* 3&

    $*60-3 =%3 &3 =%3-36*/ ,#- #& #-)Z(

  • 7/23/2019 Manual Inicio Android

    80/276

    (*

    ,3/2&(3;#$ #,* 2#-# 9*,#/ / - 3/9* /3&3))(*$#6*/ 23/9#c# Y0;1[1%: 3$

  • 7/23/2019 Manual Inicio Android

    81/276

    )+

    )*&%6$# e(H14-: 3$ )*&%6$#

    L#1$;% #& /3&3))(*$#- )#60(# # )*6* /3 6%3/9-# 3$ '6#;3$ E[ W ,#6*/ %$ )&()T #& 0*94$

    3$)3--#,* 3$ 3& )%#,-* -*5*7

    01/234 !$

    \7 8$

  • 7/23/2019 Manual Inicio Android

    82/276

    )!

    01/234 !&

    S7 8$ 3/93 2%$9* #& )-3#- $%3

  • 7/23/2019 Manual Inicio Android

    83/276

    )#

    01/234 !(

    5),8), ") >)$' 0' 0)&*$ '/ '" +,*:'B&* 0' ./0,*%0

    E7 8$ 3/93 2%$9* 3/ $3)3/#-(* -3)*-,#- %0()#)(4$ 3$ =%3 ;%#-,#6*/ $%3/9-# 0#/3 ,3 ,#9*/:

    2*-=%3 $3)3/(9#6*/ )*2(#- ,()Z* #-)Z(

  • 7/23/2019 Manual Inicio Android

    84/276

    )$

    5),8), ") >)$' 0' 0)&*$ '/ ") )+"%B)B%E/ +),) +*0', ?$),")

    E7 H* 2-(63-* /3-1 )-3#- %$ 2#=%393 $%3

  • 7/23/2019 Manual Inicio Android

    85/276

    )%

    01/234 #+

    b7 +Z*-# )-3#-36*/ %$# 6h9*,* =%3 =3 3$ )#/* ,3 $* 3`(/9(-: ,()Z* 6h9*,* /3 -1 @X3@A:/./\/=3YZ: 3&

    )4,(;* $3)3/#-(* 3$ 3/9# )/3 /3 6%3/9-# 3$ '6#;3$ CE7

    01/234 #!

    \7 8& /(;%(3$93 6h9*,* $3)3/#-(* 3/ %$* =%3 $*/ #W%,3 # )*2(#- 0#/3 ,3 ,#9*/ =%3 93$36*/ 3$

    )#-239# /==3.= #& /(/936# ,3 #-)Z(

  • 7/23/2019 Manual Inicio Android

    86/276

    )&

    01/234 ##

    ]7 H*/ ,*/ 6h9*,*/ #$93-(*-3/ /*$ $3)3/#-(*/ 2%3/9* =%3 /*$ %9(&(>#,*/ 2*- 3& 6h9*,*

    @73/.3:/./\/=3YZ W# =%3 2-(63-*

  • 7/23/2019 Manual Inicio Android

    87/276

    )'

    S7 .*- m&9(6* U#&9# #;-3;#- ,*/ 6h9*,*/ 6%W (62*-9#$93/ 2#-# #0-(- W )3--#- 0#/3 ,3 ,#9*/:

    3/9*/ 6h9*,*/ /*$ -?34:/./\/=3YZ W @>-=3YZC 3$ '6#;3$ CF 2*,36*/ *0/3-

  • 7/23/2019 Manual Inicio Android

    88/276

    )(

    12. O =%3,#$,* 3& W*%9 activity_splash_screen.xml )*6* /3 6%3/9-# #

    )*$9($%#)(4$g

  • 7/23/2019 Manual Inicio Android

    89/276

    ))

    E[78& )4,(;* ,3 )/3 SplashScreen.java 3/ 6%W /(62&3: 3$ 3& 6h9*,* onCreate()/3

    )#-;# 3& W*%9 =%3 /3 #- W /3 6#$,# - # /%0)/3 ($93-$# 2-(

  • 7/23/2019 Manual Inicio Android

    90/276

    )*

    Void> {

    /** No realizamos nada en el mtodo onPreExecute* */

    @Override

    protectedvoidonPreExecute() {super.onPreExecute();

    }

    /** En el mtodo doInBackground es el momento* donde verificaremos la existencia de la base de datos* */

    @OverrideprotectedVoid doInBackground(Void... params) {

    DataBaseManager myDbHelper = new

    DataBaseManager(SplashScreen.this);try{myDbHelper.createDataBase();

    } catch(IOException e) {thrownewError("Imposible crear la base de

    datos");}returnnull;

    }

    /** Al momento de terminar la ejecucin del mtodo* doInBackground ser momento de ejecutar al mtodo* onPostExecute*/

    @OverrideprotectedvoidonPostExecute(Void result) {

    super.onPostExecute(result);// Despus de ejecutar la verificacin de la base de

    datos// cerrarremos esta actividad y lanzaremos la nnueva

    actividadIntent i = newIntent(SplashScreen.this,

    MainActivity.class);startActivity(i);// cerrar definitivamente esta actividad

    // para evitar que en el momento de dar Back seejecute de nuevo

    }}

    }

    E\7K#03 -3)*-,#- * Z#)3- $*9#- #&;%$#/ )*/#/g

  • 7/23/2019 Manual Inicio Android

    91/276

    *+

    #7 8/9# 3/ /4&* %$# U*-6# ,3 2*,3- #,# 3$ )%#&=%(3- 2#-93 ,3 $%3/9-* /(/936#: $* /*&* 3$ 3& /2/Z * 2#-#

  • 7/23/2019 Manual Inicio Android

    92/276

  • 7/23/2019 Manual Inicio Android

    93/276

    *#

    publicclassDBAdapter {

    //Campos de la BDpublicstaticfinalString KEY_ROWID= "_id";publicstaticfinalString KEY_CATEGORY= "categoria";publicstaticfinalString KEY_SUMMARY= "resumen";

    publicstaticfinalString KEY_DESCRIPTION= "descripcion";privatestaticfinalString DATABASE_TABLE= "todo";privateContext context;privateSQLiteDatabase database;privateDataBaseHelper dbHelper;

    publicDBAdapter(Context context) {this.context= context;

    }

    publicDBAdapter open() throwsSQLException{dbHelper= newDataBaseHelper(context);

    database= dbHelper.getWritableDatabase();returnthis;}

    publicvoidclose(){dbHelper.close();

    }

    /**** Crea una nueva tarea, si esto va bien retorna* la rowId de la tarea, de lo contrario retorna -1** */

    publiclongcrearNuevaTarea(String categoria, String resumen,String descripcion){

    ContentValues inicialValues = crearContentValues(categoria,resumen, descripcion);

    returndatabase.insert(DATABASE_TABLE, null, inicialValues);}

    //Actualiza la tareapublicbooleanupdateTarea(longrowId, String categoria, String

    resumen, String descripcion){

    ContentValues actulizaValues = crearContentValues(categoria,resumen, descripcion);

    returndatabase.update(DATABASE_TABLE,actulizaValues,KEY_ROWID+ "="+rowId, null) > 0;

    }

  • 7/23/2019 Manual Inicio Android

    94/276

    *$

    //Borrar la tareapublicbooleandeleteTarea(longrowId){

    returndatabase.delete(DATABASE_TABLE, KEY_ROWID+ "="+rowId, null) > 0;

    }

    // Retorna un cursor que contiene todos los itemspublicCursor recuperaTodos(){

    String[] columnas = {KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY,KEY_DESCRIPTION};

    returndatabase.query(DATABASE_TABLE, columnas, null, null,null, null, null);

    }

    // Retorna un Cursor que contiene la info de una tareapublicCursor recuperaTarea(longrowId) throwsSQLException{

    String[] columnas = {KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY,KEY_DESCRIPTION};

    Cursor mCursor = database.query(true, DATABASE_TABLE,columnas, KEY_ROWID+ "="+rowId, null, null, null, null, null);

    if(mCursor != null){mCursor.moveToFirst();

    }returnmCursor;

    }

    privateContentValues crearContentValues(String categoria, Stringresumen,

    String descripcion) {ContentValues values = newContentValues();values.put(KEY_CATEGORY, categoria);values.put(KEY_DESCRIPTION, descripcion);values.put(KEY_SUMMARY, resumen);returnvalues;

    }

    }

    P#6*/ # 3`2&()#- )#,# %$* ,3 &*/ 6h9*,*/ =%3 3/9#6*/ )-3#$,*7 H# 2-(63-# 2#-93 )*--3/2*$,3 #

    )-3#)(4$ ,3 / )*$/9#$93/ W

  • 7/23/2019 Manual Inicio Android

    95/276

    *%

    /3 #0-3 0#/3 ,3 ,#9*/ # 9-#

  • 7/23/2019 Manual Inicio Android

    96/276

    *&

    H#/ )*$/%&9#/ /3 2%3,3$ )-3#- # 9-# 2#-# 3/23)(U()#- &*/ ,#9*/

    ,($16()*/ * %$ *0539* ,3 9(2* fGM#"1G=14NX=#$;147 IjH(93N%(&,3- 3/ /(6(- # ($93-U#> ,3 %$ 2-*#-/3 )*$ Content Providers& l#W =%3 /#03- 9#60(h$ =%3 9*,#

    )*$/%&9# =%3 -3#&()36*/ $*/ -39*-$#-1 %$ *0539* ,3 9(2* .=4%/47

    .#-# ,3U($(- -: W )*$3)9#- )*$ %$# 0#/3 ,3 ,#9*/ IjH(93 /3-1 # 9-##- &*/ 6h9*,*/ 84=37.YZ: H?6/.3YZ

    W 63>3.3YZ 2-*2*-)(*$#,*/ 9#60(h$ )*$ )/3 9_Q8.3:/./F/=37 8/9*/ 6h9*,*/ 23-6(93$ -3#&(>#- /

    9#-3#/ ,3 ($/3-)(4$: #)9%#&(>#)(4$ W 3&(6($#)(4$ ,3 -3;(/9-*/ ,3 %$# U*-6# #&;* 61/ 2#-#6h9-()# =%3

    3^3@9_QYZ: /32#-#$,* 9#0/:

  • 7/23/2019 Manual Inicio Android

    97/276

    *'

    H*/ 6h9*,*/ H?6/.3YZW 63>3.3YZ /3 %9(&(>#-1$ ,3 U*-6# 6%W 2#-3)(,# # h/9#: )*$ /#- 3& 36#(& ,3& %/%#-(* ,3 $*60-3 ~%/%E Z#-d#6*/ &* /(;%(3$93g

    01/234 #'

    K*6* 2*,36*/ 3.3YZ /3 %9(&(>#-d# ,3 U*-6# #$1&*;#7 .*- 35362&* 2#-# 3&(6($#- 3& -3;(/9-* ,3& %/%#-(* ~%/%C Z#-d#6*/

    &* /(;%(3$93g

    01/234 #(

    K*6* 3.3YZ 2*,36*/ %9(&(>#- #-;%63$9*/ ,3$9-* ,3 / )*$,()(*$3/ ,3 /3$93$)(# IjH7 8/9* $* 3/ 61/ =%3

    2#-93/

  • 7/23/2019 Manual Inicio Android

    98/276

    *(

    ?3 U*-6# #$1&*;# # &* =%3 #$,* %$

    6h9*,* 3/23)dU()* ,*$,38(4(

  • 7/23/2019 Manual Inicio Android

    99/276

    *)

    1-I3E-,3^.YZg 6%3

  • 7/23/2019 Manual Inicio Android

    100/276

    **

    H* 2-(63-* =%3 ,3036*/ ,3 Z#)3- 3/ #/3;%-#-$*/ ,3 =%3 93$36*/

  • 7/23/2019 Manual Inicio Android

    101/276

    !++

    H# 2*/()(4$ ,3 ,3/&(>#6(3$9* ,3$9-* ,3& W*%9 3/ )*$9-*,* 2*- /(;7

    2-*2(3,#, android:layout_gravity 3/93 2%3,3 /3-g left , right o start y end7

    .#-# ,#-$*/ %$# (,3# #& U($#&(>#- 3& 9%9*-(#& /3-36*/ )#2#)3/

    ,3 (62&363$9#- %$#

    e0 ,3 3/93 9(2*7

    K*6*

  • 7/23/2019 Manual Inicio Android

    102/276

    !+!

    protectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

    //Drawer LayoutmDrawerLayout= (DrawerLayout)

    findViewById(R.id.drawer_layout);//ListamDrawerList= (ListView) findViewById(R.id.drawerIzquierdo);

    }

    @OverridepublicbooleanonCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if itis present.

    getMenuInflater().inflate(R.menu.main, menu);

    returntrue;}

    }

    8/ 6%W /(62&3: )*$ /*?$93 ,3)-#- 3& W*%9 W# U%$)(*$#-(#: 3$ 3/93 )#/* ,3)-#6*/ 3&

    DrawerLayoutW ListView7

    I( )*--36*/ #22 3$ 3/93 2%$9* W ,3/&(>#6*/ 3& ,3,* ,3 U*-6# Z*-(>*$9#& ,3/,3 3& 3`9-36* (>=%(3-,*

    ,3 2#$9#& Z#)(# ,3$9-* # 3& 63$m: 3$ 3/93 2%$9* 9*,#

  • 7/23/2019 Manual Inicio Android

    103/276

    !+#

    + )*$9($%#)(4$

  • 7/23/2019 Manual Inicio Android

    104/276

    !+$

    .#-# $%3/9-* 35362&* &* =%3 93$,-36*/ 3/ &* /(;%(3$93g

    3$)#03>#,* ,-#a3-7`6&

    (936s,-#a3-7`6&

  • 7/23/2019 Manual Inicio Android

    105/276

    !+%

    K*6* /3 2%3,3

  • 7/23/2019 Manual Inicio Android

    106/276

    !+&

    android:text="@string/app_name"/>

    .#-# 2*,3 #;-3;#- *2)(*$3/ #& 63$m /3 #;-3;#$ 9#$9* / *2)(*$3/ )*6* (6#;3$ =%3 )#,# 0*94$

    ,303 93$3- ,3$9-* ,3& R-3/RD

    ToDoSQLiteHello world!TareasActivity

    ToDo

    ConversorPerfilConfiguracinConversor

    @drawable/ic_action_go_to_today@drawable/ic_action_merge@drawable/ic_action_person@drawable/ic_action_good

    @drawable/ic_action_cloud

    8$ 2-(63-# /3))(4$ Z3 ,3)-#,* %$ #--#W ,3 I9-($;/ nav_options &%3;* *9-* ,3 drawables

    nav_iconos: 3/9# 3/ %$# U*-6# U1)(& W -12(,# ,3 2*,3- ,3)-#- 3/9*/ #%$=%3 9#60(h$ 2%,* Z#03-/3

    ,3)-#,* 63,(#$93 5#

  • 7/23/2019 Manual Inicio Android

    107/276

    !+'

    publicString getTitulo() {returntitulo;

    }

    publicvoidsetTitulo(String titulo) {

    this.titulo= titulo;}

    publicintgetIcono() {returnicono;

    }

    publicvoidsetIcono(inticono) {this.icono= icono;

    }}

    P*&

  • 7/23/2019 Manual Inicio Android

    108/276

  • 7/23/2019 Manual Inicio Android

    109/276

    !+)

    &(/9#,* /(;%(3$93 2*,36*/

  • 7/23/2019 Manual Inicio Android

    110/276

    !+*

    @OverridepublicView getView(intposition, View convertView, ViewGroup

    arg2) {

    Fila view;LayoutInflater inflator = mActivity.getLayoutInflater();

    if(convertView == null){view = newFila();//Crear objeto item y obtenerlo del arrayItems item = arrayItems.get(position);convertView = inflator.inflate(R.layout.item_drawer,

    null);//Tituloview.tituloItem= (TextView)

    convertView.findViewById(R.id.title_item);//Establecer en el campo titulo el nombre

    correspondiente obtenido del objeto itemview.tituloItem.setText(item.getTitulo());

    //Iconoview.icono= (ImageView)convertView.findViewById(R.id.icon);

    //Seteo del iconoview.icono.setImageResource(item.getIcono());convertView.setTag(view);

    }else{view = (Fila) convertView.getTag();

    }returnconvertView;

    }

    }

    H* =%3 /(62&363$93 Z#)3 3/ 9*6#- ,3& *0539* 3`9-#d,* ,3& Arraylist 3& 93`9* W (6#;3$ 2#-#&%3;* #/(;$1-/3 # /% )*--3/2*$,(3$93 3&363$9*78$ 3/93 2%$9* $%3/9-# #2&()#)(4$ 23-6(93 %9(&(>#- $##0&3 ,3 6*63$9* /*&* U%$)(*$#-#)*$

  • 7/23/2019 Manual Inicio Android

    111/276

  • 7/23/2019 Manual Inicio Android

    112/276

  • 7/23/2019 Manual Inicio Android

    113/276

  • 7/23/2019 Manual Inicio Android

    114/276

    !!$

    }

    O# )%#$,* /3 9(3$3 &(/9* 3& fragment3& )4,(;* =%3 $3)3/(9#6*/ =%3 9-#(;# $%3/9-# )/3 2-($)(2#& /3-1

    3& /(;%(3$93g

    //Establecemos la accion al clickear sobre cualquier item del menu.//De la misma forma que hariamos en una app comun con un

    listview.mDrawerList.setOnItemClickListener(new

    AdapterView.OnItemClickListener() {@OverridepublicvoidonItemClick(AdapterView arg0, View arg1,

    intposition, longid) {MostrarFragment(position);

    }});

    //Cuando la aplicacion cargue por defecto mostrar la opcin HomeMostrarFragment(1);

    ?3$9-* ,3 OnCreate() #& mDrawerList &3 #/(;$#6*/ 3& 6h9*,* OnItemClickListener W

    ,3$9-* Z#)36*/ %$# ,# #& 6h9*,* MostrarFragment(position) #& )%#& Z#W =%3 2#/#-&3

    )*6* 2#-1639-* 2*/()(4$ ,3 *2)(4$ /3&3))(*$#,# 3$ 3& 63$m: 3$ 0#/3 # 3/9* 6*/9-#-# 3&

    fragment3/23)(U()*7

    H%3;* U%3-# ,3 3/9* ($,()* =%3 )%#$,* #2&()#)(4$ )#-;%3 6%3/9-3 *2)(4$ p@*?*q 2*- ,3U3)9*: 2#-#

    3/* &3 2#/* 3& $%63-* E 3& )%#& 3=%(

  • 7/23/2019 Manual Inicio Android

    115/276

    !!%

    default://si no esta la opcion mostrara un toast y nos mandara a

    HomeToast.makeText(getApplicationContext(),"Opcion

    "+titulos[position-1]+"no disponible!", Toast.LENGTH_SHORT).show();

    fragment = newTareasFragment();position=1;break;

    }//Validamos si el fragment no es nuloif(fragment != null) {

    FragmentManager fragmentManager = getFragmentManager();

    fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).commit();

    // Actualizamos el contenido segun la opcion elegida

    mDrawerList.setItemChecked(position, true);mDrawerList.setSelection(position);//Cambiamos el titulo en donde decia "setTitle(titulos[position-1]);//Cerramos el menu deslizablemDrawerLayout.closeDrawer(mDrawerList);

    } else//Si el fragment es nulo mostramos un mensaje de

    error.Log.e("Error ", "MostrarFragment"+position);

    }

    K*$ 3/9* 01/()#63$93 W# 2*,36*/ ,*9#- # $%3/9-# #2&()#)(4$ ,3 &4;()# $3)3/#-(# 2#-# 2*,3- 6*/9-#-

    )#,# *2)(4$ ,3& 63$m: &%3;* ,323$,3 ,3 )#,# %$* &* =%3 ,3/33 6*/9-#- 3$ /%/ #2&()#)(*$3/7

    .*- m&9(6* Z#W =%3 #;-3;#- &*/ /(;%(3$93/ 6h9*,*/g onPostCreate,

    onConfigurationChanged, onOptionsItemSelected2#-# /*0-3/)-(0(-&*/7

    @OverrideprotectedvoidonPostCreate(Bundle savedInstanceState) {

    super.onPostCreate(savedInstanceState);// Sync el estado del toggle despues de onRestoreInstanceState

    haya ocurrido.mDrawerToggle.syncState();

    }@OverridepublicvoidonConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);mDrawerToggle.onConfigurationChanged(newConfig);

    }@OverridepublicbooleanonOptionsItemSelected(MenuItem item) {

    // Pasar el evento al ActionBarDrawerToggle, si este

  • 7/23/2019 Manual Inicio Android

    116/276

    !!&

    // regresa true, entonces este manejara el evento del touch// en el icono de la app

    if(mDrawerToggle.onOptionsItemSelected(item)) {Log.e("mDrawerToggle presionado", "x");

    returntrue;}

    // Maneja los otros items de la action bar...returnsuper.onOptionsItemSelected(item);

    }

    8$ 3/93 2%$9* $%3/9-# )/3 MainActivity.java /3

  • 7/23/2019 Manual Inicio Android

    117/276

  • 7/23/2019 Manual Inicio Android

    118/276

    !!(

    Log.e("Cerrado completo", "!!");}

    publicvoidonDrawerOpened(View drawerView) {Log.e("Apertura completa", "!!");

    }

    };

    //Establecemos que mDrawerToggle declarado anteriormente seael DrawerListener

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    //Establecemos que el ActionBar muestre el botn homegetActionBar().setDisplayHomeAsUpEnabled(true);

    //Establecemos la accion al clickear sobre cualquier item delmenu.

    //De la misma forma que hariamos en una app comun con un

    listview.mDrawerList.setOnItemClickListener(newAdapterView.OnItemClickListener() {

    @OverridepublicvoidonItemClick(AdapterView arg0, View arg1,

    intposition, longid) {MostrarFragment(position);

    }});

    //Cuando la aplicacion cargue por defecto mostrar la opcionHome

    MostrarFragment(1);}

    /*Pasando la posicion de la opcion en el menu nos mostrara elFragment correspondiente*/

    privatevoidMostrarFragment(intposition) {// update the main content by replacing fragmentsFragment fragment = null;switch(position) {case1:

    fragment = newTareasFragment();break;

    /*case 2:

    fragment = new ProfileFragment();break;*/

    default://si no esta la opcion mostrara un toast y nos mandara a

    HomeToast.makeText(getApplicationContext(),"Opcion

  • 7/23/2019 Manual Inicio Android

    119/276

    !!)

    "+titulos[position-1]+"no disponible!", Toast.LENGTH_SHORT).show();fragment = newTareasFragment();position=1;break;

    }//Validamos si el fragment no es nulo

    if(fragment != null) {FragmentManager fragmentManager = getFragmentManager();

    fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).commit();

    // Actualizamos el contenido segun la opcion elegidamDrawerList.setItemChecked(position, true);mDrawerList.setSelection(position);//Cambiamos el titulo en donde decia "setTitle(titulos[position-1]);//Cerramos el menu deslizable

    mDrawerLayout.closeDrawer(mDrawerList);} else//Si el fragment es nulo mostramos un mensaje de

    error.Log.e("Error ", "MostrarFragment"+position);

    }

    @OverrideprotectedvoidonPostCreate(Bundle savedInstanceState) {

    super.onPostCreate(savedInstanceState);// Sync el estado del toggle despues de onRestoreInstanceState

    haya ocurrido.mDrawerToggle.syncState();

    }@OverridepublicvoidonConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);mDrawerToggle.onConfigurationChanged(newConfig);

    }@OverridepublicbooleanonOptionsItemSelected(MenuItem item) {

    // Pasar el evento al ActionBarDrawerToggle, si este// regresa true, entonces este manejara el evento del touch// en el icono de la app

    if(mDrawerToggle.onOptionsItemSelected(item)) {

    Log.e("mDrawerToggle presionado", "x");returntrue;

    }// Maneja los otros items de la action bar...returnsuper.onOptionsItemSelected(item);

    }

    @Override

  • 7/23/2019 Manual Inicio Android

    120/276

  • 7/23/2019 Manual Inicio Android

    121/276

    !#+

    android:orderInCategory="100"android:showAsAction="never"android:title="@string/action_insertar"/>

    8& #-)Z(@drawable/ic_action_go_to_today@drawable/ic_action_merge@drawable/ic_action_person@drawable/ic_action_good@drawable/ic_action_cloud

    Agregar TareaBorrar TareaNombreBorrarNombreDescripcinAceptarAn no existen elementos en la

    lista

  • 7/23/2019 Manual Inicio Android

    122/276

  • 7/23/2019 Manual Inicio Android

    123/276

    !##

    android:layout_marginTop="6dp"android:layout_width="wrap_content"android:textColor="@color/negro"/>

    +Z*-# =%3 W# Z36*/ ,3U($(,* &*/ -3)%-/*/: W*%9/ W / )/3/ =%3 $*/ #W%,#-1$ # 6#$(2%- 2#-93 ,3IjH(93 3$ +$,-*(,7 8/9#6*/ &(/9*/ 2#-# )-3#- / )/3/ =%3 $*/ #W%,#-1$ # 5%$9#- )#,# %$# ,3 3/9#/

    2(3>#/7

    .8 ,' 8) , B") $'$ +), ) ()/ 'G* 0' %/ &' ,)B B%E / B*/ ") >) $' 0' 0) &* $

    8$ 3/93 2#-93

  • 7/23/2019 Manual Inicio Android

    124/276

    !#$

    android:layout_height="fill_parent"android:background="@color/list_color"android:orientation="vertical">

    O# 93$36*/ ,(/3c#,# 2#-93 ,3& )46* /3

  • 7/23/2019 Manual Inicio Android

    125/276

  • 7/23/2019 Manual Inicio Android

    126/276

    !#&

    bundle.getSerializable(DBAdapter.KEY_ROWID);if(extras != null) {

    mRowId= extras.getLong(DBAdapter.KEY_ROWID);}

    // Mandamos llamar al mtodo que se encargar de llenar los

    campos en caso de ser una edicinpopulateFields();

    /** Le asignamos el evento de OnClickListener a nuetro botn* esto con la finalidad de que guarde los valores que

    tenemos* en nuestro formulario* */

    confirmButton.setOnClickListener(newView.OnClickListener(){

    publicvoidonClick(View view) {

    setResult(RESULT_OK);saveState();finish();

    }

    });}

    /** Mtodo que permite llenar los campos del formulario* en el caso de que sea una edicin, si no es una* edicin los campos ser dejados vacos* */

    privatevoidpopulateFields() {/** Confirmamos que a variable mRowId no est nula,* esto confirma que se trata de una edicin* */

    if(mRowId!= null) {/*Recuperamos los datos de la tarea que coincide con

    la variable mRowId*/Cursor todo = mDbHelper.recuperaTarea(mRowId);/** El mtodo startManagingCursor que se hereda de la

    clase Activity

    * nos sirve o nos ayuda para tener un mejor controldel cursor, pues

    * este se adaptar al ciclo de vida de la activity,esto es que si

    * la activity es detenida el cursor automticamentellamar al mtodo

    * deactivate(), y cuando la activity se reinicie sellamr al mtodo

  • 7/23/2019 Manual Inicio Android

    127/276

    !#'

    * requery() para reiniciar el cursor. Tambin nosayudar al momento

    * en que la activity sea destruida el Cursor sercerrado automticamente

    */startManagingCursor(todo);

    String category =todo.getString(todo.getColumnIndexOrThrow(DBAdapter.KEY_CATEGORY));

    for(inti = 0; i < mCategory.getCount(); i++) {

    String s = (String)mCategory.getItemAtPosition(i);

    Log.e(null, s + " "+ category);if(s.equalsIgnoreCase(category)) {

    /** Dependiendo de la categoria que haya sido

    registrada en la

    * BD, ser entonces que en el Spinner seaseleccionada la misma* opcin que se tenga en la BD* */mCategory.setSelection(i);

    }}

    // Rellenamos los otros valores con lo que tengamos enla BD

    mTitleText.setText(todo.getString(todo

    .getColumnIndexOrThrow(DBAdapter.KEY_SUMMARY)));mBodyText.setText(todo.getString(todo

    .getColumnIndexOrThrow(DBAdapter.KEY_DESCRIPTION)));}

    }

    /** En este mtodo lo que se busca es que el id de la tarea sea* guardado con la intencin de recuperarlo para cuando la

    activity* sea recreado* */

    @OverrideprotectedvoidonSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);//saveState();outState.putSerializable(DBAdapter.KEY_ROWID, mRowId);

    }

    @Override

  • 7/23/2019 Manual Inicio Android

    128/276

  • 7/23/2019 Manual Inicio Android

    129/276

    !#)

    }} else{

    mDbHelper.updateTarea(mRowId, category, summary,description);

    }}

    }

    8/ 6*63$9* ,3 -3#&(>#- *9-#/ 6*,(U()#)(*$3/: 3/ 9%-$* ,3 TareasFragment.java: 3& 2-(63-* W =%3

    3/ 6%W (62*-9#$93 3/ )#60(#- )/3 ,3 )%#& Z3-3,#: 3$ 3/93 6*63$9* ,303-d# ,3 3/9#-

    3`93$,(3$,* ,3 _-#;63$9: 23-* #Z*-#

  • 7/23/2019 Manual Inicio Android

    130/276

    !#*

    container,Bundle savedInstanceState) {

    // TODOAuto-generated method stubView rootView = inflater.inflate(R.layout.activity_tareas,

    container, false);

    /*** Se crea una instancia de la clase DBAdapter,* el constructor de la clase mandar a crear la BD si no

    existe,* en caso de ya existir solo crear la conexin a la BD* */

    dbHelper= newDBAdapter(getActivity().getApplicationContext());

    // Abre la conexin a la BDdbHelper.open();returnrootView;

    }

    /** Este mtodo nos ayuda a saber cuando la* activity de nuestro fragment ha terminado de* ejecutar su mtodo onCreate()*/

    @OverridepublicvoidonActivityCreated(Bundle savedInstanceState) {

    // TODOAuto-generated method stubsuper.onActivityCreated(savedInstanceState);fillData();registerForContextMenu(getListView());

    }

    /** Se llama cada vez que se selecciona un elemento en un men

    contextual* */

    @OverridepublicbooleanonContextItemSelected(MenuItem item) {

    switch(item.getItemId()) {caseDELETE_ID:

    AdapterContextMenuInfo info = (AdapterContextMenuInfo)item

    .getMenuInfo();dbHelper.deleteTarea(info.id);fillData();returntrue;

    }returnsuper.onContextItemSelected(item);

    }

  • 7/23/2019 Manual Inicio Android

    131/276

    !$+

    //ListView y la accin al seleccionar un item/** Este mtodo se encarga de manejar los eventos de los* "clicks" en cada uno de los items de la lista* */

    @Override

    publicvoidonListItemClick(ListView l, View v, intposition,longid) {

    super.onListItemClick(l, v, position, id);/** Al ser seleccionado uno de los elementos de la lista* se procede a armar un Intent que abrir la activity* DetailsActivity.java para que se editen los valores.* Se manda un parmetro que es el id de la tarea a* editar*/

    Intent i = newIntent(getActivity().getApplicationContext(),DetailsActivity.class);

    i.putExtra(DBAdapter.KEY_ROWID, id);

    //La actividad retorna un resultado cuando se llama//startActivityForResultstartActivityForResult(i, ACTIVITY_EDIT);

    }

    /** Crea los elementos del men contextual* */

    @OverridepublicvoidonCreateContextMenu(ContextMenu menu, View v,

    ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);menu.add(0, DELETE_ID, 0, R.string.menu_delete);

    }

    @OverridepublicvoidonDestroy() {

    super.onDestroy();if(dbHelper!= null) {

    dbHelper.close();}

    }

    /** En este mtodo se va a hacer una consulta a la BD en la

    * cual se van a recuperar todas las tareas que existan en* la BD, y estas luego sern agregadas al ListFragment.* */

    privatevoidfillData() {cursor= dbHelper.recuperaTodos();

    getActivity().startManagingCursor(cursor);

  • 7/23/2019 Manual Inicio Android

    132/276

  • 7/23/2019 Manual Inicio Android

    133/276

  • 7/23/2019 Manual Inicio Android

    134/276

    !$$

    )*$ #W%,# ,3& V.I * ,3 -3, e'_': 2*- &* =%3 ,303-36*/ ,3 #;-3;#- &*/ /(;%(3$93/ 23-6(/*/ 3$

    /3))(4$ ,3 23-6(/*/ ,3& "#$(U3/9g

    2*- &* =%3 9*,* $%3/9-* "#$(U3/9 =%3,#-1 )*6* /3 6%3/9-# # )*$9($%#)(4$g

  • 7/23/2019 Manual Inicio Android

    135/276

  • 7/23/2019 Manual Inicio Android

    136/276

  • 7/23/2019 Manual Inicio Android

    137/276

    !$'

    V+,$15J"8"

    ?3 3/9# )/3 &* =%3 $*/ ($93-3/# W /3-1 &* m$()* =%3 3`2&(=%3 /3-1$ &*/ 6h9*,*/

    AdjustWidthScreen() W AdjustHeightScreen(), 3& 2-(63-* ,3 3&&*/ &* =%3 Z#)3 3/

    -3)(0(- ,3 2#-1639-*/ 3& #&9*: #$)Z* ,3 %$ 3&363$9*

  • 7/23/2019 Manual Inicio Android

    138/276

  • 7/23/2019 Manual Inicio Android

    139/276

    !$)

    percent, Object theObject){if(theObject instanceofTextView) {

    ((TextView) theObject).setHeight((percent * height) /100);

    }elseif(theObject instanceofLinearLayout){

    ((LinearLayout) theObject).setMinimumHeight((percent *height) / 100);

    }elseif(theObject instanceofButton){

    ((Button) theObject).setHeight((percent * height) /100);

    }elseif(theObject instanceofImageView){

    ((ImageView) theObject).getLayoutParams().height=(percent * height) / 100;

    }return;

    }}

    L)**'(+,)*7'+'(+'35J"8"

    8/9# )/3 3/ 6%W /(62&3: ,3 &* m$()* =%3 /3 3$)#-;# 3/ ,3 ,393)9#- /( Z#W )*$3`(4$ # ($93-$39: -3;-3/#

    %$

  • 7/23/2019 Manual Inicio Android

    140/276

    !$*

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();booleanisConnected = activeNetwork != null&&

    activeNetwork.isConnectedOrConnecting();returnisConnected;

    }}

    [N"917,3'(+,)*5J"8"

    8/9# )/3 3/ %$ 2*)* 61/ )*62&()#,#: 2%3/ -3#&(># 61/ )*/#/: 3$ 3/93 )#/* ,3036*/ ,3 63$)(*$#- W

    93$3- 6%)Z* )%(,#,* 2%3/ 3/9# )/3 3/91 3$U*)#,# 3$ %$ 6#2# =%3 3/91 /(3$,* -3$,3-(>#,* /*0-3 %$

    _-#;63$9: 3$ 3& )#/* ,3 =%3 /3# *9-* 9(2* ,3 P(3a 3$ 3& )%#& /3 3/9h 6*/9-#$,* /3 ,303-#$ ,3 9*6#- /

    63,(,#/ 23-9($3$93/ 2#-# #/3;%-#-/3 =%3 3/93 U%$)(*$3 #,3)%#,#63$937

    8623>#-36*/ ,()(3$,* =%3 3$ 3& )*$/9-%)9*- -3)(03 )*6* 2#-1639-* 3& U-#;63$9 /*0-3 3& )%#& /3 3/91

    353)%9#$,* * 6*/9-#$,* 3& 6#2# W /*0-3 3& )%#& /3 #- )*$/%&9# # V**;&3: W

    )*6* -3/%&9#,* ,3 /% 353)%)(4$ ,#-1 %$ *0539* ,3& 9(2* ?*)%63$9 3& )%#& )*$93$,-1 3/9-%)9%-# ,3&

    ,*)%63$9* f"H =%3 -3/2*$,3 V**;&3 W =%3 )*$9(3$3 ($U*-6#)(4$ ,3 )46* &&3;#-7 O# 2*- m&9(6*

    93$36*/ #& 6h9*,* doPostExecute: 3/93 6h9*,* -3)(03 3& *0539* ?*)%63$9 )*$ ($U*-6#)(4$ ,3&

    f"H ,3 -3/2%3/9# ,3 V**;&37 J9-* 6h9*,* =%3 93$36*/ 3$ 3/9# )/3 3/ 3& 6h9*,* getDirectionW

    3/93 6h9*,* -3)(03 3& *0359* ?*)%63$9 )*$ 9*,# ($U*-6#)(4$ ,3& f"H ,3 V**;&3 W &* =%3 Z#)3 3/

    *093$3- ($U*-6#)(4$ )*$93$(,# 3$ h& 2#-# *093$3- m$()#63$93 &*/ 2%$9*/ )*$ /%/ )**-,3$#,#/ W =%3

    /3-1$ 2%3/9*/ 3$ 3& 6#2# 2#-# -32-3/3$9#- -%9#: #/d 6(/6* 93$36*/ &*/ 6h9*,*/ getNodeIndexW

    decodePoly 23-* 3/9*/ 6h9*,*/ /*$ #%`(&(#-3/ ,3& getDirection7 O W# 2#-# 93-6($#- #=%d 6%3/9-* )/3 )*62&39#g

    packagecom.android.utm.todosqlite.util;

    importjava.io.InputStream;importjava.util.ArrayList;

  • 7/23/2019 Manual Inicio Android

    141/276

    !%+

    importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;

    importorg.apache.http.HttpResponse;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpPost;

    importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.protocol.BasicHttpContext;importorg.apache.http.protocol.HttpContext;importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;

    importandroid.app.ProgressDialog;importandroid.os.AsyncTask;

    importcom.android.utm.todosqlite.TrazarRutaInternaFragment;importcom.google.android.gms.maps.model.LatLng;

    publicclassGMapsDirection {publicfinalstaticString MODE_DRIVING= "driving";publicfinalstaticString MODE_WALKING= "walking";privateTrazarRutaInternaFragment fragment;publicProgressDialog progress;

    /*** El constructor recibe como parmetro* el fragment sobre el cual se est ejecutando* o mostrando el mapa y sobre el cual se va a* pintar la ruta de nuestro punto de origen a* nuestro punto de destino* */

    publicGMapsDirection(TrazarRutaInternaFragment fragment) {this.fragment= fragment;

    }

    publicvoidgetDocument(LatLng start, LatLng end, String mode) {/*** Armamos la url de peticin a Google* donde le pedimos que nos de las indicaciones* de cmo llegar desde nuestro punto de origen* hasta nuestro punto de destino, para lo cual* necesitamos las coordenadas de inicio y de

    * destino* */

    String url ="http://maps.googleapis.com/maps/api/directions/xml?"

    + "origin="+ start.latitude+ ","+start.longitude

    + "&destination="+ end.latitude+ ","+end.longitude

  • 7/23/2019 Manual Inicio Android

    142/276

    !%!

    +"&sensor=false&units=metric&mode="+MODE_DRIVING;

    // Usamos nuestra clase ConnectionDetector para verificar laconectividad a internet

    ConnectionDetector connectionDetector = new

    ConnectionDetector(fragment.getActivity());if(connectionDetector.isConnectedToInternet()){

    newRetrieveData().execute(url);}

    }

    /*** Clase interna que hereda de AsyncTask la cual recibe* la url de peticin para Google y entrega un objeto del* tipo Document el cual contiene los pasos y coordenadas* de los puntos para llegar al destino especificado* */

    classRetrieveData extendsAsyncTask {

    /*** En este mtodo lo nico que haremos ser iniciar* un PogressDialog, este estar visible mientras* se ejecuta el proceso de preguntar a Google y de* que de su respuesta y as mismo de trazar la ruta* sobre el mapa* */

    @OverrideprotectedvoidonPreExecute() {

    progress= newProgressDialog(fragment.getActivity());progress.setTitle("Cargando");progress.setMessage("Por favor, espera...");progress.setCanceledOnTouchOutside(false);progress.show();

    }

    /*** Este mtodo recibe como parmetro la url para realizar* la consulta a Google, y como resultado de su ejecucin* dar un objeto del tipo Document el cual contendr la* estructura del documento XML que responde Google y que* contiene la informacin de cmo llegar* */

    protectedDocument doInBackground(String... urls) {try{

    // Interfaz para un cliente HTTP.HttpClient httpClient = newDefaultHttpClient();

  • 7/23/2019 Manual Inicio Android

    143/276

  • 7/23/2019 Manual Inicio Android

    144/276

  • 7/23/2019 Manual Inicio Android

    145/276

    !%%

    latNode = nl3.item(getNodeIndex(nl3, "lat"));lat =

    Double.parseDouble(latNode.getTextContent());lngNode = nl3.item(getNodeIndex(nl3, "lng"));lng =

    Double.parseDouble(lngNode.getTextContent());

    listGeopoints.add(newLatLng(lat, lng));}

    }

    returnlistGeopoints;}

    privateintgetNodeIndex(NodeList nl, String nodename) {for(inti = 0; i < nl.getLength(); i++) {

    if(nl.item(i).getNodeName().equals(nodename))returni;

    }

    return-1;}

    privateArrayList decodePoly(String encoded) {ArrayList poly = newArrayList();intindex = 0, len = encoded.length();intlat = 0, lng = 0;while(index < len) {

    intb, shift = 0, result = 0;do{

    b = encoded.charAt(index++) - 63;result |= (b & 0x1f) = 0x20);intdlat = ((result & 1) != 0 ? ~(result >> 1) :

    (result >> 1));lat += dlat;shift = 0;result = 0;do{

    b = encoded.charAt(index++) - 63;result |= (b & 0x1f) = 0x20);intdlng = ((result & 1) != 0 ? ~(result >> 1) :

    (result >> 1));lng += dlng;

    LatLng position = newLatLng((double) lat / 1E5,(double) lng / 1E5);

    poly.add(position);}returnpoly;

  • 7/23/2019 Manual Inicio Android

    146/276

    !%&

    }}

    +Z*-# 3/ 6*63$9* W# ,3 3623>#- # 9-#0#5#- 2#-93 =%3 /3-1 #-36*/ )*$ 3& ,(/3c* ,3 &*/ W*%9/ ,3 / ($93-U#)3/ ,3 )#,# %$* ,3 &*/ U-#;63$9/ =%3

    #2#-3)3-1$ 3$ $%3/9-#/ 23/9#c#/: # )*$9($%#)(4$ 6%3/9-* %$# )#29%-# ,3 2#$9#& ,3 )46* /3

  • 7/23/2019 Manual Inicio Android

    147/276

  • 7/23/2019 Manual Inicio Android

    148/276

    !%(

    8$ 3/93 )#/* W# 3/ ,3)(/(4$ 23-/*$#& =%3 *2)(4$ 9*6#-: 23-* W* #)*$/35* Z#)3-&* )*$ #2&()#)(4$ ,3

    "#2/: W# =%3 $*/ ,#-1 )*6* -3/%&9#,* &* =%3

  • 7/23/2019 Manual Inicio Android

    149/276

    !%)

    8& /3;%$,* W*%9 /3-1 ,36#/(#,* /(62&3 2%3/ &*/ 3&363$9*/ =%3 %9(&(>#-36*/ /*$

  • 7/23/2019 Manual Inicio Android

    150/276

    !%*

  • 7/23/2019 Manual Inicio Android

    151/276

    !&+

    8$ $%3/9-* 35362&* / 23/9#c#/ 93$,-1$ ,*/ )*&*-3/: %$# 2#-# )%#$,* 3/91$ /3&3))(*$#,*/ AbbS3[[B: W

    *9-* 2#-# )%#$,* $* &* 3/91$ A#,#0CEB: 3/ 2*- 3/9# -#>4$ =%3 -3;(/9-#-36*/ ,*/ )*&*-3/ 3$ 3& #-)Z(#- ,3 -%9# 3$ 3& 6#2#: 2*-

    &* =%3 $%3/9-* #-)Z(

    I( $* =%3-36*/ =%3 / 23/9#c#/ ,3 $%3/9-# #2&()#)(4$ &%>)#$ ,3 U*-6# 2*- ,3U#%&9 )*6* 3$ 3& 3/9(&*

    ,3 +$,-*(, /3-1 $3)3/#-(* =%3 /3# )-3#,* %$ W*%9 $%3

  • 7/23/2019 Manual Inicio Android

    152/276

    !&!

    2-3

    O# ,3U($(6*/ )*6* /3 ,303 ,3

  • 7/23/2019 Manual Inicio Android

    153/276

    !

  • 7/23/2019 Manual Inicio Android

    154/276

    !&$

    android:layout_width="fill_parent"android:layout_height="fill_parent"/>

    .#-# 93-6($#- )*$ U#/3 ,3 ,(/3c* ,3 ($93-U#> /3-1 $3)3/#-(* 93$3- %$ W*%9 3$ 3& )%#& 93$;#6*/ %$

    )*$)3$9-#,*- ,3 9*,*/ &*/ ,361/ W*%9/ Z3)Z*/ 2%3/ /*$ 3/*/ W*%9/ %$# 2#-93 ,3& ,(/3c* ;3$3-#&

    ,()Z* W*%9 /3 -1 fragment_trazar.xml =%3 3$

  • 7/23/2019 Manual Inicio Android

    155/276

  • 7/23/2019 Manual Inicio Android

    156/276

    !&&

    importjava.util.ArrayList;

    importorg.w3c.dom.Document;

    importandroid.app.AlertDialog;importandroid.content.Context;

    importandroid.location.Criteria;importandroid.location.Location;importandroid.location.LocationManager;importandroid.os.Bundle;importandroid.support.v4.app.Fragment;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.Toast;

    importcom.android.utm.todosqlite.util.ConnectionDetector;importcom.android.utm.todosqlite.util.GMapsDirection;

    importcom.google.android.gms.common.GooglePlayServicesNotAvailableException;importcom.google.android.gms.location.LocationListener;importcom.google.android.gms.maps.CameraUpdate;importcom.google.android.gms.maps.CameraUpdateFactory;importcom.google.android.gms.maps.GoogleMap;importcom.google.android.gms.maps.MapView;importcom.google.android.gms.maps.MapsInitializer;importcom.google.android.gms.maps.model.BitmapDescriptorFactory;importcom.google.android.gms.maps.model.LatLng;importcom.google.android.gms.maps.model.Marker;importcom.google.android.gms.maps.model.MarkerOptions;importcom.google.android.gms.maps.model.PolylineOptions;

    /** En esta clase heredamos de la clase Fragment de android y vamos* a implementar la interfaz publica LocationListener* */

    publicclassTrazarRutaInternaFragment extendsFragment implementsLocationListener{

    privateMapView mMapView;privateGoogleMap map;privatefinaldoublelatitude= 19.4325;privatefinaldoublelongitude= -99.131111;

    privateContext context;privateLocationManager locationManager;privateString provider;privateLocation location;privateGMapsDirection md;privateLatLng currentLocation;privatedoublecurrentLatitude;privatedoublecurrentLongitude;

  • 7/23/2019 Manual Inicio Android

    157/276

    !&'

    @OverridepublicView onCreateView(LayoutInflater inflater, ViewGroup

    container,Bundle savedInstanceState) {

    // Cargar el layout en el fragmentView rootView =

    inflater.inflate(R.layout.como_llegar_interna_fragment,container, false);

    /*** Hacer referencia al elemento

    com.google.android.gms.maps.MapView* del layout aqu ser donde se mostrar el mapa* */

    mMapView= (MapView) rootView.findViewById(R.id.mapa);

    // inflar y regresar el layout

    mMapView.onCreate(savedInstanceState);

    // Necesario para desplegar el mapa obtenido inmediatamentemMapView.onResume();

    try{/*** Inicializa la API de Google Maps Android y as* obtener las caractersticas necesarias para poder* usar en el mapa ya obtenido* */MapsInitializer. initialize(getActivity());

    } catch(GooglePlayServicesNotAvailableException e) {e.printStackTrace();

    }map= mMapView.getMap();map.setMyLocationEnabled(true);

    CameraUpdate center = CameraUpdateFactory.newLatLng(newLatLng(latitude, longitude));

    CameraUpdate zoom = CameraUpdateFactory.zoomTo(12);map.moveCamera(center);map.animateCamera(zoom);context= getActivity();

    // Obtener los proveedores de localizacin que existane en

    nuestro dispositivo mvillocationManager= (LocationManager)

    context.getSystemService(Context.LOCATION_SERVICE);

    // Una clase indicando los criterios de aplicacin para laseleccin de un proveedor de ubicacin.

    Criteria criteria = newCriteria();

  • 7/23/2019 Manual Inicio Android

    158/276

    !&(

    // Aqu escogemos el mejor proveedor de acuerdo a loscriterios

    provider= locationManager.getBestProvider(criteria, true);

    /*** Devuelve un objeto Location indicando los datos

    * de la ltima ubicacin conocida obtenida del* proveedor determinado.* */location= locationManager.getLastKnownLocation(provider);if(location!= null) {System.out.println("Provider "+ provider+ " has been

    selected.");onLocationChanged(location);

    } else{Toast.makeText(context, "Localizacin no disponible",

    Toast.LENGTH_LONG).show();}

    /*** De esta manera es la forma en la que se agrega* un marcador al mapa as como sus diferentes opciones* que tendr el marcador, este marcador nos indicar el* punto de destino*/Marker marker = map.addMarker(newMarkerOptions()

    .position(newLatLng(latitude,longitude)).title("Este es el destino")

    .snippet("Hasta aqu debemos de llegar")

    .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_place)));

    /*** Se agrega un listener al marker, de esta* manera se puede controlar si se desea que* haga alguna accin* */

    map.setOnMarkerClickListener(newOnMarkerClickListener() {

    @OverridepublicbooleanonMarkerClick(Marker marker) {

    Toast.makeText(context,

    "Marcador pulsado:\n"+marker.getTitle(),Toast.LENGTH_SHORT).show();

    returnfalse;}

    });

  • 7/23/2019 Manual Inicio Android

    159/276

    !&)

    /*** Se agrega un listener al snipet (la informacin* que aparece al tocar el marker), de esta* manera se puede controlar si se desea que* haga alguna accin, como por ejemplo mostrar* otra vista

    * */map.setOnInfoWindowClickListener(new

    OnInfoWindowClickListener() {

    @OverridepublicvoidonInfoWindowClick(Marker marker) {

    Toast.makeText(context,

    "Snipet pulsado:\n"+marker.getTitle(),Toast.LENGTH_SHORT).show();

    }});/*** Instanciamos un objeto de la clase* GMapsDirection* */

    md= newGMapsDirection(this);

    // Crear un nuevo objeto LatLng con la longitud y latituddestino

    LatLng location = newLatLng(latitude, longitude);

    /*** Ejecutamos el mtodo getDocument, dicho mtodo* empezar el proceso de armar la url de consulta* a Google Maps y de interpretacin de la respuesta* */

    md.getDocument(currentLocation, location,GMapsDirection.MODE_DRIVING);

    returnrootView;}

    @OverridepublicvoidonCreate(Bundle savedInstanceState) {

    // TODOAuto-generated method stub

    super.onCreate(savedInstanceState);setRetainInstance(true);

    /*** En esta parte lo que hacemos es instanciar un* objeto de la clase ConnectionDetector, para* usar uno de sus mtodos y comprobar si mi* dispositivo mvil tiene acceso a interntet, en

  • 7/23/2019 Manual Inicio Android

    160/276

    !&*

    * caso de no tenerlo muestra un AlertDialog con* un mensaje* */

    ConnectionDetector connectionDetector = newConnectionDetector(getActivity());

    if(!connectionDetector.isConnectedToInternet()){

    AlertDialog.Builder builder = newAlertDialog.Builder(getActivity());

    builder.setMessage("Se requiere conexin a Internetpara visualizar el mapa.")

    .setTitle("Error");AlertDialog dialog = builder.create();dialog.show();

    }}

    /*** Mtodo que se encarga de trazar la ruta

    * o mostrarla en el mapa* */publicvoidtraceRoute(Document doc) {

    // Detectar si hay conexin a internetConnectionDetector connectionDetector = new

    ConnectionDetector(getActivity());if(!connectionDetector.isConnectedToInternet()){

    AlertDialog.Builder builder = newAlertDialog.Builder(getActivity());

    builder.setMessage("Se requiere conexin a Internet").setTitle("Error");

    AlertDialog dialog = builder.create();dialog.show();

    }

    /*** Aqu lo que sucede es que con el mtodo getDirection

    obtenemos* un ArrayList que contiene objetos LatLng con las

    coordenas de* todos los puntos que responde Google Maps* */

    ArrayList directionPoint = md.getDirection(doc);/**

    * Creamos un objeto PolylineOptions este objeto* es una serie de segmentos de lnea conectados* que pueden formar cualquier forma que desee y* se puede utilizar para marcar caminos y rutas* en el mapa. Adems se especifican algunas* opciones como el ancho y color de la lnea.* */

    PolylineOptions rectLine = new

  • 7/23/2019 Manual Inicio Android

    161/276

    !'+

    PolylineOptions().width(8).color(getResources().getColor(R.color.route));

    /** En este for agregamos los puntos con sus* coordenadas a la Polyline

    * */for(inti = 0 ; i < directionPoint.size() ; i++) {

    rectLine.add(directionPoint.get(i));}

    // Agregar la Polyline al mapa para su visualizacinmap.addPolyline(rectLine);

    }

    @OverridepublicvoidonResume() {

    super.onResume();

    if(null!= mMapView)mMapView.onResume();}

    @OverridepublicvoidonPause() {

    super.onPause();if(null!= mMapView)

    mMapView.onPause();}

    @OverridepublicvoidonDestroy() {

    super.onDestroy();if(null!= mMapView)

    mMapView.onDestroy();}

    @OverridepublicvoidonSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);if(null!= mMapView)

    mMapView.onSaveInstanceState(outState);}

    @OverridepublicvoidonLowMemory() {

    super.onLowMemory();if(null!= mMapView)

    mMapView.onLowMemory();}

    /*

  • 7/23/2019 Manual Inicio Android

    162/276

    !'!

    * Este mtodo se estar ejecutando cada vez que el GPS detecte* que la posicin actual cambia y es aqu en donde actualizaremos* la variable currentLocation que es un objeto LatLng con

    posicin actual* */@Override

    publicvoidonLocationChanged(Location location) {currentLatitude= location.getLatitude();currentLongitude= location.getLongitude();currentLocation= newLatLng(currentLatitude,

    currentLongitude);}

    }

    G%3/9-* 2-*W3)9* ,3 35362&* 9(3$3 ,*/ 23/9#c#/ W 3/9#/ ,*/ 23/9#c#/ /*$ 2#-# 6*/9-#- ,*/ U*-6#/ ,3

    9-#>#- %$# -%9#: U*-6# #$93-(*- =%3 #)#0#6*/ ,3

  • 7/23/2019 Manual Inicio Android

    163/276

    !'#

    8/ 6%W /(62&3 3& )4,(;* ,3 3/9# $%3#-L%9#8`93-$#_-#;63$975#

  • 7/23/2019 Manual Inicio Android

    164/276

    !'$

    longitudOrigen= (TextView)rootView.findViewById(R.id.longitud_origen_txt);

    btnTrazar= (Button) rootView.findViewById(R.id.btn_trazar);

    context= getActivity();

    // Manda llamar el mtodo para obtener la posicin actualcomenzarLocalizacion();

    // Se agrega una accin al botn para llamar el mtodotrazarRuta()

    btnTrazar.setOnClickListener(newOnClickListener() {

    @OverridepublicvoidonClick(View v) {

    trazarRuta();

    }

    });returnrootView;}

    /** En este mtodo se crea la URL para* solicitar la ruta, esto se hace* mediante un Intent*/

    protectedvoidtrazarRuta() {Intent intentMap = new

    Intent(android.content.Intent.ACTION_VIEW,

    Uri.parse("http://maps.google.com/maps?addr="+loc.getLatitude()+", "+loc.getLongitude() +

    "&daddr="+ latitudDestino.getText()+", "+ longitudDestino.getText()));

    startActivity(intentMap);

    }

    /** Mtodo para obtener la posicin actual* mediante el GPS del dispositivo mvil* */

    privatevoidcomenzarLocalizacion() {

    // Obtenemos una referencia al LocationManagerlocManager= (LocationManager)

    context.getSystemService(Context.LOCATION_SERVICE);

    //Si el GPS no est activado

    if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){

  • 7/23/2019 Manual Inicio Android

    165/276

    !'%

    mostrarAvisoGpsDesahibilitado();}

    // Obtenemos la ltima posicin conocidaloc=

    locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    // Nos registramos para recibir actualizaciones de laposicin

    locListener= newandroid.location.LocationListener() {

    @OverridepublicvoidonLocationChanged(Location location) {

    loc= location;latitudOrigen.setText(loc.getLatitude()+"");longitudOrigen.setText(loc.getLongitude()+"");

    }

    @OverridepublicvoidonProviderDisabled(String arg0) {

    // TODOAuto-generated method stub

    }

    @OverridepublicvoidonProviderEnabled(String arg0) {

    // TODOAuto-generated method stub

    }

    @OverridepublicvoidonStatusChanged(String arg0, intarg1,

    Bundle arg2) {// TODOAuto-generated method stub

    }};

    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,10000, 0, locListener);

    }

    // Mtodo que se usa para mostrar un mensaje de que el GPS estdeshabilitado

    privatevoidmostrarAvisoGpsDesahibilitado() {Toast.makeText(getActivity().getApplicationContext(), "El

    GPS se encuentra deshabilitado, por favor habilitar",Toast.LENGTH_LONG).show();

    }

  • 7/23/2019 Manual Inicio Android

    166/276

    !'&

    }

    H#/ )/3/ #$93-(*-3/ U%3-*$ )-3#,#/ 2#-# ,#- )*$9-*& # &*/ U-#;63$9/ =%3 93$,-d#6*/ 3$ )#,# %$# ,3 /

    23/9#c#/: #Z*-# 3/ $3)3/#-(* #;-3;#- / )/3/ =%3 /3 3$)#-;#-#$ ,3 )*$9-*- 3& U%$)(*$#6(3$9* ,3 /

    9#0/ W ,3& P(3a.#;3-7

    .#-# (62&363$9#- P(3a.#;3- /3-1 $3)3/#-(* %$ #,#29#,*-: 3& )%#& /3 3$)#-;#-# ,3 #,6($(/9-#- 9*,#/ /

    #-1 &*/

    _-#;63$9/ AP(/9#/B $3)3/#-(*/7 l#0&36*/ %$ 2*)* ,3 _-#;6$39.#;3-+,#293- W ,3 _-#;63$9/ 2#-#

    3$93$,3-&*/ 635*- W #/d /#03- ,3 =%3 3/9#6*/ Z#)(3$,* %/*7 _-#;63$.#;3-+,#293- 3/ %$#

    (62&363$9#)(4$ ,3 .#;3-+,#293- =%3 U#)(&(9# 3& %/* ,3 _-#;63$9/ ,3$9-* ,3 %$ P(3a.#;3-7 8/9#

  • 7/23/2019 Manual Inicio Android

    167/276

    !''

    case0:TrazarRutaInternaFragment trazarInternaFragment = new

    TrazarRutaInternaFragment();data.putInt("current_page", arg0+1);trazarInternaFragment.setArguments(data);fragment = trazarInternaFragment;

    break;/** Pestaa para TrazarRutaExternaFragment es seleccionada

    */case1:

    TrazarRutaExternaFragment trazarExternaFragment = newTrazarRutaExternaFragment();

    data.putInt("current_page", arg0+1);trazarExternaFragment.setArguments(data);fragment = trazarExternaFragment;break;

    }returnfragment;

    }

    /** Retorna el nmero de pginas */@OverridepublicintgetCount() {

    returnPAGE_COUNT;}

    }

    K*$ 3/9* W# 93$,-d#6*/ 6*$9#,# 9*,# 3/9-%)9%-# ,3 )*$9-*&3/ $3)3/#-(# 2#-# $%3/9-# ($93-U#> ,3

    23/9#c#/7 I($ 360#-;*: )*$ 3/9* $* 3/ /%U()(3$937 G3)3/(9#6*/ #/*)(#- ,3 #&;%$# U*-6# )#,# 23/9#c#

    )*$ /% )*$93$(,*: ,3 U*-6# =%3 3& )*$9-*& /3 )*62*-93 )*--3)9#63$93 )%#$,* )#60(#6*/ ,3 23/9#c#7 O

    3/9* 93$,-36*/ =%3 Z#)3-&* 63,(#$93 )4,(;*7

    packagecom.android.utm.todosqlite;

    importcom.android.utm.todosqlite.util.Utils;

    importandroid.app.ActionBar;importandroid.content.Intent;importandroid.os.Bundle;importandroid.support.v4.app.FragmentActivity;importandroid.support.v4.app.FragmentManager;

    importandroid.support.v4.view.ViewPager;importandroid.util.DisplayMetrics;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.TabHost;importandroid.widget.TabHost.TabSpec;

  • 7/23/2019 Manual Inicio Android

    168/276

    !'(

    importandroid.widget.TextView;

    /*** @authorNelsonPadilla**/

    publicclassTrazarRutaFragment extendsFragmentActivity implementsTabHost.OnTabChangeListener{

    privatestaticfinalString TAB_TRAZAR_INTERNA= "INTERNA";privatestaticfinalString TAB_TRAZAR_EXTERNA= "EXTERNA";privateViewPager mPager;privateFragmentManager supportFragmentManager;privateTabHost mTabHost;privateintmCurrentTab= 0;privateView indicator;privateTextView textTab;privateintDeviceWidth;

    privateintDeviceHeight;

    publicTrazarRutaFragment() {// TODOAuto-generated constructor stub

    }

    @OverridepublicvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);setContentView(R.layout.fragment_trazar);

    // Calcular la resolucin del dispositivoDisplayMetrics metrics = newDisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metrics);

    DeviceWidth= metrics.widthPixels;DeviceHeight= metrics.heightPixels;

    // Obtener el ActionBarActionBar actionBar = getActionBar();// Establecer si queremos que la accin del icono sea

    habilitado como ir a HomeactionBar.setDisplayHomeAsUpEnabled(true);

    /*** Obtener una referencia al ViewPager en el layout* con esto lograremos hacer el swipe* */

    mPager= (ViewPager) findViewById(R.id.pager_trazar_ruta);

    /*** Cuando se usa un FragmetnActivity es necesario

  • 7/23/2019 Manual Inicio Android

    169/276

    !')

    * ejecutar este mtodo para obtener el FragmentManager* para interactuar con los frgments asociados* con esta activity* */

    supportFragmentManager= getSupportFragmentManager();

    /*** Definiendo un listener para el cambio de pginas* */

    ViewPager.SimpleOnPageChangeListener pageChangeListener =newViewPager.SimpleOnPageChangeListener() {

    @OverridepublicvoidonPageSelected(intposition) {

    super.onPageSelected(position);/*** Al ocurrir el evento de un cambio de pgina

    * lo que hacemos es seleccionar o establecemos* cul es la tab actual* */mTabHost.setCurrentTab(position);

    }};

    /** Estableciendo el pageChange listner para el viewPager */mPager.setOnPageChangeListener(pageChangeListener);

    /** Creando una instancia de FragmentPagerAdapter */TrazarRutaFragmentPagerAdapter planningFragmentPagerAdapter

    = newTrazarRutaFragmentPagerAdapter(supportFragmentManager);

    /** Estableciendo el objeto FragmentPagerAdapter al objetoviewPager */

    mPager.setAdapter(planningFragmentPagerAdapter);/** Establecemos un enlace entre el objeto TabHost* con el elemento contenedor de las tabs en el layout* */

    mTabHost= (TabHost) findViewById(android.R.id.tabhost);setupTabs();

    // Se agrega un listener, para detectar el momento en que

    una tab es cambiadamTabHost.setOnTabChangedListener(this);

    // Se establece cual es la pestaa seleccionada de origenmTabHost.setCurrentTab(mCurrentTab);// manualmente iniciando la carga en la primera tabupdateTab(TAB_TRAZAR_INTERNA, R.id.tab_1_interna);

    }

  • 7/23/2019 Manual Inicio Android

    170/276

    !'*

    /** Mtodo en el que se establece* la accin a realizar al momento* de seleccionar algn elemento de* la ActionBar

    * */@OverridepublicbooleanonOptionsItemSelected(MenuItem item) {

    switch(item.getItemId()) {/** En caso de haber seleccionado el botn* habilitado como Home cargar la clase* MainActivity* */caseandroid.R.id.home:

    Intent intent = newIntent(this, MainActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    startActivity(intent);break;// Something else

    }returnsuper.onOptionsItemSelected(item);

    }

    /** Mtodo que se encargar de actualizar la vista,* esto es que cambiar de fragment segn sea la* tab seleccionada* */

    privatevoidupdateTab(String arg0, intplaceholder) {if(supportFragmentManager.findFragmentByTag(arg0) == null)

    {if(arg0.equals(TAB_TRAZAR_INTERNA)) {

    newTrazarRutaInternaFragment();}if(arg0.equals(TAB_TRAZAR_EXTERNA)) {

    newTrazarRutaExternaFragment();}

    }}

    /** Mtodo encargado de */

    privatevoidsetupTabs() {/** Llamar setup() antes de aadir pestaas si se carga

    TabHost usando findViewById ().* */

    mTabHost.setup(); // Importante!!!

  • 7/23/2019 Manual Inicio Android

    171/276

    !(+

    // Se agrega cada una de las tabs, en nuestro ejemplo sloson 2

    mTabHost.addTab(newTab(TAB_TRAZAR_INTERNA,R.id.tab_1_interna));

    mTabHost.addTab(newTab(TAB_TRAZAR_EXTERNA,R.id.tab_2_externa));

    }

    /** Este mtodo de lo que se encarga es de crear un objeto

    TabSpec.* Los objetos TabSpec contienen toda la informacin de cada Tab** */

    privateTabSpec newTab(String tag, inttabContentId) {

    indicator=LayoutInflater.from(this).inflate(R.layout.tab_layout_trazar,(ViewGrou

    p) findViewById(android.R.id.tabs), false);textTab= (TextView) indicator.findViewById(R.id.icon);textTab.setTextSize(20);if(tag.equals(TAB_TRAZAR_INTERNA)){

    textTab.setText(getString(R.string.title_section1));}if(tag.equals(TAB_TRAZAR_EXTERNA)){

    textTab.setText(getString(R.string.title_section2));}

    TabSpec tabSpec = mTabHost.newTabSpec(tag);tabSpec.setIndicator(indicator);tabSpec.setContent(tabContentId);Utils util = newUtils();// Configuramos el ancho del textView al 50% de la pantalla

    del mvilutil.AdjustWidthScreen(DeviceWidth,DeviceHeight,50,textTab);

    // Configuramos el alto del textView al 8% de la pantalladel mvil

    util.AdjustHeightScreen(DeviceWidth,DeviceHeight,8,textTab);returntabSpec;

    }

    @Override

    publicbooleanonCreateOptionsMenu(Menu menu) {// Inflar el men; esto agrega items a la barra de accin si

    es que est presente.getMenuInflater().inflate(R.menu.tareas, menu);returntrue;

    }

    /*

  • 7/23/2019 Manual Inicio Android

    172/276

    !(!

    * Mtood que se encarga de establecer las* acciones a realizar cuando se hace un* cambio de Tabs* */

    @OverridepublicvoidonTabChanged(String arg0) {

    if(TAB_TRAZAR_INTERNA.equals(arg0)) {

    // Se establece el nuevo fragment en la vistaupdateTab(arg0, R.id.tab_1_interna);mCurrentTab= 0;

    // Se establece en el ViewPager cual debe de ser elfragment visible

    this.mPager.setCurrentItem(mCurrentTab);return;

    }if(TAB_TRAZAR_EXTERNA.equals(arg0)) {

    // Se establece el nuevo fragment en la vistaupdateTab(arg0, R.id.tab_2_externa);mCurrentTab= 1;

    // Se establece en el ViewPager cual debe de ser elfragment visible

    this.mPager.setCurrentItem(mCurrentTab);return;

    }}

    }

    !"#$" &' (#)*+" ,-

    H# ($)&%/(4$ ,3 /*U9a#-3 =%3 &33 )4,(;*/ jL 3$ 93&hU*$*/ 64

  • 7/23/2019 Manual Inicio Android

    173/276

    !(#

    +$,-*(, 2*- ,3U#%&9 $* ($93;-# 3$ /% #2( %$ &3)9*- ,3 )4,(;*/ jL: 2#-# &* )%1& /3-1 $3)3/#-(* #;-3;#- %$#

    &(0-3-d# =%3 $*/ #W%,#-1 W U#)(&(9#-1 3& 9-#0#5* ,3 &3)9%-# 3 ($93-2-39#)(4$ ,3& )4,(;*7

    8/ #/d =%3 #$93/ ,3 3623>#- 93$,-36*/ =%3 #)-#- ,*/ )*/#/g ij%h /*$ &*/ )4,(;*/ jLk: W /3;%$,*

    i,4$,3 *093$36*/ &(0-3-d#: W )46* ($/9#*/ 3$ $%3/9-* 2-*W3)9*k7

    YZ?X $*/ "*$ BE0%8*$ ZD[

    -3/2*$,(3$,* # 2-(63-# 2-3;%$9# 2*,36*/ ,3)(- =%3 %$ @U682- _NA Q=#2\ 41%8/0%1 2/;1: )4,(;* ,3

    -3/2%3/9# -12(,#B 3/ %$ 64,%&* m9(& 2#-# #&6#)3$#- ($U*-6#)(4$ 3$ %$# 6#9-(> ,3 2%$9*/* %$ )4,(;*

    ,3 0#--#/0(,(63$/(*$#& )-3#,* 2*- )*62#cd# 5#2*$3/# ?3$/* e## 2*- &*/ 9-3/ )%#,-#,*/ =%3 /3 3$)%3$9-#$ 3$ / 3/=%($#/ W =%3 23-6(93$ ,393)9#-

    2*/()(4$ ,3& )4,(;* #& &3)9*-7 H# /(; jL /3 ,3-($bW# )*$ 3/9* 2*,36*/ %/#- &(0-3-d# 3$ $%3/9-* 2-*W3)9*7

    M'3:,1)1 '* '$ 2*&3),&N"*,P'1+

    K46* &* Z36*/ #-36*/ $%3/9-* 35362&* )*$ ,3)-#)(4$

    ,3 23-6(/*/ 3$ 3& #-)Z(

  • 7/23/2019 Manual Inicio Android

    174/276

    !($

    android:required="false"/>

    O 2#-# $%3/9-* 2-*W3)9*

  • 7/23/2019 Manual Inicio Android

    175/276

    !(%

    xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical">

    8$ 3& 6*63$9* 3$ =%3 W# /3 3/9h 353)%9#$,* #2&()#)(4$ W 3/936*/ &3W3$,* #&;m$ )4,(;* jL

  • 7/23/2019 Manual Inicio Android

    176/276

    !(&

    O# 93-6($#,# )-3#)(4$ ,3& W*%9 ,3 )16#-# 2#-# 3& &3)9*- 3/ 6*63$9* ,3 2-*)3,3- # )-3#)(4$

    ,3& W*%9 =%3 6*/9-#-1 3/ ,36#/(#,* /(62&3 2%3/ $* 3/

    3& )#/* ,3 3/93 35362&*

  • 7/23/2019 Manual Inicio Android

    177/276

    !('

    android:id="@+id/summary_result"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"/>

    H# ($93-U#> =%3 #)#0#6*/ ,3 )-3#- #& 6*63$9* ,3 W# Z#03- &3d,* %$ )4,(;*

  • 7/23/2019 Manual Inicio Android

    178/276

    !((

    -36*/ j7/Vk: =%3,#$,* ,3 3/9# 6#$3-# i73=i7/ViF33?D-22: W )*6*

  • 7/23/2019 Manual Inicio Android

    179/276

    !()

    * inicio para el audio y para la vibracion* */

    publicBeepManager(Activity activity) {this.activity= activity;this.mediaPlayer= null;updatePrefs();

    }

    voidupdatePrefs() {

    /** Obtiene las preferencias compartidas del contexto* relacionado con este contexto* */

    SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(activity);

    playBeep= shouldBeep(prefs, activity);vibrate= true;//

    prefs.getBoolean(PreferencesActivity.KEY_VIBRATE,// false);if(playBeep&& mediaPlayer== null) {

    // The volume on STREAM_SYSTEM is not adjustable, andusers found it

    // too loud,// so we now play on the music stream.

    activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);mediaPlayer= buildMediaPlayer(activity);

    }}

    /** Con este mtodo se inicia el reproductor e iniciar* la reproduccin del archivo de audio, as como inicia* la vibracin del mvil* */

    publicvoidplayBeepSoundAndVibrate() {if(playBeep&& mediaPlayer!= null) {

    mediaPlayer.start();}if(vibrate) {

    Vibrator vibrator = (Vibrator)activity.getSystemService(Context.VIBRATOR_SERVICE);

    vibrator.vibrate(VIBRATE_DURATION);}

    }

    /** Mtodo que determina si el sonido del beep* se podr reproducir, esto se debe a las* condiciones en las que se tengan del volumen

  • 7/23/2019 Manual Inicio Android

    180/276

    !(*

    * del audio de todo el sistema. Si est en modo* silencio el beep no se reproduce* */

    privatestaticbooleanshouldBeep(SharedPreferences prefs,Context activity) {

    booleanshouldPlayBeep = true;//

    prefs.getBoolean(PreferencesActivity.KEY_PLAY_BEEP,// true);

    if(shouldPlayBeep) {// See if sound settings overrides thisAudioManager audioService = (AudioManager) activity

    .getSystemServ