Показывать диалог с сенсорными событиями через экран блокировки в Android 2.3

Я хочу создать диалог, который будет виден на экране блокировки и может получать сенсорные события. Я построил окно сWindowManager но толькоTYPE_SYSTEM_OVERLAY Флаг отображается над экраном блокировки в ГБ (Android 2.3.7).

Есть ли способ создать системный оверлей, который виден на экране блокировки и может получать сенсорные события в Android 2.3.7?

Была ошибка сFLAG_WATCH_OUTSIDE_TOUCH но я'Я не уверен, как это влияет на меня. Есть идеи?

 Evan Knowles10 дек. 2013 г., 12:07
Предыдущая ссылка на NOD32 'Список заблокированных сайтов.
 Jhih-Wei Liu21 сент. 2013 г., 14:59
Вы можете увидеть здесьhttp://androiddev.orkitra.com/?p=80753 Это'сработало для меня.

Ответы на вопрос(3)

потому что Android не будет показывать экран блокировки за вашей деятельностью по соображениям безопасности, так и для обслуживания.

Ниже мой кодв onStartCommand моего сервиса

WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

View mView = mInflater.inflate(R.layout.score, null);

WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT,
    ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    /* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
    PixelFormat.RGBA_8888);

mWindowManager.addView(mView, mLayoutParams);
 patrick23 мая 2014 г., 12:41
тот'Жаль, мне нужно что-то подобное, к счастью, яудалось показать оверлей при нажатии кнопки в виджете :)
 patrick22 мая 2014 г., 20:24
мне интересно, если вы смогли получать сенсорные события
 venkat23 нояб. 2014 г., 10:11
Большое спасибо. Это помогло мне
 Shirish Herwade23 мая 2014 г., 11:58
@patrick Нет, невозможно получить сенсорные события для любого окна, отображаемого на экране блокировки. Если вы добавите touch-события к нему, то за вашим окном вместо экрана блокировки появится панель запуска. Это сделано в целях безопасности.
Решение Вопроса

что вы можете запускать действие каждый раз, когда устройство заблокировано, без привязки вашего приложения как приложения, привилегированного администратором, программно.

Как только ваше приложение станет приложением с правами администратора, вы можете программно установить пароль и заблокировать экран и затем программно разблокировать его с помощьюДиспетчер политик устройств.

Поверх этого экрана блокировки вы можете программно запустить свою собственную активность и Вы можете создать свой собственный разблокировщик и разблокировать устройство с помощью этого действия, как вы можете получить обратные вызовы черезDeviceAdminReceiver.

Вот хороший пример для этого все, что вам нужно, это создать свою собственную активность после того, как вы вызвали DevicePolicyManager.lockNow (). Затем он появится в верхней части экрана блокировки как обычная активность плюс дополнительный контроль над собственным экраном блокировки.

 Cilenco13 авг. 2013 г., 13:38
Хорошо, вы правы с этим ФЛАГОМ, активность видна на экране блокировки. Но если я хочу установить высоту для действия, чтобы оно не заполняло весь экран, его снова не видно. Я пытался с этим кодом:layout.height = 200; window.setAttributes(layout); Есть ли способ получить это действие перед экраном блокировки?
 M P Mathugama13 авг. 2013 г., 11:26
Вы установили флаг getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); в создании этой деятельности. Иначе оно не появится.
 Cilenco06 авг. 2013 г., 22:10
Спасибо за это. Я проверял это, но это не работает. я добавилstartActivity(new Intent(this, MainActivity.class)) послеdevicePolicyManager.lockNow() но активность не видна на экране блокировки. Я тебя неправильно понял?

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.alertdialog);

А также, Android немного противоречит. Это'очень открытый и как разработчик, у вас есть доступ ко всему, и этоВам решать использовать эти силы для добра или зла. Когда я говорю зло, я неЯ имею в виду вредоносное ПО. Я имею в виду приложения, которые пытаются стать милыми и использовать вещи так, как ониОн предназначен для использования, например, для отправки уведомлений с просьбой больше использовать приложение. Противоречие в том, что ты нена самом деле нет доступа ко всему, есть несколько частей, которые разработчики решили, что они настолько важны, что приложение не можетне связывайтесь с ними. Экран блокировки является одной из тех частей. Вы можете заменить свое домашнее приложение так, как вам хочется, но вам никогда не придется беспокоиться о том, что ваш экран блокировки замены не работает и не дает вам доступа к телефону.

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

Для прикосновения за пределами вашего диалога,

dialog.setCanceledOnTouchOutside(your boolean);

Ваш ответ на вопрос