рд╣рдо рд╕реЛрдиреА рд╕реНрдорд╛рд░реНрдЯрд╡реЙрдЪ рдФрд░ рд╕реНрдорд╛рд░реНрдЯрд╡реЙрдЪ 2 рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рд╕реЛрдиреА рд╕реНрдорд╛рд░реНрдЯрд╡реЙрдЪ рдЕрдкрдиреЗ рд╕рдордп рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдХрд░рдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдм рдкрд░ рдмрд╛рдИрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЦреИрд░, рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ - рдЪрд▓реЛ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ! рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдХрд┐рд╕реА рднреА рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдкрдХреНрд╖ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬреЛ рд▓реЛрдЧ рдПрдХ рд╣реА рдШрдбрд╝рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЙрдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕реНрдорд╛рд░реНрдЯрд╡реЙрдЪ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╡рд┐рдХрд╛рд╕ рдХрд░реЗрдВрдЧреЗред



рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


Android SDK рдкреНрд░рдмрдВрдзрдХ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЯреВрд▓ -> рдРрдб-рдСрди рд╕рд╛рдЗрдЯреНрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд╛рдЗрдЯреЗрдВ рдЯреИрдм рдкрд░, рдШрдбрд╝реА рдХреЗ рдиреАрдЪреЗ рдПрд╕рдбреАрдХреЗ рд╕реЗ рдкрддрд╛ рдЬреЛрдбрд╝реЗрдВ:
dl-developer.sonymobile.com/sdk_manager/Sony-Add-on-SDK.xml

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрд╕рдбреАрдХреЗ рди рдХреЗрд╡рд▓ рдШрдбрд╝рд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реЛрдиреА рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рдЯреНрд░рд┐рдХреА рдбрд┐рд╡рд╛рдЗрд╕ рднреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рд╣реЗрдбрд╕реЗрдЯ ... рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рд╣рдо рдХреЗрд╡рд▓ рдШрдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред



рдФрд░ рдЕрдм рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдирдП рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:



рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, [Android SDK рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛] / sdk / add-ons / addon-sony_add-on_sdk_2_1-sony-16 / рдирдореВрдиреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рд╕рднреА рдШрдбрд╝реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЕрднрд┐рдЬрд╛рдд рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдПрдореБрд▓реЗрдЯрд░ рджреЗрдЦреЗрдВ


рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШрдбрд╝реА рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рднреА рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП AVD Manager рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ Sony рд╕реЗ рдПрдХ рдирдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдПрдВ рдЬреЛ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Xperia Tред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реЛрдиреА рдПрдб-рдСрди рдПрд╕рдбреАрдХреЗ рдХреЛ рд▓рдХреНрд╖реНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред



рдЕрдм, рдпрджрд┐ рдЖрдк рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдг рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрдХрд░рдгреАрдп рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЖрдк рдПрдХреНрд╕реЗрд╕рд░реА рдПрд╕реНрдХреНрдпреБрд▓реЗрдЯрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ



рдЬреЛ рд╣рдорд╛рд░реА рдЬрд╝рд░реВрд░рдд рдХреА рдШрдбрд╝реА рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ (рдФрд░ рди рдХреЗрд╡рд▓, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдпреЛрдЬрдирд╛


рдЕрдЪреНрдЫрд╛, рдЕрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ? рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрд▓реЛ рд╢рдмреНрдж рдХрд░рдирд╛ рдЙрдмрд╛рдК рд╣реИ, рддреЛ рдЪрд▓реЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦреЗрдВ! рдлреЛрди рдкрд░ рдХреЛрдИ рднреА рдЦрд┐рд▓рд╛рдбрд╝реАред рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреИрдорд╛рдирд╛ рд╣реИред ;)



рд╣рдо IntelliJ IDEA рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ


рдЪреВрдВрдХрд┐ рдореИрдВ IntelliJ IDEA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╣рдо рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рд╕реЛрдиреА рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирддреЗ рд╣реИрдВред



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

рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдБ -> рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ , рд╡рд╣рд╛рдБ - рдореЙрдбреНрдпреВрд▓ рдЯреИрдм рдкрд░, "рдкреНрд▓рд╕ рд╕рд╛рдЗрди" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЖрдпрд╛рдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ



рдлрд╝реЛрд▓реНрдбрд░ рдЦреЛрдЬреЗрдВ SmartExtensionAPI :



рдлрд┐рд░ рдареАрдХ рд╣реИ рдФрд░ рдЕрдЧрд▓рд╛-> рдЕрдЧрд▓рд╛-> рдЕрдЧрд▓реЗ рдЕрдВрдд рддрдХ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдореЗрдВ рд╣реИред
рдлрд┐рд░ рд╣рдо рдЬреЛрдбрд╝реЗ рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред





рдЙрд╕реА рддрд░рд╣ рд╣рдо SmartExtensionUtils рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ ред


рд╣рдо рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ


рдЪрд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВред

AndroidManifest.xml
 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.smartwatch_habra_demo"> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="16"/> <uses-permission android:name="com.sonyericsson.extras.liveware.aef.EXTENSION_PERMISSION" /> <application android:label="-    " android:icon="@drawable/icon"> <activity android:name="DemoConfigActivity" android:label="  " > <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <service android:name="DemoReceiverService" /> <receiver android:name="DemoExtensionReceiver" android:permission="com.sonyericsson.extras.liveware.aef.HOSTAPP_PERMISSION" > <intent-filter> <!-- Generic extension intents. --> <action android:name="com.sonyericsson.extras.liveware.aef.registration.EXTENSION_REGISTER_REQUEST" /> <action android:name="com.sonyericsson.extras.liveware.aef.registration.ACCESSORY_CONNECTION" /> <action android:name="android.intent.action.LOCALE_CHANGED" /> <!-- Notification intents --> <action android:name="com.sonyericsson.extras.liveware.aef.notification.VIEW_EVENT_DETAIL" /> <action android:name="com.sonyericsson.extras.liveware.aef.notification.REFRESH_REQUEST" /> <!-- Widget intents --> <action android:name="com.sonyericsson.extras.aef.widget.START_REFRESH_IMAGE_REQUEST" /> <action android:name="com.sonyericsson.extras.aef.widget.STOP_REFRESH_IMAGE_REQUEST" /> <action android:name="com.sonyericsson.extras.aef.widget.ONTOUCH" /> <action android:name="com.sonyericsson.extras.liveware.extension.util.widget.scheduled.refresh" /> <!-- Control intents --> <action android:name="com.sonyericsson.extras.aef.control.START" /> <action android:name="com.sonyericsson.extras.aef.control.STOP" /> <action android:name="com.sonyericsson.extras.aef.control.PAUSE" /> <action android:name="com.sonyericsson.extras.aef.control.RESUME" /> <action android:name="com.sonyericsson.extras.aef.control.ERROR" /> <action android:name="com.sonyericsson.extras.aef.control.KEY_EVENT" /> <action android:name="com.sonyericsson.extras.aef.control.TOUCH_EVENT" /> <action android:name="com.sonyericsson.extras.aef.control.SWIPE_EVENT" /> <action android:name="com.sonyericsson.extras.aef.control.OBJECT_CLICK_EVENT" /> <action android:name="com.sonyericsson.extras.aef.control.MENU_ITEM_SELECTED" /> </intent-filter> </receiver> </application> </manifest> 


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

рд░рд┐рд╕реАрд╡рд░ рд╡рд░реНрдЧ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
DemoExtensionReceiver.java
 public class DemoExtensionReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { intent.setClass(context, DemoReceiverService.class); context.startService(intent); } } 


рдареАрдХ рд╣реИ, рдЕрдм рдЪрд▓реЛ рд╕реЗрд╡рд╛ рдкрд░ рд╣реА рдЪрд▓рддреЗ рд╣реИрдВ:
DemoReceiverService.java
 public class DemoReceiverService extends ExtensionService { public static final String EXTENSION_KEY = "com.smartwatch_habra_demo"; //todo        ,         "." public DemoReceiverService() { super(EXTENSION_KEY); } @Override protected RegistrationInformation getRegistrationInformation() { return new DemoRegistrationInformation(this); } @Override protected boolean keepRunningWhenConnected() {//       return false; } @Override public WidgetExtension createWidgetExtension(String hostAppPackageName) { //   return new DemoWidget(this,hostAppPackageName); } @Override public ControlExtension createControlExtension(String hostAppPackageName) {//    boolean IsSmartWatch2= DeviceInfoHelper.isSmartWatch2ApiAndScreenDetected( this, hostAppPackageName); if (IsSmartWatch2){ return new DemoControl2(this,hostAppPackageName); }else{ return new DemoControl(this,hostAppPackageName); } } } 


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

рд▓реЗрдХрд┐рди RegistrationInformation рдШрдбрд╝реА рдкреНрд░рдмрдВрдзрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред
DemoRegistrationInformation.java
 public class DemoRegistrationInformation extends RegistrationInformation { public static final int WIDGET_WIDTH_SMARTWATCH = 128; public static final int WIDGET_HEIGHT_SMARTWATCH = 110; public static final int CONTROL_WIDTH_SMARTWATCH = 128; public static final int CONTROL_HEIGHT_SMARTWATCH = 128; public static final int CONTROL_WIDTH_SMARTWATCH_2 = 220; public static final int CONTROL_HEIGHT_SMARTWATCH_2 = 176; Context mContext; protected DemoRegistrationInformation(Context context) { if (context == null) { throw new IllegalArgumentException("context == null"); } mContext = context; } @Override public ContentValues getExtensionRegistrationConfiguration() { String iconHostapp = ExtensionUtils.getUriString(mContext, R.drawable.icon); ContentValues values = new ContentValues(); values.put(Registration.ExtensionColumns.CONFIGURATION_ACTIVITY,DemoConfigActivity.class.getName()); //,      " ".      -   . values.put(Registration.ExtensionColumns.CONFIGURATION_TEXT," -");//  ,        .      -   . values.put(Registration.ExtensionColumns.NAME, "--");//,         values.put(Registration.ExtensionColumns.EXTENSION_KEY,DemoReceiverService.EXTENSION_KEY); //   values.put(Registration.ExtensionColumns.HOST_APP_ICON_URI, iconHostapp); //      values.put(Registration.ExtensionColumns.EXTENSION_ICON_URI, iconHostapp); //      ,   48x48 values.put(Registration.ExtensionColumns.NOTIFICATION_API_VERSION,getRequiredNotificationApiVersion());//    values.put(Registration.ExtensionColumns.PACKAGE_NAME, mContext.getPackageName()); return values; } @Override public int getRequiredNotificationApiVersion() { //     return 0; } @Override public int getRequiredSensorApiVersion() { //        return 0; } //--------------------------------------------- //      //--------------------------------------------- @Override public boolean isWidgetSizeSupported(final int width, final int height) { return (width == WIDGET_WIDTH_SMARTWATCH && height == WIDGET_HEIGHT_SMARTWATCH); } @Override public int getRequiredWidgetApiVersion() { //    return 1; } //--------------------------------------------- //      //--------------------------------------------- @Override public int getRequiredControlApiVersion() { //    return 1; } @Override public int getTargetControlApiVersion() { //     return 2; } @Override public boolean isDisplaySizeSupported(int width, int height) { return (width == CONTROL_WIDTH_SMARTWATCH_2 && height == CONTROL_HEIGHT_SMARTWATCH_2) || (width == CONTROL_WIDTH_SMARTWATCH && height == CONTROL_HEIGHT_SMARTWATCH); } } 


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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ getExtensionRegistrationConfiguration рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдЦрд┐рдбрд╝рдХреА


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

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



рдФрд░ рдпрд╣рд╛рдВ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЬрд╡рд╛рдм рджреЗрдЧрд╛:
DemoControl.java
 public class DemoControl extends ControlExtension { static final Rect buttonStopPlaySmartWatch = new Rect(43, 42, 85, 88); public DemoControl(Context context, String hostAppPackageName) { super(context, hostAppPackageName); } @Override public void onTouch(final ControlTouchEvent event) {//   if (event.getAction() == Control.Intents.CLICK_TYPE_SHORT) { if (buttonStopPlaySmartWatch.contains(event.getX(), event.getY())){ MusicBackgroundControlWrapper.TogglePausePlay(mContext); } } } @Override public void onSwipe(int direction) {//   if (direction== Control.Intents.SWIPE_DIRECTION_UP){ MusicBackgroundControlWrapper.VolumeUp(mContext); } if (direction==Control.Intents.SWIPE_DIRECTION_DOWN){ MusicBackgroundControlWrapper.VolumeDown(mContext); } if (direction==Control.Intents.SWIPE_DIRECTION_LEFT){ MusicBackgroundControlWrapper.Next(mContext); } if (direction==Control.Intents.SWIPE_DIRECTION_RIGHT){ MusicBackgroundControlWrapper.Prev(mContext); } } @Override public void onResume() {//  Bitmap mPicture = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.control_picture); showBitmap(mPicture); } } 


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

MusicBackgroundControlWrapper рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдХреБрдВрдЬреА рдХреЗ рдХреАрд╕реНрдЯреНрд░реЛрдХ рдХреЗ рдЕрдиреБрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╡рд░реНрдЧ рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдФрд░ рдлреЛрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ (рдПрдВрдбреНрд░реЙрдЗрдб 2.3 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде!) - рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред

MusicBackgroundControlWrapper.java
 public class MusicBackgroundControlWrapper { public static void KeyPressDownAndUp(int key,Context context){ long eventtime = SystemClock.uptimeMillis() - 1; Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, key, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); context.sendOrderedBroadcast(downIntent, null); eventtime++; Intent upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, key, 0); upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); context.sendOrderedBroadcast(upIntent, null); } public static void VolumeUp(Context context){ AudioManager audioManager =(AudioManager)context.getSystemService(Context.AUDIO_SERVICE); int max=audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); int current=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if (current<max){ current++; } audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, current,0); } public static void VolumeDown(Context context){ AudioManager audioManager =(AudioManager)context.getSystemService(Context.AUDIO_SERVICE); int current=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if (current>0){ current--; } audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, current,0); } public static void TogglePausePlay(Context context){ KeyPressDownAndUp(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE,context); } public static void Next(Context context){ KeyPressDownAndUp(KeyEvent.KEYCODE_MEDIA_NEXT, context); } public static void Prev(Context context){ KeyPressDownAndUp(KeyEvent.KEYCODE_MEDIA_PREVIOUS, context); } } 


