рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдореИрдЬрд┐рдХ 8-рдмреЙрд▓ рд▓рд┐рдЦрдирд╛





рдкреЛрд╕реНрдЯ рдмреЙрд▓ рдкрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рдиреАрдп рдореИрдЬрд┐рдХ 8-рдмреЙрд▓ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдереЛрдбрд╝рд╛ рдХрдВрдкрди рд╣рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╣рд┐рд▓ рд░рд╣рд╛ рд╣реИред



рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрд▓реНрдбрд╡рд░реНрдб рд▓рд┐рдЦ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг Google рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣реИред рд╡рд╣рд╛рдВ рдЖрдк рдбрд╛рдЙрдирд▓реЛрдб рдЯреИрдм рдореЗрдВ рдореИрдЬрд┐рдХ-8-рдмреЙрд▓ 1.1.apk рдлрд╝рд╛рдЗрд▓ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред



рд╕рдлрд▓ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП jdk, android sdk, рдЧреНрд░рд╣рдг рдФрд░ ADT рдкреНрд▓рдЧрдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ ред



рд╕реНрдерд╛рдиреАрдпрдХрд░рдг



Android рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рднреВрдЧреЛрд▓ рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рдореБрджреНрджрд╛ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдореЗрдВ рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, Google рдиреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ред



рддреЛ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ, рд╣рдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдХрдИ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реЗрд╕ / рдорд╛рди / рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕.xml рджреНрд╡рд╛рд░рд╛ , рдмрд╛рдХреА рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд░реЗрд╕ / рдорд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ- <Qualifiers> /strings.xml , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдорд╛рди-рдПрдиред рдорд╛рди- рдЬрд╛рдкрд╛рдиреА рдХреЗ рд▓рд┐рдП рдЬрд╛ред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓реЛрдХрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреМрди рд╕реЗ рд╕рдВрд╕рд╛рдзрди рд▓реЛрдб рдХрд░рдиреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд▓реЗрдЖрдЙрдЯ, рдзреНрд╡рдирд┐ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ рдЕрдиреНрдп рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рднреА рд╣реИрдВред



рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реЗрд╕ / рдорд╛рди / , рд░реЗрд╕ / рд╡реИрд▓реНрдпреВ-рдПрди рдФрд░ рд░реЗрд╕ / рд╡реИрд▓реНрдпреВ-рдЖрд░рдпреВ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВрдЧреЗ, рдЙрдирдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕.рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╛рдЗрд▓реЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реЛрдВрдЧреАред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдореИрдЬрд┐рдХ рдмреЙрд▓ рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╛рдо, рд╣реЗрдбрд░ рдФрд░ рдЙрддреНрддрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



<? xml version ="1.0" encoding ="utf-8" ? >

< resources >

< string name ="app_name" > Magic 8-Ball </ string >

< string name ="shake_me_caption" > Shake Me </ string >

< string name ="press_menu_shake_caption" > Press Menu\n- Shake </ string >

< string name ="menu_shake_caption" > Shake </ string >

< string name ="menu_preferences_caption" > Preferences </ string >



< string name ="preferences_section_title" > Magic 8-ball Preferences </ string >



< string name ="shake_count_id" > shakeCount </ string >

< string name ="shake_count_title" > Shake count </ string >

...

< string-array name ="responses" >

< item > As I see\nit, yes </ item >

< item > It is\ncertain </ item >

< item > It is\ndecidedly\nso </ item >

< item > Most\nlikely </ item >

< item > Outlook\ngood </ item >

< item > Signs point\nto yes </ item >

< item > Without\na doubt </ item >

< item > Yes </ item >

< item > Yes -\ndefinitely </ item >

...

< item > Very\ndoubtful </ item >

</ string-array >



</ resources >




* This source code was highlighted with Source Code Highlighter .






рдПрдХ рдФрд░ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░ рдХреА рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╣рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреА рд╕рдЯреАрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреА рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЕрдВрдЧреНрд░реЗрдЬреАред рдФрд░ рд╡рд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ Res / рдорд╛рди / strings.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ res / рдорд╛рди-en / strings.xml рдореЗрдВ рд╣реИ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╕рдм рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ рдЕрд▓рдЧ рдПрдХ рд▓реЛрдХреЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдФрд░ рдлреЛрд░реНрд╕ рдХреНрд▓реЛрдЬ рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред



