Подтвердить что ты не робот

Создание пользовательского LockScreen в android

Я разрабатываю пользовательские lockscreen app.its, работающие нормально в версии 4.0, но выше 4.0, когда мы нажимаем кнопку "домой", приложение останавливается. Есть ли какое-либо решение для этого приложения не будет останавливаться при нажатии кнопки "домой", пока не откроется экран. go locker app)

4b9b3361

Ответ 1

Еще один способ разработки приложения LockScreen - использовать Представления, позвольте мне объяснить это.

Прежде всего, вы можете "отключить" в некоторых устройствах экран блокировки системы, отключив KEYGUARD:

((KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE)).newKeyguardLock("IN").disableKeyguard();

Вы должны поместить эту строку кода в свой Service.

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

public class AutoStart extends BroadcastReceiver {

    public void onReceive(Context arg0, Intent arg1) {
        if(arg1.getAction().equals("android.intent.action.SCREEN_OFF")) {
            Intent localIntent = new Intent(arg0, LockScreen.class);
            localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            localIntent.addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
            arg0.startActivity(localIntent);
        }
    }
}

Если вы прочитали документацию для WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, она объясняет, что это тип внутренних системных окон ошибок, появляется поверх всего, что может. В многопользовательских системах отображается только в пользовательском окне пользователя.

Итак, теперь у вас есть активность поверх всего, но нажатие кнопки HOME выйдет из действия.

Здесь вы увидите Представления. Вы можете раздуть представление из ресурса макета и добавить его в WindowManager как TYPE_SYSTEM_ERROR, так что это будет поверх всего. И поскольку вы можете контролировать, когда удалять этот Вид, лучшее место находится в onDestroy вашего Activity, потому что нажатие кнопки HOME приостанавливает вашу активность, и просмотр будет по-прежнему быть видимым.

public WindowManager winManager;
public RelativeLayout wrapperView;

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
                        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
                        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
                PixelFormat.TRANSLUCENT);
        this.winManager = ((WindowManager)getApplicationContext().getSystemService(WINDOW_SERVICE));
        this.wrapperView = new RelativeLayout(getBaseContext());
        getWindow().setAttributes(localLayoutParams);
        View.inflate(this, R.layout.lock_screen, this.wrapperView);
        this.winManager.addView(this.wrapperView, localLayoutParams);
}

 public void onDestroy()
    {
        this.winManager.removeView(this.wrapperView);
        this.wrapperView.removeAllViews();
        super.onDestroy();
    }

Чтобы избежать появления панели уведомлений, я добавил флаги FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL | FLAG_LAYOUT_IN_SCREEN, чтобы использовать все события указателя.

Не забудьте добавить эти две строки в ваш манифест:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Отсюда вам просто нужно добавить логику вашего приложения Lock Screen, чтобы пользователь мог использовать свой смартфон:)

Ответ 2

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

<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />

То, что я не могу найти, - это способ заменить экран блокировки, и взломать как отключить экран блокировки на телефоне, а использование активности в пользовательской пусковой установке фактически не заменяет lockscreen ^^

Ответ 3

Вы можете использовать метод ниже, чтобы отключить ключ Home в android:

@Override
public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();
}

Ответ 4

Я развиваюсь на Samsung Galaxy S4 5.0, и то, что сработало для меня, просто меняло getWindow().setFlags(..) на getWindow().addFlags(..)

Ответ 5

Я думаю, что в первую очередь вы должны спросить себя, действительно ли вы хотите захватить домашний ключ. Иногда вам это может понадобиться. Но я думаю, что размещение приложения на экране блокировки Android, позволяющее домашнему ключу действовать нормально и позволяя основному экрану блокировки Android заботиться о защите паролем устройства, - это то, что вы действительно хотите во многих случаях (если вы не хотите изменить это делается по умолчанию).
Нижняя строка, позволяющая отображать приложение на экране блокировки Android, довольно близка к написанию собственного пользовательского экрана блокировки. И это явно проще, так как вам не нужно самостоятельно управлять паролями. Не говоря уже о том, что это безопаснее и надежнее, так как вы не захватываете домашний ключ.
Я сделал это так, и он работает очень хорошо. Вы можете увидеть подробности здесь:

показать веб-сайт на экране блокировки Android

Вопрос заключается в отображении веб-сайта на экране блокировки, так как это меня заинтересовало, но ответ более общий, он работает с любым приложением. Вы можете увидеть здесь приложение, которое в Google Play было написано так:

https://play.google.com/store/apps/details?id=com.a50webs.intelnav.worldtime