рдШрдбрд╝реА рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо DemoControl2 рдХреЛ DemoControl рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗ, рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рдФрд░ рдЗрдореЗрдЬ onResume () рдкрд░ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдСрдирдЯрдЪ рдореЗрдВ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬрд╛рдВрдЪреЗрдВрдЧреЗред

DemoControl2.java
 public class DemoControl2 extends DemoControl { static final Rect buttonStopPlaySmartWatch2 = new Rect(59, 52, 167, 122); public DemoControl2(Context context, String hostAppPackageName) { super(context, hostAppPackageName); } @Override public void onTouch(final ControlTouchEvent event) {//   if (event.getAction() == Control.Intents.CLICK_TYPE_SHORT) { if (buttonStopPlaySmartWatch2.contains(event.getX(), event.getY())){ MusicBackgroundControlWrapper.TogglePausePlay(mContext); } } } @Override public void onResume() {//  Bitmap mPicture = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.control_picture2); showBitmap(mPicture); } } 


рд╡рд┐рдЬреЗрдЯ


рддреЛ рд╡рд┐рдЬреЗрдЯред рд╡рд┐рд╣рд┐рдд рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдШрдбрд╝реА рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП 92x92 рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЙрдЪреНрдЪ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди ( 128x110 рддрдХ ) рддрдХ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рд╢реИрд▓реА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдорд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред

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

DemoWidget.java
 public class DemoWidget extends WidgetExtension { public DemoWidget(Context context, String hostAppPackageName) { super(context, hostAppPackageName); } @Override public void onStartRefresh() { //    / . showBitmap(new DemoWidgetImage(mContext).getBitmap()); } @Override public void onStopRefresh() { //    .     ,         . } @Override public void onTouch(final int type, final int x, final int y) { if (!SmartWatchConst.ACTIVE_WIDGET_TOUCH_AREA.contains(x, y)) { //     -    return; } //  (  )     if (type == Widget.Intents.EVENT_TYPE_SHORT_TAP || type==Widget.Intents.EVENT_TYPE_LONG_TAP) { Intent intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT); intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, mContext.getPackageName()); intent.setPackage(mHostAppPackageName); mContext.sendBroadcast(intent, Registration.HOSTAPP_PERMISSION); } } } 


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

DemoWidgetImage.java
 public class DemoWidgetImage extends SmartWatchWidgetImage { public DemoWidgetImage(Context context) { super(context); setInnerLayoutResourceId(R.layout.music_widget_image); } @Override protected void applyInnerLayout(LinearLayout innerLayout) { //       -  . . } } 


рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд┐рдВрдбреЛ


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

DemoConfigActivity.java
 public class DemoConfigActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.config); } } 

config.xml
 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text=" " android:id="@+id/textView" android:layout_gravity="center_horizontal"/> </LinearLayout> 


Google Play рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ


рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЛрд░ рдореЗрдВ рдШрдбрд╝реА рдкреНрд░рдмрдВрдзрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ Google рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд╛рда рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

рдЖрдорддреМрд░ рдкрд░, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдШрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реЗрдЯ рдХрд░реЗрдВ, рд╢реБрд░реВ рди рдХрд░реЗрдВ рдФрд░ рдПрдХ рдиреНрдпреВрдирддрдо рдЪрд┐рд╣реНрди рдбрд╛рд▓реЗрдВ, рд╣рд╛рдВред рдЗрд╕рдХреА рдЖрджрдд рдбрд╛рд▓ рд▓реЗрдВ, рдпрд╣ Google Play рдХреА рджреБрдирд┐рдпрд╛ рд╣реИ! рд▓реЗрдХрд┐рди рдореВрд▓реНрдпрд╛рдВрдХрди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рджреБрдирд┐рдпрд╛ рдереЛрдбрд╝реА рдмреЗрд╣рддрд░ рд╣реЛ рд░рд╣реА рд╣реИ, рд╣реИ рдирд╛ ...?

рдирдореВрдирд╛ рдЖрд╡реЗрджрди рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ




рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо






рдПрдХ рд▓реЗрдЦ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб


github.com/Newbilius/smartwatch_habra_demo

рд╕реЛрдиреА рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рдордиреЗ рд╕реНрд░реЛрдд


developer.sonymobile.com/knowledge-base/sony-add-on-sdk

рдФрд░ рдлрд┐рд░, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдШрдбрд╝реА рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рджреЗрдЦреЗрдВ (рдкреВрд░реНрдг рдкрде рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рд╕реЗрдВрд╕рд░ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреЛ "рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд" рдФрд░ рд░реБрдЪрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рд╣реИ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред

PS рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ Google Play рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╛рд▓реЗ, рд▓реЗрдХрд┐рди рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рд▓реЛрдЧ, рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ рдпрд╛ рд╕рдорд╛рди рдХрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред

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

Source: https://habr.com/ru/post/In210898/


All Articles