отключить кнопку «Домой» в леденце программно

Я хочу автоматически отключать кнопки «Домой» и «Питание» после открытия приложения и включать их после нажатия кнопки «Выход» в приложении.

Я добился этого, сделав свое приложение в качестве приложения для запуска, и оно работает до Jellybean (проверено до 4.1.2).

Но одно и то же приложение не работает в версиях KitKat и Lollipop. Я подумал, что использовать технику киоска, чтобы отключить кнопку «Домой» в Lollipop. См. https://sdgsystems.com/blog/implementing-kiosk-mode-android-part-3-android-lollipop, для его достижения требуется приложение владельца устройства и несколько шагов.

Хотя мое приложение предназначено для автоматической блокировки функции кнопки «Домой», оно не работает.

Мои вопросы:

  • Есть ли способ отключить кнопку «Домой» в леденце на палочке?
  • Как добиться этого программно?

Если киоск - это техника, то как сделать ее под мои требования? (Ищу проводника)


person user2625151    schedule 06.11.2015    source источник
comment
Метод запуска приложения не работает? когда вы нажимаете кнопку домой, андроид вызывает лаунчер, чтобы показать, что не должно было измениться   -  person Nanoc    schedule 06.11.2015
comment
Вы уверены, что метод запуска работает в леденце?   -  person user2625151    schedule 06.11.2015
comment
Вы уверены, что установили свое приложение в качестве средства запуска по умолчанию?   -  person m0skit0    schedule 06.11.2015
comment
да, я только что попробовал даже с homekeylocker. Все это прекрасно работает до jellybean.   -  person user2625151    schedule 06.11.2015


Ответы (2)


Сначала извините за поздний ответ. Во-первых, программатор действительно не блокирует кнопку «Домой». Они используют только трюк, чтобы скрыть процесс кнопки «Домой» за экраном блокировки.

Как вы можете это сделать.? просто. Просто используйте окно блокировки экрана в качестве экрана оконного менеджера, поэтому после нажатия кнопки «Домой» экран вашего мобильного телефона не свернется. Это маленькая хитрость, используемая в большинстве приложений блокировки успеха.

и еще одна вещь, как перекрыть верхнюю строку состояния системы окна телефона.

Для этого вы можете использовать такой же код и изменять его по своему усмотрению.

    manager = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE));

localLayoutParams = new WindowManager.LayoutParams();
localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
localLayoutParams.gravity = Gravity.TOP;    

localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|

//WindowManager.LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR |
  WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN |

       // this is to enable the notification to recieve touch events
       //WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN |
        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
       // Draws over status bar
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;


//localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
localLayoutParams.height = (int) (50 *      getResources().getDisplayMetrics().scaledDensity);
localLayoutParams.format = PixelFormat.TRANSPARENT;

view = new customViewGroup(this);

manager.addView(view, localLayoutParams);   

и создайте класс customeVIewGroup, подобный этому.

public class customViewGroup extends ViewGroup {

    public customViewGroup(Context context) {
        super(context);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        Log.v("customViewGroup", "**********Intercepted");
        return true;
    }
}
person hardwork    schedule 23.11.2015

Вот поток, который я предлагаю. Создайте приложение владельца устройства и станьте владельцем устройства либо через NFC bump, либо через adb. Добавьте имя своего пакета в setLockTaskPackage() в приложении владельца устройства.

Теперь в приложении, к которому вы хотите заблокировать устройство, вызовите метод startLockTask(), и ваше устройство будет заблокировано для этого конкретного приложения, пока вы не вызовете stopLockTask().

Вы можете найти информацию об API здесь.

О том, как создать приложение для владельца устройства и руководство, вы можете узнать на веб-сайте Florent Dupont.

person kash    schedule 09.11.2015