Как выполнить уведомление-действие (клик) на экране блокировки?
Как я могу сделать уведомление, что какая-то работа с экрана блокировки без разблокировки? После нажатия действия, кнопки в уведомлении или просто полного уведомления я хочу выполнить вызов API (без ввода кода разблокировки).
подробностиЦельНа основании ответа наэтот вопрос Я пытался сделать уведомление с действием, которое работает на экране блокировки, не разблокируя устройство. Действие - это то, что не требует дополнительного интерфейса или взаимодействия (подумайте «отправьте запрос API»).
СтатусУведомление и щелчок работают с разблокированным устройством. Однако, когда я заблокирован, мне все равно нужно сначала ввести код разблокировки, поэтому либо происходит что-то новое, либо я просто неправильно понял, как это должно работать.
Если я правильно понимаю, я могу установить свою видимость «public», чтобы показать содержимое (это работает), и вместо определения действия (которое не кажется общедоступным) я могу обрабатывать щелчки на (теперь видимом) макете. Я попробовал это с приведенным ниже кодом, но, очевидно, это не работает.
Я попытался отправить намерение как в свое приложение, так и в службу, как предложено ниже по florian.
КодЭто код, с которого я запускаю уведомление (это находится в Activity, код был сокращен для вашего удобства)
private void startNotification() {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setOngoing(true)
.setSmallIcon(R.drawable.abc_ic_menu_share_mtrl_alpha)
.setContentTitle("title text")
.setContentText("content text");
Intent openIntent = new Intent(MyMainActivity.this, MyMainActivity.class);
openIntent.setAction("some_string");
PendingIntent pOpenIntent = PendingIntent.getActivity(this, 0, openIntent, 0);
builder.setContentIntent(pOpenIntent);
RemoteViews view = new RemoteViews(getPackageName(), R.layout.notification);
builder.setContent(view);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());
}
Как уже говорилось, я также попробовал с сервисом, как предложил Флориан, с этим как вызов
Intent yepIntent = new Intent(this, MyIntentService.class);
yepIntent.setAction("test");
yepIntent.putExtra("foo", true);
yepIntent.putExtra("bar", "more info");
PendingIntent yepPendingIntent = PendingIntent.getService(this, notificationId, yepIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//builder.addAction(R.drawable.abc_ic_menu_share_mtrl_alpha, "My Action", yepPendingIntent);
builder.setContentIntent(yepPendingIntent);
Действие не отображалось на экране блокировки, поэтому я изменил его наsetContentIntent
Вы видите выше. Результат тот же, хотя, никаких действий для меня :(