рд▓реЗрдЖрдЙрдЯ, рдПрдиреАрдореЗрд╢рди рдФрд░ рдХрдВрдкрди



рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреА рдЙрд▓рдЯреА рдЫрд╡рд┐ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рд╣реИред рдЗрд╕ рдкрд░ рдПрдХ рдЧреЗрдВрдж рдХреЗ рд╕рд╛рде рдПрдХ ImageView рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдПрдХ TextView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрдб main.xml:

<? xml version ="1.0" encoding ="utf-8" ? >

< FrameLayout xmlns:android ="http://schemas.android.com/apk/res/android"

android:layout_width ="fill_parent"

android:layout_height ="fill_parent"

android:background ="@drawable/bg" >

< ImageView android:layout_width ="fill_parent"

android:layout_height ="fill_parent"

android:src ="@drawable/eight_ball"

android:layout_gravity ="center_vertical"

android:layout_margin ="10px" />

< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"

android:orientation ="vertical"

android:layout_width ="fill_parent"

android:layout_height ="fill_parent"

android:gravity ="center" >

< TextView android:id ="@+id/MessageTextView"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content"

android:layout_gravity ="center"

android:background ="@drawable/triangle"

android:text ="@string/shake_me_caption"

android:focusable ="false"

android:gravity ="center_vertical|center" android:layout_marginTop ="14dip" >

</ TextView >

</ LinearLayout >

</ FrameLayout >


* This source code was highlighted with Source Code Highlighter .






рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрд▓реНрдлрд╛рдПрдиреАрдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХрдХреНрд╖рд╛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрд▓реНрдлрд╛ рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХрдЯ рдФрд░ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

private void showMessage( String message) {

TextView triangle = (TextView) findViewById(R.id.MessageTextView);

triangle.setVisibility(TextView.INVISIBLE);

triangle.setText(message);



AlphaAnimation animation = new AlphaAnimation(0, 1);

animation.setStartOffset(Defaults.START_OFFSET);

triangle.setVisibility(TextView.VISIBLE);

animation.setDuration(Defaults.FADE_DURATION);

triangle.startAnimation(animation);



vibrator.vibrate(Integer.parseInt(preferences.getString(

getString(R. string .vibrate_time_id), Defaults.VIBRATE_TIME)));

}



* This source code was highlighted with Source Code Highlighter .






рдЙрддреНрддрд░ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдЬрд┐рдХ 8-рдмреЙрд▓ рдЙрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд╛рдЗрдмреНрд░реЗрдЯ рдХрд░реЗрдЧрд╛, рдЬреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдиреАрдЪреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдорд╛рди 250ms рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдЯреА рдЕрд╡рдзрд┐ (50ms) рдХрд╛ рдХрдВрдкрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рдЗрдмреНрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ-рдЕрдиреБрдорддрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: < uses-permission android:name ="android.permission.VIBRATE" />







рдореЗрдиреНрдпреВ



рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдореЗрдиреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИред Res / рдореЗрдиреВ / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдореЗрдиреВред Xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рд╢реЗрдХ рдФрд░ рд╡рд░реАрдпрддрд╛ рдмрдЯрди рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред

<? xml version ="1.0" encoding ="utf-8" ? >

< menu xmlns:android ="http://schemas.android.com/apk/res/android" >

< item android:id ="@+id/shake"

android:title ="@string/menu_shake_caption"

android:icon ="@android:drawable/ic_menu_always_landscape_portrait" />

< item android:id ="@+id/preferences"

android:title ="@string/menu_preferences_caption"

android:icon ="@android:drawable/ic_menu_preferences" />

</ menu >


* This source code was highlighted with Source Code Highlighter .






Magic8Ball рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рджреЛ рдРрд╕реЗ рддрд░реАрдХреЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater menuInflater = getMenuInflater();

menuInflater.inflate(R.menu.menu, menu);

return super.onCreateOptionsMenu(menu);

}



@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case R.id.shake:

showMessage(getAnswer());

return true ;

case R.id.preferences:

startActivity( new Intent( this , Preferences. class ));

return true ;

}

return false ;

}



* This source code was highlighted with Source Code Highlighter .






