Italian Notifica applicazione con NB6

Fulvio75

Well-Known Member
Licensed User
Ciao a tutti,
stò usando NB6 per una notifica della mia App, quando chiudo l'App come faccio a cancellare la notifica?
Grazie
B4X:
Sub LowPriority_Notification
    
    AppDeclares.AppNotification.Initialize("default", Application.LabelName, "LOW").AutoCancel(False).SmallIcon(LoadBitmapResize(File.DirAssets, "AppNotification.png", 24dip, 24dip, False))
    AppDeclares.AppNotification.SetDefaults(False, False, False)
    AppDeclares.AppNotification.Build("Turni guida", "", "tag", Me).Notify(0)
    
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Fatta una provoletta al volo, utilizzando l'esempio di Erel.

Non so se questo sia il metodo giusto/migliore ma funziona, il che già mi soddisfa :)

Erel elenca N tipi di notifiche in una CustomListView; una di queste:
B4X:
Sub Simple_Notification
    Dim n As NB6
    n.Initialize("default", Application.LabelName, "DEFAULT").AutoCancel(True).SmallIcon(smiley)
    mCurrNotifID = 4
    mCurrNotif = n.Build("Title", "Content", "tag1", Me) '.Notify(4) 'It will be Main (or any other activity) instead of Me if called from a service.
    mCurrNotif.Notify(mCurrNotifID)
End Sub

L'ho modificata, aggiungendo mCurrNotifID e mCurrNotif, dichiarate a livello di processo, rispettivamente di tipo Int e Notification.

Poi:
B4X:
Sub Activity_Pause (UserClosed As Boolean)
    If UserClosed Then
        mCurrNotif.Cancel(mCurrNotifID)
    End If
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
AppDeclares.AppNotification.Build("Turni guida", "", "tag", Me).Notify(0)
In pratica, sarebbe stato più semplice modificare questa tua riga
' Modificata.
' Dichiarare nella Process_Globals:
Private mNotif As Notification


mNotif = AppDeclares.AppNotification.Build("Turni guida", "", "tag", Me)
mNotif.Notify(0)

B4X:
Sub Activity_Pause (UserClosed As Boolean)
    If UserClosed Then
        mNotif.Cancel(0)
    End If
End Sub
 

Fulvio75

Well-Known Member
Licensed User
Come dire: metti 8 Like ad ogni mio post 😄
ancora una cosa...
quando chiudo l'app scorrendola a destra con il dito, qual è l'evento da intercettare per richiamare il codice di chiusura della notifica?
ora utilzzo il tasto back
B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean 'Return True to consume the event
   
    If KeyCode = KeyCodes.KEYCODE_BACK Then
       
        If Msgbox2("Uscire dall'applicazione?","","Si","","No",Null) = DialogResponse.POSITIVE Then
            DBConnection.Close
            AppNotification.Cancel(0)
            Activity.Finish
            ExitApplication      
        End If
               
    End If
   
    Return True
   
End Sub

questo codice non funziona su tutti i telefoni e l'applicazione rimane attiva in background
 

LucaMs

Expert
Licensed User
Longtime User
quando chiudo l'app scorrendola a destra con il dito, qual è l'evento da intercettare per richiamare il codice di chiusura della notifica?
Non serve, quando lo fai si chiude l'Activity, prima ancora che venga "chiusa" l'app, per cui va nell'Activity_Pause, come ti ho scritto.

Comunque, per intercettare la "chiusura tramite 'trascinamento'", nel servizio Starter:
B4X:
Sub Service_TaskRemoved
    'This event will be raised when the user removes the app from the recent apps list.
End Sub
 

Fulvio75

Well-Known Member
Licensed User
:D:D:D:D:D:D:D:D:D
Non serve, quando lo fai si chiude l'Activity, prima ancora che venga "chiusa" l'app, per cui va nell'Activity_Pause, come ti ho scritto.

Comunque, per intercettare la "chiusura tramite 'trascinamento'", nel servizio Starter:
B4X:
Sub Service_TaskRemoved
    'This event will be raised when the user removes the app from the recent apps list.
End Sub
:D:D
 

Fulvio75

Well-Known Member
Licensed User
Non serve, quando lo fai si chiude l'Activity, prima ancora che venga "chiusa" l'app, per cui va nell'Activity_Pause, come ti ho scritto.

Comunque, per intercettare la "chiusura tramite 'trascinamento'", nel servizio Starter:
B4X:
Sub Service_TaskRemoved
    'This event will be raised when the user removes the app from the recent apps list.
End Sub
Su Xiaomi MIUI 10 non va, il Task_Removed non viene richiamato
 

LucaMs

Expert
Licensed User
Longtime User
Forse ho "interpretato" male la tua domanda (leggere troppo velocemente non aiuta 😄).

Ed evito pure di rileggere :rolleyes: . Quando viene chiusa l'Activity, viene eseguita la routine-evento Activity_Pause. A seconda del valore del parametro UserClosed, capisci se semplicemente l'utente è passato ad un'altra Activity oppure sia stata chiusa l'app, quindi è in questa che devi cancellare la notifica.

Se invece l'app viene tolta dalle app recenti (è qui che lo fa trascinandola col dito), scatta l'evento Sub Service_TaskRemoved nel servizio Starter; credo che questo avvenga dopo la Activity_Pause - sempreché l'Activity sia in primo piano (foreground), ovviamente.

Se su quello smartphone l'evento non scatta... giuro che non è colpa mia, purtroppo non sono il produttore di quei dispositivi 😄.
Scherzi a parte, "spendo" altri minuti per vedere se per caso sia cambiato qualcosa anche riguardo questo, nelle ultime versioni di Android.
 

Fulvio75

Well-Known Member
Licensed User
Forse ho "interpretato" male la tua domanda (leggere troppo velocemente non aiuta 😄).

Ed evito pure di rileggere :rolleyes: . Quando viene chiusa l'Activity, viene eseguita la routine-evento Activity_Pause. A seconda del valore del parametro UserClosed, capisci se semplicemente l'utente è passato ad un'altra Activity oppure sia stata chiusa l'app, quindi è in questa che devi cancellare la notifica.

Se invece l'app viene tolta dalle app recenti (è qui che lo fa trascinandola col dito), scatta l'evento Sub Service_TaskRemoved nel servizio Starter; credo che questo avvenga dopo la Activity_Pause - sempreché l'Activity sia in primo piano (foreground), ovviamente.

Se su quello smartphone l'evento non scatta... giuro che non è colpa mia, purtroppo non sono il produttore di quei dispositivi 😄.
Scherzi a parte, "spendo" altri minuti per vedere se per caso sia cambiato qualcosa anche riguardo questo, nelle ultime versioni di Android.
Esatto task_removed non viene nemmeno considerato, ho messo breakpoint ma di la non ci passa.
 

Fulvio75

Well-Known Member
Licensed User
Non ha molto senso il break point in quella routine, visto che l'app dovrebbe essere avviata come apk, non in modalità debug.
Prova il progetto allegato - ovviamente è semplicissimo, l'importante è che b4a sia connesso, per vedere il log
ok
 

Fulvio75

Well-Known Member
Licensed User
Nulla non c'è modo di cancellare la notifica alla chiusura dell'applicazione, posso solo cancellarla se ad esempio creo un bottone e al click eseguo il codice Notification.cancel(0)
 
Top