¿Cómo cancelar una notificación continua de otra aplicación?

Fond

Encontré una aplicación que de alguna manera oculta las notificaciones, incluso las notificaciones continuas (utilizadas por los servicios en primer plano), llamada NCleaner .

e preguntaba cómo funciona tal cosa.

El problem

No hay mucha información sobre cómo controlar las notificaciones de otras aplicaciones. Solo de la aplicación actual, y por alguna razón no he podido cancelar una notificación en curso, pero he logrado cancelar una normal.

Lo que he encontrado

He encontradoesta muestra mostrando cómo monitorear las notificaciones. Después de buscar en los documentos sobre NotificationListenerService, También he encontrado cómo cancelar notificaciones específicas de otras aplicaciones.

Sin embargo, no funciona para notificaciones en curso.

Para probar las notificaciones normales, me envié un correo electrónico o escribí algo en la aplicación PushBullet a través de mi PC.

Para probar las notificaciones en curso, instalé y ejecuté mi aplicación de tiempo libre aqu), que muestra una notificación continua justo al comienzo de la aplicación, a partir de Android O. De hecho, incluso puede ocultar las notificaciones del sistema operativo, de USB conectado y depuración (solo conecte el dispositivo a la PC a través de USB) ...

Aquí está el código que hice, basado en la muestra, para cancelar todas las notificaciones que recibe:

NotificationListenerExampleService.kt

class NotificationListenerExampleService : NotificationListenerService() {

    override fun onNotificationPosted(sbn: StatusBarNotification) {
        Log.d("AppLog", "sbn:" + sbn.toString())
        cancelNotification(sbn.key)
    }

    override fun onListenerConnected() {
        super.onListenerConnected()
        Log.d("AppLog", "onListenerConnected")
    }

    override fun onNotificationRemoved(sbn: StatusBarNotification) {}
}

manifiesto

<application
  android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"
  tools:ignore="AllowBackup,GoogleAppIndexingWarning">
  <activity android:name=".MainActivity">
    <intent-filter>
      <action android:name="android.intent.action.MAIN"/>

      <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
  </activity>

  <service
    android:name=".NotificationListenerExampleService" android:label="@string/service_label" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
    <intent-filter>
      <action android:name="android.service.notification.NotificationListenerService"/>
    </intent-filter>
  </service>
</application>

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private val isNotificationServiceEnabled: Boolean
        get() {
            val pkgName = packageName
            val flat = Settings.Secure.getString(contentResolver, "enabled_notification_listeners"")
            if (!TextUtils.isEmpty(flat)) {
                val names = flat.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
                for (i in names.indices) {
                    val cn = ComponentName.unflattenFromString(names[i])
                    if (cn != null) {
                        if (TextUtils.equals(pkgName, cn.packageName)) {
                            return true
                        }
                    }
                }
            }
            return false
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (!isNotificationServiceEnabled) {
            startActivity(Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"))
        }
    }

}
Las pregunta ¿Cómo es que mi código no puede eliminar las notificaciones en curso? ¿Cómo es que la aplicación que he encontrado puede hacerlo? ¿Qué hace ¿Cuánto proporciona esta API en términos de notificaciones? Al mirar los documentos, parece que puede hacer mucho: leer notificaciones, descartarlas, obtener todo tipo de información sobre ellas ... Pero no puedo encontrar otras características: ¿Es posible modificar una notificación? ¿Cambiar su prioridad? Para evitar que sea una notificación directa y solo estar en el cajón de notificaciones? ¿Es posible activar una acción de notificación?

Respuestas a la pregunta(1)

Su respuesta a la pregunta