Ответ 1
Во многих исследованиях, наконец, я нашел решение
NotificationCall.java
public class NotificationCall extends NotificationListenerService {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
static StatusBarNotification mysbn;
Context context;
public StatusBarNotification[] getActiveNotifications() {
return super.getActiveNotifications();
}
public void onCreate() {
super.onCreate();
this.context = getApplicationContext();
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
super.onNotificationPosted(sbn);
mysbn = sbn;
try {
String packageName = sbn.getPackageName();
Intent intent = new Intent("Msg");
intent.putExtra("package", packageName);
LocalBroadcastManager.getInstance(this.context).sendBroadcast(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Добавить в манифест:
<service
android:name=".NotificationCall"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
Принять нажатие кнопки:
button.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
@Override
public void onClick(View v) {
try {
for (MediaController mediaController : ((MediaSessionManager) getApplicationContext().getSystemService("media_session")).getActiveSessions(new ComponentName(getApplicationContext(), NotificationCall.class))) {
if ("com.android.server.telecom".equals(mediaController.getPackageName())) {
mediaController.dispatchMediaButtonEvent(new KeyEvent(1, 79));
return;
}
}
} catch (SecurityException e2) {
e2.printStackTrace();
}
}
});
Вам нужно отметить галочку в окне уведомлений, просто перейдите к
Settings > Apps > All > Dialer > Check the notification box
Для разрешения:
if (Settings.Secure.getString(getContentResolver(), "enabled_notification_listeners").contains(getApplicationContext().getPackageName()))
{
} else
{
Intent i = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
Проверено до версии Nougat.
Ура!