Страницы

Поиск по вопросам

четверг, 28 марта 2019 г.

Какой механизм использует Viber для показа сообщения поверх других приложений?

Сижу, например, в скайпе... И тут приходит сообщение вайбера поверх сайпа. Или даже экран телефона погашен, всё равно окошко вайбера появиться...
Какой механизм используется?


Ответ

Не знаю как в Viber но такое можно сделать с помощью обычного AlertDialog
прописываете в манифесте разрешение на отображение системных окон

Для программной разблокировки нужно разрешение

Перед показом диалога ставите флаг окну
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
И все.
Можете поиграться с этим примером
public class LocalService extends Service { Handler handler = new Handler(); @Override public int onStartCommand(Intent intent, int flags, int startId) { init(); return START_STICKY; }
@Nullable @Override public IBinder onBind(Intent intent) { return null; }
private void init(){ handler.postDelayed(task, 10000); }
Runnable task = new Runnable() { @Override public void run() { showDialog(); handler.postDelayed(this, 10000); } };
private void showDialog(){ KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); KeyguardManager.KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); lock.disableKeyguard(); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Test"); builder.setNegativeButton("Cancel", null); AlertDialog dialog = builder.create(); dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); dialog.show(); } }
Будете получать алерт каждые 10 сек в независимости запущено приложение или нет.
Не оставляйте телефон с запущенным сервисом :-)

Комментариев нет:

Отправить комментарий