Android L screen pinning


屏幕固定是android 5.0 上的新功能 其Api介绍如下:


就是说 你只能在这个应用内部干事情。比如你吧手机借给别人的时候就可以用这个功能 。



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.



     public void startLockTask ()

Added in API level 21
Request 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 21
Allow 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.



Use screen pinning

This 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 off

  1. Open your device's Settings menu .
  2. Under "Personal," touch Security.
  3. Under "Advanced," touch Screen pinning.
  4. Move the switch on or off.

Pin a screen

  1. Make sure that screen pinning is enabled on your device.
  2. Open an app and go to the screen you want to pin.
  3. Touch Overview on your device.
  4. Swipe up to reveal the pin icon on the bottom right corner of your selected screen.
  5. Touch the pin icon .
  6. If you want the lock screen to appear after an app is unpinned, check the box next to "Ask for unlock pattern before unpinning."
  7. Touch Start.

Unpin a screen

  1. When you're on the pinned screen, touch and hold Overview and Back at the same time.
  2. Release both buttons and the screen will be unpinned.
    • If you required that the lock screen show after an app is unpinned, you will need to enter your pattern, PIN, or pa ssword.





        // When lock task starts, we disable the status bars.
        try {
            if (mLockTaskNotify == null) {
                mLockTaskNotify = new LockTaskNotify(mService.mContext);
            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,
            mWindowManager.disableKeyguard(mToken, LOCK_TASK_TAG);
            if (getDevicePolicyManager() != null) {
                        (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,
                        if (getDevicePolicyManager() != null) {
                            getDevicePolicyManager().notifyLockTaskModeChanged(false, null,
                        if (mLockTaskNotify == null) {
                            mLockTaskNotify = new LockTaskNotify(mService.mContext);
                        try {
                            boolean shouldLockKeyguard = Settings.System.getInt(
                                    Settings.System.LOCK_TO_APP_EXIT_LOCKED) != 0;
                            if (!mLockTaskIsLocked && shouldLockKeyguard) {
                                new LockPatternUtils(mService.mContext)
                        } catch (SettingNotFoundException e) {
                            // No setting, don't lock.
                    } catch (RemoteException ex) {
                        throw new RuntimeException(ex);
                } break;


    IActivityManager activityManager = ActivityManagerNative.getDefault();
      if(activityManager != null && activityManager.isInLockTaskMode()){

定制按键在:phoneWindowsManager.java里 尤其是没有虚拟键的手机,很可能要定制按键去解除屏幕固定。

编译后会输出到:Install: out/target/product/msm8916_64/system/framework/android.policy.jar



Write a Comment