Поскольку я также работаю над продуктом IOT, это была одна из самых больших проблем, с которой я столкнулся, но после некоторых исследований я считаю, что нашел какое-то решение этой проблемы, или вы можете сказать, что это простой хак. Я протестировал этот хак в нескольких устройствах с несколькими версиями и обнаружил, что большинство устройств реагируют. Только устройства Samsung не отвечают, некоторые устройства Huawei и некоторые устройства Oppo также не отвечают (я все еще смотрю что-то для этих устройств).
Я заметил, что Android предоставляет одну из функций «Доступ к уведомлениям». Вы можете использовать NotificationListenerService, чтобы читать уведомления и выполнять некоторые действия над ними. предоставляет некоторые методы переопределения:
onNotificationPosted()
onNotificationRemoved()
getActiveNotifications()
... и т.д.
Вот код: создать службу, которая проходит NotificationListenerService
class NLService extends NotificationListenerService {
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
....
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
....
}
В AndroidMenifest, добавьте эту услугу как:
<service
android:name=".NLService"
android:label="@string/app_name"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action
android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
Этот wil l разрешайте вашему приложению читать полученные уведомления.
Теперь, вот основной код:
В onNotificationPosted (StatusBarNotification SBN) добавить этот код:
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
try {
if (sbn.getNotification().actions != null) {
for (Notification.Action action : sbn.getNotification().actions)
{
Log.e(TAG, "" + action.title);
if (action.title.toString().equalsIgnoreCase("Answer")) {
Log.e(TAG, "" + true);
PendingIntent intent = action.actionIntent;
try {
intent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Thats это!
Все установлено. Запустите приложение и устройства, кроме Samsung, в зависимости от того, что отображает уведомление о входящем вызове с кнопками «Ответ» и «Отклонить/отменить действие», позволит вам ответить на вызов.
Чтобы открыть настройки уведомлений доступа и позволяя приложению читать уведомления, используйте:
Intent intent = new
Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
startActivity(intent);
Просто создайте POC для этого и дайте мне знать о том, как это работает.
Пожалуйста, отметьте мой ответ, если это поможет.
Кроме того, если вы можете предоставить некоторое решение для тех же устройств Samsung, пожалуйста, обновите их.
Благодаря
http://stackoverflow.com/q/40673922/5996106 .Same вопрос с не решение. –
Автор вопроса связан с устройством не с версией. – AndroidHacker
У вас есть это http://stackoverflow.com/a/27084305/5996106 –