Moja aplikacja używa numeru NotificationListener
do odczytywania wiadomości z różnych aplikacji innych firm, na przykład WhatsApp.Jak wykorzystać funkcję bezpośredniej odpowiedzi Android Nougat za pomocą Powiadomienia?
Do tej pory udało mi się wysłać odpowiedź, jeśli tylko jeden czat jest nieprzeczytany, kod znajduje się poniżej.
Jednak w przypadku WhatsApp, getNotification().actions
zwraca obiekt zerowy, gdy więcej niż dwa czaty są nieprzeczytane, ponieważ wiadomości są grupowane razem. Jak widać na poniższych zdjęciach, jeśli powiadomienia zostaną przedłużone, istnieje możliwość wysłania bezpośredniej odpowiedzi, dlatego jestem pewien, że można to wykorzystać, również uważam, że aplikacje takie jak PushBullet używają tej metody.
W jaki sposób mogę uzyskać dostęp do zdalnego adresu tego powiadomienia?
public static ReplyIntentSender sendReply(StatusBarNotification statusBarNotification, String name) {
Notification.Action actions[] = statusBarNotification.getNotification().actions;
for (Notification.Action act : actions) {
if (act != null && act.getRemoteInputs() != null) {
if (act.title.toString().contains(name)) {
if (act.getRemoteInputs() != null)
return new ReplyIntentSender(act);
}
}
}
return null;
}
public static class ReplyIntentSender {
[...]
public final Notification.Action action;
public ReplyIntentSender(Notification.Action extractedAction) {
action = extractedAction;
[...]
}
private boolean sendNativeIntent(Context context, String message) {
for (android.app.RemoteInput rem : action.getRemoteInputs()) {
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putCharSequence(rem.getResultKey(), message);
android.app.RemoteInput.addResultsToIntent(action.getRemoteInputs(), intent, bundle);
try {
action.actionIntent.send(context, 0, intent);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
return false;
}
}
jakieś wytłumaczenie jak powyższy kod działa: Po otrzymaniu powiadomienia aplikacja próbuje dostać działania i sprawdza, czy nazwa jest w tytule remoteInput (zazwyczaj jest w formacie „Odpowiedz $ NAME "), jeśli tak się stanie, Akcja zostanie zapisana w klasie ReplyIntentSender, która po wywołaniu przez sendNativeIntent
przejdzie przez wszystkie RemoteInputs tej Akcji i doda komunikat do intencji. Jeśli więcej niż jeden czat jest nieprzeczytany, getNotification().actions
zwraca wartość null.
Poniżej znajdują się dwa zrzuty ekranu, pierwszy, w którym działa bez żadnych problemów, a drugi, w którym nie działa.
Czy używasz usługi NotificationListenerService lub niestandardowego interfejsu NotificationListener? –
przeczytaj: https://developer.android.com/reference/android/service/notification/NotificationListenerService.html – CristiC777
@PravinDivraniya Używam zwykłej usługi NotificationListenerService. – Force