2013-06-04 23 views
13

Come controllare a livello di programmazione se l'utente disattiva la notifica push nelle impostazioni dell'app? Posso aprire l'intento delle impostazioni dell'app direttamente dall'app per richiedere all'utente di accenderlo?Android: le notifiche push sono attive?

enter image description here

Grazie

+0

Per quanto ne so, non è possibile disattivare tali notifiche. Se si seleziona [Notifica] (https://developer.android.com/reference/android/app/Notification.html) e [NotificationManager] (https://developer.android.com/reference/android/app/NotificationManager. html) non vedrai alcun metodo che permetta di ottenere quell'informazione. Potrei sbagliarmi però. – Akatosh

+0

Forse http://stackoverflow.com/questions/4421527/start-android-application-info-screen potrebbe aiutare. – OcuS

+0

È corretto quindi che è necessario disinstallare l'app se non si desidera ricevere un nuovo messaggio push in merito? – vikingsteve

risposta

8

si Supponendo che si riferiscono a Google Cloud Messaging (dal momento che si sta utilizzando il tag Android e push-notifica), non ci sono impostazioni generali utilizzati per attivare/disattivare il servizio GCM (a differenza del servizio Apple Push Notifications per dispositivi iOS).

Quando si installa un'app, se l'app utilizza Google Cloud Messaging, verrà elencata nell'elenco delle autorizzazioni che questa app richiede per funzionare. Scegliendo di installare l'app si consente di inviare notifiche push all'utente.

Detto questo, affinché l'app possa effettivamente ricevere messaggi GCM, l'app deve registrarsi al servizio GCM al livello di programmazione. Puoi farlo in qualsiasi posto tu desideri all'interno della tua app, e puoi creare un'attività app settings (o frammento o qualsiasi altra cosa) in cui l'utente può abilitare/disabilitare GCM (che innescherebbe la registrazione/annullamento della registrazione in/da GCM). La tua app può contenere un archivio persistente che conserverebbe l'ID di registrazione che ricevi al momento della registrazione a GCM e puoi utilizzare tale negozio per determinare se la tua app è registrata su GCM.

Puoi chiedere al tuo utente di accenderlo se l'app è già in esecuzione (se hai qualche codice che lo fa). Se non è in esecuzione e l'app non è registrata per GCM su quel dispositivo, il tuo server non può inviare messaggi GCM ad esso.

Se si desidera superare tale ostacolo, è possibile registrarsi automaticamente a GCM (quando l'app viene avviata per la prima volta). Quindi puoi inviare messaggi all'app ogni volta che lo desideri. Se desideri ancora consentire all'utente di decidere se desiderano visualizzare tali notifiche, puoi avere un contrassegno nelle impostazioni dell'app che abilita/disabilita la notifica dell'interfaccia utente creata come risultato di un messaggio GCM in entrata. Il servizio GCM sarà sempre abilitato, ma a meno che l'utente non scelga di visualizzare le notifiche, l'app non visualizzerà nulla quando arriva un messaggio GCM.

+2

Quindi, se ho capito bene, "mostra notifica" nelle impostazioni dell'app è solo per nascondere tutti i "popup" dall'app? Ad esempio, posso ancora ricevere notifiche, memorizzarle e mostrarle come una finestra di dialogo quando l'utente accede all'app. – goodm

+0

@goodm Non sono sicuro di quali siano le "impostazioni delle app" a cui ti riferisci. Ti stai riferendo a specifiche "impostazioni app" all'interno di un'app specifica? Se ti riferisci alle notifiche che arrivano dal servizio GCM, sta a te decidere come scrivere la tua app (se registrarti automaticamente a GCM e rimanere sempre registrato, il che ti consentirà di ricevere sempre le notifiche). – Eran

+0

Per impostazioni app intendo Impostazioni -> Gestione app -> Info app, c'è una piccola opzione "tick" chiamata "Mostra notifiche" – goodm

2

non è possibile accedere a questa proprietà se non si dichiara il processo di sistema o si dispone dell'autorizzazione di root, in primo luogo è possibile visualizzare il permesso del file: /data/system/notifycaiton_policy.xml: -wr ------.

In un altro modo, vedere il codice sorgente di: /android/4.2/frameworks/base/services/java/com/android/server/NotificationManagerService.java. in api: public void setNotificationsEnabledForPackage(String pkg, boolean enabled), ci sarà controllare UID del chiamante se sia Process.SYSTEM_UID:

void checkCallerIsSystem() { 
    int uid = Binder.getCallingUid(); 
    if (UserHandle.getAppId(uid) == Process.SYSTEM_UID || uid == 0) { 
     return; 
    } 
    throw new SecurityException("Disallowed call for uid " + uid); 
} 
Problemi correlati