Android 5.0 Screen pinning画面固定機能

10796 ワード

2015.03.13更新
うん、先日android 5.1が出てきたのを見て、Screen pinningの部分が変わって、具体的に何を変えたのかまだ見ていません.
この一時的に冷たい機能は、この文章を見ることができれば、あなたはまだ少し理解していることを示しています.
スクリーン固定はandroid 5.0の新機能で、そのApiは以下のように紹介されています.
私が重要なのは、スクリーンを開いて固定すると、通知欄やステータスバーが非表示になり、homeキーやrecentキーが無効になり(単独で押すと無効になります)、他のactivityを起動しないことです.
つまり、あなたはこのアプリケーションの内部でしか仕事をすることができません.例えば、携帯電話を他の人に貸すときにこの機能を使うことができます.
この「まだ完備していない」機能の消極的な役割については、文末で少し話します.
-------------------------------Apis-------------------------------------------
Screen pinning
Android 5.0 introduces a new screen pinning API that lets you temporarily restrict users from leaving your task or being interrupted by notifications. This could be used, for example, if you are developing an education app to support high stakes assessment requirements on Android, or a single-purpose or kiosk application. Once your app activates screen pinning, users cannot see notifications, access other apps, or return to the home screen, until your app exits the mode.
There are two ways to activate screen pinning:
  • Manually: Users can enable screen pinning in Settings > Security > Screen Pinning, and select the tasks they want to pin by touching the green pin icon in the recents screen.
  • Programmatically: To activate screen pinning programmatically, call  startLockTask()  from your app. If the requesting app is not a device owner, the user is prompted for confirmation. A device owner app can call the  setLockTaskPackages()  method to enable apps to be pinnable without the user confirmation step.

  • When task locking is active, the following behavior happens:
  • The status bar is blank, and user notifications and status information are hidden.
  • The Home and Recent Apps buttons are hidden.
  • Other apps cannot launch new activities. 
  • The current app can start new activities, as long as doing so does not create new tasks.
  • When screen pinning is invoked by a device owner, the user remains locked to your app until the app calls  stopLockTask() .
  • If screen pinning is activity by another app that is not a device owner or by the user directly, the user can exit by holding both the Back and Recent buttons.ソース:-------------------------reference-------------------------------------------------         public void startLockTask ()Added in API level 21Request to put this Activity in a mode where the user is locked to the current task. This will prevent the user from launching other apps, going to settings, or reaching the home screen. If  isLockTaskPermitted(String)  returns true for this component then the app will go directly into Lock Task mode. The user will not be able to exit this mode until  stopLockTask()  is called. If  isLockTaskPermitted(String)  returns false then the system will prompt the user with a dialog requesting permission to enter this mode. When entered through this method the user can exit at any time through an action described by the request dialog. Calling stopLockTask will also exit the mode.ソース:          public void stopLockTask ()Added in API level 21Allow the user to switch away from the current task. Called to end the mode started by  startLockTask() . This can only be called by activities that have successfully called startLockTask previously. This will allow the user to exit this app and move onto other activities.ソース:--------------------------support------------------------------------------------Use screen pinningThis information applies only to devices running Android 5.0 and higher.You can set your device to only show a certain app's screen using screen pinning, and some apps may ask you if you want to use screen pinning.Screen pinning can be handy if you want to play a game without accidentally minimizing the app if you touch the Home button. Turn on screen pinning in your device's settings app. Then follow the instructions below to pin a screen for a specific app.Turn screen pinning on or offPin a screenUnpin a screenカスタマイズボタン:phoneWindowManager.JAvaでは特に仮想キーのない携帯電話では、ボタンをカスタマイズして画面の固定を解除する可能性が高い.コンパイルすると:Install:out/target/product/msm 8916_に出力されます.64/system/framework/android.policy.jar--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------また、スクリーンの固定アプリが「ダイヤル」であれば、電話をかけることができておめでとうございますが、他のActivityを起動してはいけないので、ダイヤルしているインタフェースと通話しているインタフェースが見えません.これは電話を切ることができないことを意味します.over.
  • If you required that the lock screen show after an app is unpinned, you will need to enter your pattern, PIN, or password.ソース:図は掛けていませんが*壁をひっくり返すと見えます.------------------------------------スクリーン固定に関する実装:Activity StackSupervisor.JAva固定
     case LOCK_TASK_START_MSG: {
                        // When lock task starts, we disable the status bars.
                        try {
                            if (mLockTaskNotify == null) {
                                mLockTaskNotify = new LockTaskNotify(mService.mContext);
                            }
                            mLockTaskNotify.show(true);
                            mLockTaskIsLocked = msg.arg2 == 0;
                            if (getStatusBarService() != null) {
                                int flags =
                                        StatusBarManager.DISABLE_MASK ^ StatusBarManager.DISABLE_BACK;
                                if (!mLockTaskIsLocked) {
                                    flags ^= StatusBarManager.DISABLE_HOME
                                            | StatusBarManager.DISABLE_RECENT;
                                }
                                getStatusBarService().disable(flags, mToken,
                                        mService.mContext.getPackageName());
                            }
                            mWindowManager.disableKeyguard(mToken, LOCK_TASK_TAG);
                            if (getDevicePolicyManager() != null) {
                                getDevicePolicyManager().notifyLockTaskModeChanged(true,
                                        (String)msg.obj, msg.arg1);
                            }
                        } catch (RemoteException ex) {
                            throw new RuntimeException(ex);
                        }
                     } break;
    固定解除
    case LOCK_TASK_END_MSG: {
                        // When lock task ends, we enable the status bars.
                        try {
                            if (getStatusBarService() != null) {
                                getStatusBarService().disable(StatusBarManager.DISABLE_NONE, mToken,
                                        mService.mContext.getPackageName());
                            }
                            mWindowManager.reenableKeyguard(mToken);
                            if (getDevicePolicyManager() != null) {
                                getDevicePolicyManager().notifyLockTaskModeChanged(false, null,
                                        msg.arg1);
                            }
                            if (mLockTaskNotify == null) {
                                mLockTaskNotify = new LockTaskNotify(mService.mContext);
                            }
                            mLockTaskNotify.show(false);
                            try {
                                boolean shouldLockKeyguard = Settings.System.getInt(
                                        mService.mContext.getContentResolver(),
                                        Settings.System.LOCK_TO_APP_EXIT_LOCKED) != 0;
                                if (!mLockTaskIsLocked && shouldLockKeyguard) {
                                    mWindowManager.lockNow(null);
                                    mWindowManager.dismissKeyguard();
                                    new LockPatternUtils(mService.mContext)
                                            .requireCredentialEntry(UserHandle.USER_ALL);
                                }
                            } catch (SettingNotFoundException e) {
                                // No setting, don't lock.
                            }
                        } catch (RemoteException ex) {
                            throw new RuntimeException(ex);
                        }
                    } break;
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------そしてandroidを追加します.permission.MANAGE_ACTIVITY_STACKS権限.
    IActivityManager activityManager = ActivityManagerNative.getDefault();
      if(activityManager != null && activityManager.isInLockTaskMode()){
         activityManager.stopLockTaskModeOnCurrent();
      }
  • When you're on the pinned screen, touch and hold Overview  and Back  at the same time.
  • Release both buttons and the screen will be unpinned.
  • Make sure that screen pinning is enabled on your device.
  • Open an app and go to the screen you want to pin.
  • Touch Overview  on your device.
  • Swipe up to reveal the pin icon  on the bottom right corner of your selected screen.
  • Touch the pin icon .
  • If you want the lock screen to appear after an app is unpinned, check the box next to "Ask for unlock pattern before unpinning."
  • Touch Start.
  • Open your device's Settings menu .
  • Under "Personal,"touch Security.
  • Under "Advanced,"touch Screen pinning.
  • Move the switch on or off.