рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЬрдм рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдЯреИрдВрдбрдмрд╛рдп рдореЛрдб рдпрд╛ рдЪрд╛рд░реНрдЬрд┐рдВрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЧреИрд▓рд░реА рд╕реЗ рдлреЛрдЯреЛ, рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ (рд╕рдорд╛рдЪрд╛рд░, рдлреЛрдЯреЛ, рдФрд░ рдЗрд╕реА рддрд░рд╣) рдпрд╛ рд╕рд┐рд░реНрдл рдПрдиреАрдореЗрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ, рдбрд┐рд╕реНрдкреНрд▓реЗ рд╢реНрд░реЗрдгреА рдореЗрдВ, рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕реЗ рдХрдм рджрд┐рдЦрд╛рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЪрд╛рд░реНрдЬ рдХрд░рддреЗ рд╕рдордпред
рдбреЗрдбреНрд░реАрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди android.service.dreams.DreamService рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИред рдЬрдм рдЖрдк рдПрдХ рдбреНрд░реАрдо рд╕рд░реНрд╡рд┐рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдЬреАрд╡рдирдЪрдХреНрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди рдПрдкреАрдЖрдИ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдорд┐рд▓рддреА рд╣реИред рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдбреНрд░реАрдорд╕реНрд╡реЗрдп рддрд░реАрдХреЗ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ):
- onAttachedToWindow () - рд╢реБрд░реБрдЖрддреА рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рд╕реЗрдЯрдСрдирд╡реЗрдВрдЯ рд╡реНрдпреВ ()
- onDreamingStarted () - рдЬрдм рдбреЗрдбреНрд░реАрдо рд╡рд┐рдВрдбреЛ рдмрдирд╛рдИ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЕрдм рдЖрдк рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- onDreamingStontin () - рдПрдиреАрдореЗрд╢рди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
- onDetachedFromWindow () - onAttachedToWindow () рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣рд░ рдЪреАрдЬ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдЖрдк рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреНрд░реАрдорд╕реНрд╡реЗ рддрд░реАрдХреЗ:
- setContentView () - рдбреЗрдбреНрд░реАрдо рд╕реАрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ setContentView () рдХреА рддрд░рд╣ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MATCH_PARENT рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
- setInteractive (рдмреВрд▓рд┐рдпрди) - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреВрдиреЗ рдкрд░ рдбреЗрдбреНрд░реАрдо рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░реЗ, рддреЛ setInteractive (рдЯреНрд░реВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рд╕реЗрдЯрдлреБрд▓рд╕реНрдХреНрд░реАрди (рдмреВрд▓рд┐рдпрди) - рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдЬреЛ рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИред
- setScreenBright (рдмреВрд▓рд┐рдпрди) - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреА рдкреВрд░реНрдг рдЪрдордХ рд╕реЗрдЯ рдХрд░рддреА рд╣реИред рд╕реЗрдЯрд╕реНрдХреНрд░реАрдирд╕реНрдХреНрд░реАрди (рдЕрд╕рддреНрдп) - рдЪрдордХ рдХреЛ рдиреНрдпреВрдирддрдо рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
рдПрдХ рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ
service
рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app"> <uses-sdk android:targetSdkVersion="17" android:minSdkVersion="17" /> <application> <service android:name=".TestDaydream" android:exported="true" android:label="@string/my_daydream_name"> <intent-filter> <action android:name="android.service.dreams.DreamService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.service.dream" android:resource="@xml/dream_info" /> </service> </application> </manifest>
<meta-data>
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ XML рд╕рдВрд╕рд╛рдзрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ Daydream рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЙрдирдХреА рдкрд╣реБрдВрдЪ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдХреЗ рдирд╛рдо рдХреЗ рдЖрдЧреЗ рд╕реЗрдЯрд┐рдВрдЧ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
<?xml version="1.0" encoding="utf-8"?> <dream xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.app/.ExampleDreamSettingsActivity" />
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╢реЗрдЦрд╝реА рд▓реЛрдЧреЛ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдмрдирд╛рддрд╛ рд╣реИред рдПрдиреАрдореЗрд╢рди рдЯрд╛рдЗрдордЕрдиреАрдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЪрд┐рдХрдиреА рдПрдиреАрдореЗрд╢рди рдХрд╛ рдкреНрд░рднрд╛рд╡ рджреЗрддрд╛ рд╣реИред
public class TestDreamer extends DreamService { @Override public void onDreamingStarted() { super.onDreamingStarted();
рдЖрдЗрдП рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рд╣рдо SDK - 17 рдХреЗ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВрдЧреЗред AndroidManifest.xml рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.habrdreamer" > <uses-permission android:name="android.permission.INTERNET" /> <uses-sdk android:minSdkVersion="17" android:maxSdkVersion="17" android:targetSdkVersion="17"/> <application android:label="HabrDreamer"> <service android:name="ScreensaverHabr" android:exported="true" android:label="ScreensaverHabr"> <intent-filter> <action android:name="android.service.dreams.DreamService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service> <activity android:name="SetURL" android:label="Dream URL" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity> <activity android:name="SetURLInteractive" android:label="Dream URL (Interactive)" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity> </application> </manifest>
рд╣рдорд╛рд░реЗ рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдХрд╛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
package com.example.habrdreamer; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.graphics.PorterDuff; import android.net.Uri; import android.os.BatteryManager; import android.os.Handler; import android.provider.Settings; import android.service.dreams.DreamService; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.widget.TextView; public class ScreensaverHabr extends DreamService { private class LinkLauncher extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); return true; } } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); setContentView(R.layout.screensaver_habr); setFullscreen(true); final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); final String url = prefs.getString("url", "http://habrahabr.ru"); final boolean interactive = prefs.getBoolean("interactive", false); Log.v("WebViewDream", String.format("loading %s in %s mode", url, interactive ? "interactive" : "noninteractive")); setInteractive(interactive); WebView webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new LinkLauncher()); WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true); webview.loadUrl(url); } }
рд╣рдореЗрдВ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдХрд╛ URL рдкрддрд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреВрд╕рд░рд╛, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреНрд▓рд╕ рдХреЗ рд╕рдорд╛рди рдХрд░реЗрдВред
рддреЛ рдкрд╣рд▓реА рдХрдХреНрд╖рд╛ SetURL.java рд╣реИ:
package com.example.habrdreamer; import android.util.Log; import android.content.SharedPreferences.Editor; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.widget.Toast; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.widget.Toast; public class SetURL extends Activity { @Override public void onCreate(Bundle stuff) { super.onCreate(stuff); final Intent intent = getIntent(); final String action = intent.getAction(); String url = intent.getStringExtra(Intent.EXTRA_TEXT); if (url == null) { finish(); } else if (Intent.ACTION_SEND.equals(action)) { set(url); finish(); } } protected void set(String url) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); final Editor editor = prefs.edit(); editor.putString("url", url); editor.putBoolean("interactive", false); editor.commit(); Toast.makeText(this, "WebView dream URL set to: " + url, Toast.LENGTH_SHORT).show(); } }
рдФрд░ рджреВрд╕рд░рд╛ рд╣реИ SetURLInteractive.java:
package com.example.habrdreamer; import android.util.Log; import android.content.SharedPreferences.Editor; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.widget.Toast; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.widget.Toast; public class SetURLInteractive extends Activity { @Override public void onCreate(Bundle stuff) { super.onCreate(stuff); final Intent intent = getIntent(); final String action = intent.getAction(); String url = intent.getStringExtra(Intent.EXTRA_TEXT); if (url == null) { finish(); } else if (Intent.ACTION_SEND.equals(action)) { set(url); finish(); } } protected void set(String url) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); final Editor editor = prefs.edit(); editor.putString("url", url); editor.putBoolean("interactive", true); editor.commit(); Toast.makeText(this, "WebView dream URL set to: " + url, Toast.LENGTH_SHORT).show(); } }
рд╢реИрд▓реА рдлрд╝рд╛рдЗрд▓, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ WebView рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" > </WebView>
рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рд╕рдВрдкрддреНрддрд┐ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ html рдлрд╝рд╛рдЗрд▓ default.html рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╕рдВрджреЗрд╢ рдФрд░ рдЫреЛрдЯреЗ рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦреЗрдВрдЧреЗред
<html> <head> <style> body { background-color: black; color: gray; font-size: 16pt; font-family: "Roboto-Light", Roboto, sans-serif; text-align: center; } #text { margin-left: auto; margin-right: auto; margin-top: 96pt; } </style> </head> <body> <div id="text"> тАЬ (Share)тАЭ, . </div> </body> </html>
рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдм рд╣реИ, рдЖрдк рд╕рдВрдХрд▓рди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ libGDX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред