Сижу, например, в скайпе... И тут приходит сообщение вайбера поверх сайпа.
Или даже экран телефона погашен, всё равно окошко вайбера появиться...
Какой механизм используется?
Ответ
Не знаю как в 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 сек в независимости запущено приложение или нет.
Не оставляйте телефон с запущенным сервисом :-)
Комментариев нет:
Отправить комментарий