MenuInflater рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ xml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдореЗрдиреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рд╣рдо рдПрдХ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдУрдСрдЯреЗрд╢рди рдЗрдЯреЗрдо рд╕реЗрд▓реЗрдХреНрдЯреЗрдб рдкрджреНрдзрддрд┐ рдореЗрдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╢реЗрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдмрдЯрди рд╕реЗрдЯрд┐рдВрдЧ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред



рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ



рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ SensorEventListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреА рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдШреЛрд╖рд┐рдд рд╣реИрдВ:



рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ - рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдФрд░ SensorManager рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);








рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдореЗрдВ Sensor.TYPE_ACCELEROMETER рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓рд╛ рдПрдХ рд╕реЗрдВрд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ onSensorChanged рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рддреНрд╡рд░рдг рдЗрдХрд╛рдЗрдпреЛрдВ (m / s ^ 2) рдореЗрдВ рд╣реЛрдЧрд╛ред рддреАрди рдЕрдХреНрд╖реЛрдВ X, Y рдФрд░ Z рдХреЗ рдорд╛рди, SensorEvent рд╡рд░реНрдЧ рдХреЗ Event.values тАЛтАЛ[0], event.values тАЛтАЛ[1], event.values тАЛтАЛ[2] рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдВрдЧреЗред

public void onSensorChanged(SensorEvent event ) {

if ( event .sensor.getType() == Sensor.TYPE_ACCELEROMETER)

if (isShakeEnough( event .values[0], event .values[1], event .values[2]))

showMessage(getAnswer());

}



private boolean isShakeEnough( float x, float y, float z) {

double force = 0.0d;

force += Math .pow((x - lastX) / SensorManager.GRAVITY_EARTH, 2.0);

force += Math .pow((y - lastY) / SensorManager.GRAVITY_EARTH, 2.0);

force += Math .pow((z - lastZ) / SensorManager.GRAVITY_EARTH, 2.0);

force = Math .sqrt(force);



lastX = x;

lastY = y;

lastZ = z;



if (force > Float.parseFloat(preferences.getString(

getString(R. string .threshold_id), Defaults.THRESHOLD))) {

shakeCount++;

if (shakeCount > Integer.parseInt(preferences.getString(

getString(R. string .shake_count_id), Defaults.SHAKE_COUNT))) {

shakeCount = 0;

lastX = 0;

lastY = 0;

lastZ = 0;

return true ;

}

}

return false ;

}



* This source code was highlighted with Source Code Highlighter .






рдПрдВрдбреНрд░реЙрдЗрдб рд╣рдорд╛рд░реА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЕрдкрдиреА рдЬреЗрдм рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЭрдЯрдХреЛрдВ рд╕реЗ рдХрдВрдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреИрд╕реЗ рд╣реА рдЖрд╡реЗрджрди рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд╣рдо рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд╕реЗрдВрд╕рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

@Override

public void onResume() {

super.onResume();

registerSensorListener();

if (isSensorRegistered())

showMessage(getString(R. string .shake_me_caption));

else

showMessage(getString(R. string .menu_shake_caption));

}



@Override

public void onPause() {

unregisterSensorListener();

super.onPause();

}



* This source code was highlighted with Source Code Highlighter .








рд╕реЗрдЯрд┐рдВрдЧреНрд╕



рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЖ рдЧрдПред рд╡рд┐рднрд┐рдиреНрди рдлреЛрдиреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдлреЛрд░реНрд╕ - рдереНрд░реЗрд╢реЛрд▓реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдЪрдЯреАрд╕реА рд╡рд╛рдЗрд▓реНрдбрдлрд╛рдпрд░, рдореЛрдЯреЛрд░реЛрд▓рд╛ рдорд╛рдЗрд▓рд╕реНрдЯреЛрди рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд╛рдИрд╕реНрдХреНрд░реАрди рдЬрд╝реАрдЙрд╕ рдХреЗ рдмреАрдЪ, рдпрд╣ рдореВрд▓реНрдп рддреАрди рдмрд╛рд░ рднрд┐рдиреНрди рдерд╛ред рдпрд╣ рд╣рдореЗрдВ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:

  1. рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдереНрд░реЗрд╢реЛрд▓реНрдб рдорд╛рди рдФрд░ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  2. рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдХрд╣реАрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд╣реАрдВ рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдпрд╣рд╛рдВ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рджреЛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╡рд░реАрдпрддрд╛рдРрдХреНрд╡рд┐рдЯреА рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛рдХрд░рдг рд╣рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред рдЕрдм рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗред



