Как выполнить уведомление-действие (клик) на экране блокировки?

TL; DR

Как я могу сделать уведомление, что какая-то работа с экрана блокировки без разблокировки? После нажатия действия, кнопки в уведомлении или просто полного уведомления я хочу выполнить вызов 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 Вы видите выше. Результат тот же, хотя, никаких действий для меня :(

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

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