{"id":220689,"date":"2014-04-24T15:17:03","date_gmt":"2014-04-24T11:17:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=220689"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=220689","title":{"rendered":"<span class=\"post_title\">\u041a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043b\u043e\u043a\u0435\u0440<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/5d4\/4ee\/9ad\/5d44ee9ad83e43dfafc40c41ca16a1ad.png\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442 \u0445\u0430\u0431\u0440\u0430\u0441\u0442\u0430\u0440\u043e\u0436\u0438\u043b\u0430\u043c \u043e\u0442 \u0445\u0430\u0431\u0440\u0430\u043d\u043e\u0432\u0438\u0447\u043a\u0430. \u0420\u043e\u0432\u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043b\u043e\u043a\u0435\u0440 \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0438\u0447\u043a\u0430 Samsung Galaxy Gio \u0432 \u0441\u0442\u0438\u043b\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0442\u043e\u0433\u0434\u0430 Samsung Galaxy s3. \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u043b\u0438\u0448\u044c \u0442\u043e, \u0447\u0442\u043e \u0432 Google Play \u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0439 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c \u043c\u043e\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041d\u0430\u0447\u043d\u0443 \u0438\u0437\u0434\u0430\u043b\u0435\u043a\u0430. \u041c\u043d\u043e\u0433\u0438\u0435 \u0445\u0432\u0430\u043b\u044f\u0442 Android \u0437\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u044c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b. \u0427\u0442\u043e \u0442\u0443\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c? \u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u041e\u0421, \u044d\u0442\u043e, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0442\u0430\u043a, \u043d\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 Android \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u041b\u043e\u043a\u0441\u043a\u0440\u0438\u043d (\u0432 Android \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f keyguard) \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b: \u043f\u043e\u0447\u0435\u043c\u0443 Google \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0441 \u043d\u0438\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0441 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430\u043c\u0438, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u0438\u0430\u043b\u043e\u0433 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043b\u043e\u043a\u0435\u0440\u0430\u043c\u0438 \u0438 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e? \u0413\u0434\u0435-\u0442\u043e \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u043c\u043e\u0437\u0433\u0430 \u0442\u0438\u0445\u0438\u043c \u043d\u0435\u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0433\u043e\u043b\u043e\u0441\u043e\u043c \u043a\u0442\u043e-\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442: \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c Google (Android Ink. \u0435\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u043d\u0435\u0435) \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u0442\u0430\u043a \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e\u0442 \u0433\u043e\u043b\u043e\u0441 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u0440\u0430\u0432 \u0438 \u043c\u043d\u043e\u0433\u0438\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043b\u043e\u043a\u0435\u0440\u043e\u0432 \u0438 \u043c\u043d\u0435 (\u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u043f\u0440\u0438\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u043a \u0438\u0445 \u0447\u0438\u0441\u043b\u0443) \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u0438 \u043d\u0435 \u043e\u0434\u0438\u043d.<\/p>\n<h4>\u0418\u0437\u0443\u0447\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438<\/h4>\n<p>  \u041d\u0430\u0447\u0430\u043b \u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u043b\u044e\u0441\u043e\u0432 Android \u2013 \u0438\u0437 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432. \u042f \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0435\u0445 \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 2,5 \u0433\u043e\u0434\u0430 \u0441\u0438\u0434\u044f\u0442 \u043d\u0430 \u0441\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 (2.3.6), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438\u0437\u0443\u0447\u0430\u043b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435. \u041a\u043b\u0430\u0441\u0441\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u044d\u043a\u0440\u0430\u043d\u0430, \u043b\u0435\u0436\u0430\u0442 \u0432 android.policy.jar, \u0447\u0442\u043e \u0432 system\/framework. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0442\u0438 \u00ab\u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430\u00bb, \u0442.\u0435. \u0433\u0434\u0435 \u0438 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u043e\u043a\u0435\u0440. \u0418\u0441\u043a\u0430\u043b <a href=\"https:\/\/github.com\/android\/platform_frameworks_policies_base\/tree\/master\/phone\/com\/android\/internal\/policy\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0412 \u043a\u043b\u0430\u0441\u0441\u0435 PhoneWindowManager.java \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 screenTurnedOff(int why), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 KeyguardViewMediator. \u041f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0432, \u043a\u0442\u043e \u043a\u043e\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442, \u044f \u043d\u0430\u0448\u0435\u043b \u043c\u0435\u0442\u043e\u0434 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 KeyguardViewManager, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e View \u0441\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043b\u043e\u043a\u0435\u0440\u0430.<\/p>\n<pre><code class=\"java\">public synchronized void show() { \tif (DEBUG) Log.d(TAG, &quot;show(); mKeyguardView==&quot; + mKeyguardView);  \tif (mKeyguardHost == null) { \t\tif (DEBUG) Log.d(TAG, &quot;keyguard host is null, creating it...&quot;);  \t\tmKeyguardHost = new KeyguardViewHost(mContext, mCallback);  \t\tfinal int stretch = ViewGroup.LayoutParams.MATCH_PARENT; \t\tint flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN \t\t\t| WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER \t\t\t| WindowManager.LayoutParams.FLAG_KEEP_SURFACE_WHILE_ANIMATING \t\t\t\/*| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN \t\t\t| WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR*\/ ; \t\tif (!mNeedsInput) { \t\t\tflags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; \t\t} \t\tWindowManager.LayoutParams lp = new WindowManager.LayoutParams( \t\t\tstretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD, \t\t\tflags, PixelFormat.TRANSLUCENT); \t\tlp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN; \t\tlp.windowAnimations = com.android.internal.R.style.Animation_LockScreen; \t\tlp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; \t\tlp.setTitle(&quot;Keyguard&quot;); \t\tmWindowLayoutParams = lp; \t \t\tmViewManager.addView(mKeyguardHost, lp); \t}  \tif (mKeyguardView == null) { \t\tif (DEBUG) Log.d(TAG, &quot;keyguard view is null, creating it...&quot;); \t\tmKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mUpdateMonitor, this); \t\tmKeyguardView.setId(R.id.lock_screen); \t\tmKeyguardView.setCallback(mCallback);  \t\tfinal ViewGroup.LayoutParams lp = new FrameLayout.LayoutParams( \t\tViewGroup.LayoutParams.MATCH_PARENT, \t\tViewGroup.LayoutParams.MATCH_PARENT);  \t\tmKeyguardHost.addView(mKeyguardView, lp);  \t\tif (mScreenOn) { \t\t\tmKeyguardView.onScreenTurnedOn(); \t\t} \t}  \tmKeyguardHost.setVisibility(View.VISIBLE); \tmKeyguardView.requestFocus(); } <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0436, \u0432\u0441\u0435 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u2013 \u043f\u0440\u043e\u0441\u0442\u043e. \u0420\u0435\u0448\u0438\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u2013 \u043d\u0435\u0442 \u043d\u0443\u0436\u043d\u043e\u0433\u043e permission. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0432, \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 <a href=\"http:\/\/developer.android.com\/intl\/ru\/reference\/android\/Manifest.permission.html\">\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/a>: SYSTEM_ALERT_WINDOW \u0438 INTERNAL_SYSTEM_WINDOW. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e.<\/p>\n<p>  \u0412\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u043a \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u0430 PhoneWindowManager.java:  <\/p>\n<pre><code class=\"java\">public int checkAddPermission(WindowManager.LayoutParams attrs) { \tint type = attrs.type;          \tif (type &lt; WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW || type &gt; WindowManager.LayoutParams.LAST_SYSTEM_WINDOW) { \t\treturn WindowManagerImpl.ADD_OKAY; \t} \tString permission = null; \tswitch (type) { \t\tcase TYPE_TOAST: \t\t\t\/\/ XXX right now the app process has complete control over \t\t\t\/\/ this...  should introduce a token to let the system \t\t\t\/\/ monitor\/control what they are doing. \t\t\tbreak; \t\tcase TYPE_INPUT_METHOD: \t\tcase TYPE_WALLPAPER: \t\t\t\/\/ The window manager will check these. \t\t\tbreak; \t\tcase TYPE_PHONE: \t\tcase TYPE_PRIORITY_PHONE: \t\tcase TYPE_SYSTEM_ALERT: \t\tcase TYPE_SYSTEM_ERROR: \t\tcase TYPE_SYSTEM_OVERLAY: \t\t\tpermission = android.Manifest.permission.SYSTEM_ALERT_WINDOW; \t\t\tbreak; \t\tdefault: \t\t\tpermission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; \t} \tif (permission != null) { \t\tif (mContext.checkCallingOrSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { \t\t\treturn WindowManagerImpl.ADD_PERMISSION_DENIED; \t\t} \t} \treturn WindowManagerImpl.ADD_OKAY; } <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u043a\u043d\u0430 TYPE_KEYGUARD \u043d\u0443\u0436\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0435 \u0438\u0437 \u043c\u043e\u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0417\u0430\u0434\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0442\u0435\u043b\u0430 \u043d\u0430\u0447\u0430\u043b \u043e\u0449\u0443\u0449\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u044f \u0441\u0435\u0431\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b. \u0420\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e permission. \u0412\u043e\u0442 \u0432\u044b\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437 AndroidManifest.xml \u043f\u0430\u043a\u0435\u0442\u0430 framework-res.apk.<\/p>\n<pre><code class=\"xml\">&lt;permission android:label=&quot;@string\/permlab_internalSystemWindow&quot; android:name=&quot;android.permission.INTERNAL_SYSTEM_WINDOW&quot; android:protectionLevel=&quot;signature&quot; android:description=&quot;@string\/permdesc_internalSystemWindow&quot; \/&gt; <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u043e\u043d\u0430 \u2013 \u0447\u0435\u0440\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430 \u0432 \u0436\u0438\u0437\u043d\u0438. \u0412\u0435\u0434\u044c \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u00absignature\u00bb \u2013 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u043c\u0438\u0448\u043d \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043a\u0435\u0442, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043c \u0436\u0435 \u043a\u043b\u044e\u0447\u043e\u043c, \u0447\u0442\u043e \u0438 \u043f\u0430\u043a\u0435\u0442, \u0432\u044b\u0434\u0430\u0432\u0448\u0438\u0439 \u044d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 framework-res.apk). \u041b\u0430\u0434\u043d\u043e, \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0432.<\/p>\n<h4>\u0412\u0435\u0440\u0441\u0438\u044f \u043e\u0434\u0438\u043d<\/h4>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c activity \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043b\u043e\u043a\u0441\u043a\u0440\u0438\u043d\u0430. \u041d\u0430 stackoverflow \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"java\">@Override public void onAttachedToWindow(){\t\t \tgetWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); \tsuper.onAttachedToWindow(); } <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434. \u0423 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438: \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 API11 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 (<a href=\"http:\/\/stackoverflow.com\/questions\/7457730\/preventing-status-bar-expansion\">\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u0441\u0442\u0435\u043a\u0430<\/a> \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u043c\u043e\u0433\u043b\u043e) \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435. \u041f\u043e\u0432\u0435\u0440\u0445 \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http:\/\/developer.android.com\/intl\/ru\/reference\/android\/view\/WindowManager.html\">WindowManager<\/a> \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 View, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 TouchEvent. \u0412\u043e\u0442 \u0441\u043b\u0443\u0436\u0431\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0430\u044f \u044d\u0442\u043e:<\/p>\n<pre><code class=\"java\">public class StatusbarService extends Service { \t \tView v; \t \t@Override \tpublic void onStart(Intent intent, int id) { \t\tsuper.onStart(intent, id); \t\tBundle e = intent.getExtras(); \t\tif(e != null){ \t\t\tint statusBarHeight = (Integer) e.get(&quot;SBH&quot;); \t\t\tWindowManager.LayoutParams lp = new WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT, statusBarHeight, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT); \t\t\tlp.gravity = Gravity.TOP; \t\t\tWindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); \t\t\tv = new View(getBaseContext()); \t\t\twm.addView(v, lp); \t\t} \t} \t \t@Override \tpublic void onDestroy() { \t\tsuper.onDestroy(); \t\tWindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); \t\twm.removeView(v); \t} \t \t@Override \tpublic IBinder onBind(Intent arg0) { \t\treturn null; \t} } <\/code><\/pre>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e, \u043d\u0430 Gingerbread \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e. \u041d\u0430 4pda, \u043a\u0443\u0434\u0430 \u044f \u043e\u043f\u0440\u043e\u043c\u0435\u0442\u0447\u0438\u0432\u043e \u0432\u044b\u043b\u043e\u0436\u0438\u043b \u0441\u0432\u043e\u0435 \u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u043c\u043e\u0439 \u043b\u043e\u043a\u0435\u0440 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u043d\u0438\u0445 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0430. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 HOME \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u043e\u0439 \u043b\u0430\u0443\u043d\u0447\u0435\u0440-\u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0443. \u0415\u0441\u043b\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043b\u043e\u043a\u0435\u0440 \u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 onCreate(), \u0442.\u0435. \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 HOME \u043d\u0438 \u043a \u0447\u0435\u043c\u0443 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442. \u0415\u0441\u043b\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043b\u043e\u043a\u0435\u0440 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u043c\u043e\u0439 \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0442\u0443\u0442 \u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043b\u0430\u0443\u043d\u0447\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u043a\u0430\u0437\u0430\u043b \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u043e\u0434 \u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0438:  <\/p>\n<pre><code class=\"java\">public class HomeActivity extends Activity { \t \t@Override \tpublic void onCreate(Bundle savedInstanceState) { \t\tsuper.onCreate(savedInstanceState); \t\tif(MainService.unlocked != false){ \t\t\ttry{ \t\t\t\tSharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); \t\t\t\tString pn = pref.getString(&quot;settings_launcher_pn&quot;, &quot;&quot;); \t\t\t\tString an = pref.getString(&quot;settings_launcher_an&quot;, &quot;&quot;); \t\t\t\tIntent launch = new Intent(Intent.ACTION_MAIN); \t\t\t\tlaunch.addCategory(Intent.CATEGORY_HOME); \t\t\t\tlaunch.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); \t\t\t\tlaunch.setClassName(pn, an); \t\t\t\tstartActivity(launch); \t\t\t} catch(Exception e){ \t\t\t\tIntent i = null; \t\t\t\tPackageManager pm = getPackageManager(); \t\t\t\tfor(ResolveInfo ri:pm.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY)){ \t\t\t\t\tif(!getPackageName().equals(ri.activityInfo.packageName)){ \t\t\t\t\t\ti = new Intent().addCategory(Intent.CATEGORY_HOME).setAction(Intent.ACTION_MAIN).addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS).setClassName(ri.activityInfo.packageName, ri.activityInfo.name); \t\t\t\t\t} \t\t\t\t} \t\t\t\tif(i != null) startActivity(i); \t\t\t} \t\t} \t\tfinish(); \t} } <\/code><\/pre>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/ad7\/baa\/3f8\/ad7baa3f88f248ebaf3b96c4c9ec8995.png\"\/> <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/2cd\/720\/783\/2cd72078369c40468d4ca7fa28335d50.png\"\/><\/p>\n<p>  \u042d\u0442\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b \u0435\u0437\u0434\u0438\u043b\u0438 \u0434\u043e\u043b\u0433\u043e \u0438 \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u043e\u043a\u0430 \u044f \u043d\u0435 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439\u00bb \u043b\u043e\u043a\u0441\u043a\u0440\u0438\u043d, \u0438 \u0443\u0436\u0435 \u0432 \u0441\u0442\u0438\u043b\u0435 Samsung Galaxy S4.<\/p>\n<h4>\u0412\u0435\u0440\u0441\u0438\u044f \u0434\u0432\u0430<\/h4>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043b\u043e\u043a\u0435\u0440? \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u044d\u043a\u0440\u0430\u043d\u0430. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043b\u0443\u0436\u0431\u0443, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0443\u044e BroadcastReceiver, \u0442.\u043a. \u0438\u0437 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p>  1. \u0421\u043b\u0443\u0436\u0431\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c BroadcastReseiver \u0441 IntentFilter \u00abandroid.intent.action.BOOT_COMPLETED\u00bb. \u0415\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u041d\u041e: \u0441\u043b\u0443\u0436\u0431\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u044d\u043a\u0440\u0430\u043d\u0430. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e Android \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0432\u0432\u043e\u0434\u0430 PIN-\u043a\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0443\u0436\u0431\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 PIN \u0431\u0443\u0434\u0435\u043d \u0432\u0432\u0435\u0434\u0435\u043d. <\/p>\n<p>  \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043d\u0430 \u0447\u0442\u043e \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043c\u043e\u0435\u0439 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438:  <\/p>\n<pre><code class=\"java\">public class BootReceiver extends BroadcastReceiver { \t@Override \tpublic void onReceive(Context context, Intent intent) { \t\tTelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);  \t\tif(PreferenceManager.getDefaultSharedPreferences(context).getBoolean(&quot;unlock_screen_enable&quot;, false)){ \t\t\tif(tm.getSimState() != TelephonyManager.SIM_STATE_PIN_REQUIRED && tm.getSimState() != TelephonyManager.SIM_STATE_PUK_REQUIRED){ \t\t\t\tcontext.startService(new Intent(context, KeyguardService.class)); \t\t\t} else { \t\t\t\tAlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); \t            Intent intentToFire = new Intent(context, BootReceiver.class); \t            PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intentToFire, 0);             \t            alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, alarmIntent); \t\t\t} \t\t} \t} } <\/code><\/pre>\n<p>  2. \u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 PhoneWindowManager \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432 \u043c\u0435\u0442\u043e\u0434 screenTurnedOff(int why) \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f why, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f 3 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: <br \/>   \u2014 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 (\u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u043b\u043e\u043a\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439),<br \/>   \u2014 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043f\u0440\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f (\u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430),<br \/>   \u2014 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438.<br \/>  \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0443\u0436\u0431\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u0438 \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0437\u0432\u043e\u043d\u043a\u0435 \u0438\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u044d\u043a\u0440\u0430\u043d \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0412\u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u0441\u043b\u0443\u0436\u0431\u044b:  <\/p>\n<pre><code class=\"java\">public class KeyguardService extends Service { \t \tKeyguardMediator keyguardMediator; \tKeyguardManager.KeyguardLock keyguardLock; \tboolean telephone = false; \/\/false - no call, true - in call \tboolean wasLocked = false; \t \t@Override \tpublic void onCreate() { \t\tsuper.onCreate(); \t\tTelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);  \t\ttelephonyManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); \t\tkeyguardLock = ((KeyguardManager)getSystemService(KEYGUARD_SERVICE)).newKeyguardLock(&quot;Custom keyguard by Arriva&quot;); \t\tkeyguardLock.disableKeyguard(); \t\tIntentFilter filter = new IntentFilter(); \t\tfilter.addAction(Intent.ACTION_SCREEN_OFF); \t\tregisterReceiver(receiver, filter); \t\tkeyguardMediator = new KeyguardMediator(this); \t} \t \t@Override \tpublic void onDestroy() { \t\tsuper.onDestroy(); \t\tunregisterReceiver(receiver); \t\tkeyguardLock.reenableKeyguard(); \t\tkeyguardLock = null; \t\tkeyguardMediator.destroy(); \t}  \tvoid changeTelephoneState(int state){ \t\tif(state == TelephonyManager.CALL_STATE_IDLE){ \t\t\ttelephone = false; \t\t\tif(wasLocked){ \t\t\t\twasLocked = false; \t\t\t\tkeyguardMediator.visibility(true); \t\t\t} \t\t} else { \t\t\ttelephone = true; \t\t\tif(keyguardMediator.isShowing){ \t\t\t\twasLocked = true; \t\t\t\tkeyguardMediator.visibility(false); \t\t\t} \t\t} \t} \t \tprivate BroadcastReceiver receiver = new BroadcastReceiver(){ \t\t@Override \t\tpublic void onReceive(Context context, Intent intent) { \t\t\tString settingsLock = PreferenceManager.getDefaultSharedPreferences(context).getString(&quot;screen_lock&quot;, &quot;2&quot;); \t\t\tif(!settingsLock.equals(&quot;1&quot;)){ \t\t\t\tkeyguardMediator.show(); \t\t\t} \t\t} \t}; \t \tclass MyPhoneStateListener extends PhoneStateListener {  \t\t@Override \t\tpublic void onCallStateChanged(int state, String incomingNumber){  \t\t\tsuper.onCallStateChanged(state, incomingNumber);  \t\t\tchangeTelephoneState(state); \t\t} \t} } <\/code><\/pre>\n<p>  \u0418\u0434\u0435\u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c activity, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WindowManager \u0431\u044b\u043b\u0430 \u0435\u0449\u0435 \u0441\u0438\u043b\u044c\u043d\u0430. \u0418\u0437 \u043f\u044f\u0442\u0438 \u0442\u0438\u043f\u043e\u0432 \u043e\u043a\u043e\u043d, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 SYSTEM_ALERT_WINDOW, \u043c\u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u0435\u043b TYPE_SYSTEM_ALERT. \u041f\u0440\u0438\u0447\u0435\u043c \u0443 \u043d\u0435\u0433\u043e \u0431\u044b\u043b\u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430: \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0430 Gingerbread) \u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 HOME (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430 Jelly Bean).<\/p>\n<p>  \u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c \u0437\u0432\u0435\u043d\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u0443\u0436\u0431\u043e\u0439 \u0438 KeyguardView \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 KeyguardMediator:  <\/p>\n<pre><code class=\"java\">public class KeyguardMediator { \t \tWindowManager windowManager; \tKeyguardHost keyguardHost; \tKeyguardView keyguardView; \tContext context; \tboolean isShowing; \tString[] prefShortcutsArray; \tString prefScreenLock; \tString prefUnlockEffect; \tString prefPatternPassword; \tboolean prefMultipleWidgets; \tboolean prefShortcuts; \tboolean prefHelpText; \tboolean prefPatternVisible; \tboolean prefWallpaper; \tboolean drawWallpaperView; \tboolean drawWallpaperViewSqueeze; \t \tpublic KeyguardMediator(Context con){ \t\tcontext = con; \t\twindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); \t\t\/\/ \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043f\u0440\u043e\u0447\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u0442 \u0435\u0449\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \t} \t \tvoid onResume(){ \t\tif(keyguardView != null){ \t\t\tkeyguardView.onResume(); \t\t} \t} \t \tvoid onPause(){ \t\tif(keyguardView != null){ \t\t\tkeyguardView.onPause(); \t\t} \t} \t \tvoid show(){ \t\tif(isShowing){ \t\t\tvisibility(true); \t\t\treturn; \t\t} \t\tkeyguardView = new KeyguardView(context, this); \t\tisShowing = true; \t\tint flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN; \t\tif(!drawWallpaperView) { \t\t\tflags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; \t\t} \t\tint format = PixelFormat.OPAQUE; \t\tif(!drawWallpaperView) { \t\t\tformat = PixelFormat.TRANSLUCENT; \t\t} \t\tWindowManager.LayoutParams lp = new WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, flags, format); \t\tif(drawWallpaperView){ \t\t\tlp.windowAnimations = android.R.style.Animation_Toast; \t\t\t\/\/ \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \t\t} \t\tlp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; \t\tlp.setTitle(&quot;Custom keyguard&quot;); \t\tkeyguardHost = new KeyguardHost(context); \t\tkeyguardHost.addView(keyguardView); \t\twindowManager.addView(keyguardHost, lp); \t} \t \tvoid hide(){ \t\tif(!isShowing){ \t\t\treturn; \t\t} \t\tisShowing = false; \t\tkeyguardHost.setVisibility(View.GONE); \t\t\/\/ \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c View \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c, \u0442\u043e\u0433\u0434\u0430 \u043e\u043d \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442 \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \t\twindowManager.removeView(keyguardHost); \t\tkeyguardHost = null; \t\tkeyguardView = null; \t} \t \tvoid visibility(boolean visible){ \t\t\/\/ \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0432\u043e\u043d\u043a\u0430 View \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c \t\tkeyguardHost.setVisibility(visible ? View.VISIBLE : View.GONE); \t\tif(keyguardView != null){ \t\t\tif(visible){ \t\t\t\tkeyguardView.onResume(); \t\t\t} else { \t\t\t\tkeyguardView.onPause(); \t\t\t} \t\t} \t} \t \tvoid startWidgetPicker(){ \t\t\/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 activity \u0432\u044b\u0431\u043e\u0440\u0430 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \t} \t \tvoid finishWidgetPicker(){ \t\t\/\/ \u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 layout'\u0443 \u0441 \u0432\u0438\u0434\u0436\u0435\u0442\u0430\u043c\u0438 \t} \t \tvoid destroy(){ \t\tif(keyguardHost != null){ \t\t\twindowManager.removeView(keyguardHost); \t\t\tkeyguardHost = null; \t\t\tkeyguardView = null; \t\t} \t} } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439, \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0431\u0443\u0434\u043d\u0438\u0447\u043d\u043e\u0439. \u041d\u0430 \u043c\u043e\u0439 \u043b\u043e\u043a\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044f\u0440\u043b\u044b\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e) \u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u044b (\u0430 \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0441\u0442\u0430\u043b\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0435\u0439:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/59f\/554\/f7e\/59f554f7e41b43cfb64b33ae6fffb313.png\"\/> <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/5ff\/a2d\/6bd\/5ffa2d6bd2ca4773a8b28543427d4a53.png\"\/><\/p>\n<p>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/Who13mx0LwM?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u043f\u0438\u0430\u0440\u0438\u0442\u044c. \u042d\u0442\u043e \u043d\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043b\u043e\u043a\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0435 \u0432\u044b\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0432\u0430\u0439\u0442\u0430. \u042f \u043b\u0438\u0448\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043f\u043e\u043b\u0435\u043d\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0443 \u043a\u043d\u0438\u0433\u0443 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c Java, \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u0445\u0438\u0442\u0440\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/220689\/\"> http:\/\/habrahabr.ru\/post\/220689\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/5d4\/4ee\/9ad\/5d44ee9ad83e43dfafc40c41ca16a1ad.png\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442 \u0445\u0430\u0431\u0440\u0430\u0441\u0442\u0430\u0440\u043e\u0436\u0438\u043b\u0430\u043c \u043e\u0442 \u0445\u0430\u0431\u0440\u0430\u043d\u043e\u0432\u0438\u0447\u043a\u0430. \u0420\u043e\u0432\u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043b\u043e\u043a\u0435\u0440 \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0438\u0447\u043a\u0430 Samsung Galaxy Gio \u0432 \u0441\u0442\u0438\u043b\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0442\u043e\u0433\u0434\u0430 Samsung Galaxy s3. \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u043b\u0438\u0448\u044c \u0442\u043e, \u0447\u0442\u043e \u0432 Google Play \u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0439 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c \u043c\u043e\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-220689","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=220689"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220689\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=220689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=220689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=220689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}