рд╡рд░реАрдпрддрд╛ - рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рдиреЗрддреНрд░рд╣реАрди рд╣рдореЗрдВ рд╡рд░реАрдпрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ addPreferencesFromResource рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реЗрдпрд░реНрдбрдкреНрд░рд┐рдлрд░реЗрдВрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рд╣рдорд╛рд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред

<? xml version ="1.0" encoding ="utf-8" ? >

< PreferenceScreen xmlns:android ="http://schemas.android.com/apk/res/android" >

< PreferenceCategory android:title ="@string/preferences_section_title" >

< EditTextPreference

android:key ="@string/shake_count_id"

android:defaultValue ="4"

android:title ="@string/shake_count_title"

android:summary ="@string/shake_count_summary"

android:dialogTitle ="@string/shake_count_dialogTitle"

android:inputType ="number"

android:numeric ="integer"

android:maxLength ="1"

/>

< EditTextPreference

android:key ="@string/threshold_id"

android:defaultValue ="2.75f"

android:title ="@string/threshold_title"

android:summary ="@string/threshold_summary"

android:dialogTitle ="@string/threshold_dialogTitle"

android:inputType ="numberDecimal"

android:numeric ="decimal"

android:maxLength ="4"

/>

< EditTextPreference

android:key ="@string/vibrate_time_id"

android:defaultValue ="250"

android:title ="@string/vibrate_time_title"

android:summary ="@string/vibrate_time_summary"

android:dialogTitle ="@string/vibrate_time_dialogTitle"

android:inputType ="number"

android:numeric ="integer"

android:maxLength ="3"

/>

</ PreferenceCategory >

</ PreferenceScreen >



* This source code was highlighted with Source Code Highlighter .






рдкреНрд░рд╛рдердорд┐рдХрддрд╛ xml рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдореВрд▓ рддрддреНрд╡ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ рдкрд╕рдВрдж рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрд╡рд░реНрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдореЗрдВ рд╡рд░реАрдпрддрд╛рд╕реНрдХреНрд░реАрди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ)ред рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ EditTextPreference рд╣реИрдВред рдпрд╣ рд╡рд░реНрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ TextEdit рд╡рд╣ рдПрдХ рдорд╛рди рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдм EditTextPreference рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ:



рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ (рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдЦреЗрдВред рдЬрд╛рд╡рд╛) рдФрд░ рдЗрд╕реЗ AndroidManifest рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:

< activity android:name =".activities.Preferences"

android:label ="@string/app_name" >

</ activity >










рдЕрдм, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред SharedPreferences рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдбрд╝рддреЗ рд╣реИрдВ редgetDefaultSedenPreferences (рдпрд╣) рд╡рд┐рдзрд┐ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ? .. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдВрдкрди рд╕рдордп, рдЗрд╕ рддрд░рд╣: vibrator.vibrate (Integer.parseInt (рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ) (getString (R.string.bribrate_time_id), Defaults.VIBRATE_TIME) );



рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ .getInt (...) рд╣рдардкреВрд░реНрд╡рдХ рдХреНрд▓рд╛рд╕рдХреИрд╕реНрдЯ рдПрдХреНрд╕рд╕реЗрдкреНрд╢рди рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реАрдпрддрд╛рдУрдВ рдХреЛ рддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢реЗрд╖ рдорд╛рди рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдорд╛рди рдХреЛ рдмрджрд▓рдХрд░, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрддреНрддрд░ рдореЗрдВ рдЧреЗрдВрдж рдХреЛ рдЪрдХрдирд╛рдЪреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рдХрдд рдЪрд╛рд╣рд┐рдПред



рдкреБрдирд╢реНрдЪ

рдЖрд╡реЗрджрди рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рджрд╣рд▓реАрдЬ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЯреНрд░реИрдХ рдмрд╛рд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧреЗрдВрдж рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЗрдХ рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗрдВред рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рд╕рдВрдкрд╛рджрдХ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬреЛрдбрд╝ рд╕рдХреЗред




All Articles