1. *** New version of B4J is available ***
    B4J v7.8
    Dismiss Notice

Android Question Unwanted Notification

Discussion in 'Android Questions' started by MrKim, Jul 6, 2019.

  1. MrKim

    MrKim Active Member Licensed User

    I made some minor changes to one of my apps and found that the Widget was leaving an unwanted and unremoveable icon on the notification bar. Found the appropriate thread:
    https://www.b4x.com/android/forum/threads/automatic-foreground-mode.90546/
    And added:
    Code:
    Sleep(0)
    Service.StopAutomaticForeground
    as the last thing in Service_Start to all service modules. This resolved THAT issue however, my widget contains several Labels which open the main program. I found that opening the program put my icon on the notification bar - it would disappear when I closed the app but there was no reason for it to be there.

    I have resolved the issue by adding the above code to each of the labels in my widget, ie:
    Code:
    Sub Label1_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    However as I read it this shouldn't be necessary?
    Am I missing something?

    android:targetSdkVersion="26"
     
  2. Erel

    Erel Administrator Staff Member Licensed User

    Can you post the Service_Start code?
     
  3. MrKim

    MrKim Active Member Licensed User

    I am assuming you are talking about the widgets service.
    Here is the whole service:
    Code:
    #Region  Service Attributes
        
    #StartAtBoot: False
        
    #End Region

    Sub Process_Globals
        
    'These global variables will be declared once when the application starts.
        'These variables can be accessed from all modules.
        Dim RV As RemoteViews
    End Sub

    Sub Service_Create
    Try
         RV = 
    ConfigureHomeWidget("swlwidget""rv"2000"SwipeList",  False)'unrem for release
    Catch
    '    Log(LastException.Message)
        ToastMessageShow(LastException.Message, True)
    End Try

    End Sub

    Sub Service_Start (StartingIntent As Intent)
        
        
    If RV.HandleWidgetEvents(StartingIntent) Then Return'unrem for release
        Sleep(0)
        
    Service.StopAutomaticForeground

    End Sub

    Sub Service_Destroy

    End Sub

    Sub RV_RequestUpdate
            RestoreWidgetData
    End Sub

    Sub RV_Disabled
        
    StopService("")
    End Sub

    Sub SwLPnl_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    Sub Label1_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    Sub Label2_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    Sub Label3_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    Sub Label4_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    Sub Label5_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    Sub Label6_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
    Sub Panel1_Click
        
    StartActivity(Main)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub

    Public Sub RestoreWidgetData
        
    Dim R As RandomAccessFile, It As List, SS As NotePoperties, i2 As Int
        
    Try
            R.Initialize(
    File.DirInternal, "SwipeList.swl"False)
            It = R.ReadB4XObject(
    0)
            R.Close
            
    'ToastMessageShow("Refreshing widget data", False)
            i2 = It.Size
            
    'ToastMessageShow("Size " & i2, False)
            Dim CV As Canvas, BMP As Bitmap
            BMP.InitializeMutable(
    155dip50dip)
            CV.Initialize2(BMP)
            
    If i2 > 0 Then
    '            Log(1)
                SS = It.Get(0)
                RV.SetText(
    "Label1", SS.Txt)
                RV.SetVisible(
    "Label1"True)
                RV.SetVisible(
    "IV1"True)
                RV.SetTextColor(
    "Label1", SS.TxtClr)
                CV.DrawColor(SS.BClr)
                RV.SetImage(
    "IV1", BMP)
            
    Else
                RV.SetText(
    "Label1""List is empty. Top 6 in your list will display here.")
                RV.SetVisible(
    "Label1"True)
                RV.SetTextColor(
    "Label1"Colors.White)
                CV.DrawColor(
    Colors.Blue)
                RV.SetImage(
    "IV1", BMP)
            
    End If
            
    If i2 > 1 Then
    '            Log(2)
                'Dim CV As Canvas
                'CV.Initialize2(BMP)
                SS = It.Get(1)
                RV.SetText(
    "Label2", SS.Txt)
                RV.SetVisible(
    "Label2"True)
                RV.SetVisible(
    "IV2"True)
                RV.SetTextColor(
    "Label2", SS.TxtClr)
                
    Dim CV As Canvas, BMP As Bitmap
                BMP.InitializeMutable(
    155dip50dip)
                CV.Initialize2(BMP)
                CV.DrawColor(SS.BClr)
                RV.SetImage(
    "IV2", BMP)
            
    Else
                RV.SetVisible(
    "Label2"False)
                RV.SetVisible(
    "IV2"False)
            
    End If
            
    If i2 > 2 Then
                SS = It.Get(
    2)
                RV.SetText(
    "Label3", SS.Txt)
                RV.SetVisible(
    "Label3"True)
                RV.SetVisible(
    "IV3"True)
                RV.SetTextColor(
    "Label3", SS.TxtClr)
                
    Dim CV As Canvas, BMP As Bitmap
                BMP.InitializeMutable(
    155dip50dip)
                CV.Initialize2(BMP)
                CV.DrawColor(SS.BClr)
                RV.SetImage(
    "IV3", BMP)
            
    Else
                RV.SetVisible(
    "Label3"False)
                RV.SetVisible(
    "IV3"False)
            
    End If
            
    If i2 > 3 Then
                SS = It.Get(
    3)
                RV.SetText(
    "Label4", SS.Txt)
                RV.SetVisible(
    "Label4"True)
                RV.SetVisible(
    "IV4"True)
                RV.SetTextColor(
    "Label5", SS.TxtClr)
                
    Dim CV As Canvas, BMP As Bitmap
                BMP.InitializeMutable(
    155dip50dip)
                CV.Initialize2(BMP)
                CV.DrawColor(SS.BClr)
                RV.SetImage(
    "IV4", BMP)
            
    Else
                RV.SetVisible(
    "Label4"False)
                RV.SetVisible(
    "IV4"False)
            
    End If
            
    If i2 > 4 Then
                SS = It.Get(
    4)
                RV.SetText(
    "Label5", SS.Txt)
                RV.SetVisible(
    "Label5"True)
                RV.SetVisible(
    "IV5"True)
                RV.SetTextColor(
    "Label5", SS.TxtClr)
                
    Dim CV As Canvas, BMP As Bitmap
                BMP.InitializeMutable(
    155dip50dip)
                CV.Initialize2(BMP)
                CV.DrawColor(SS.BClr)
                RV.SetImage(
    "IV5", BMP)
            
    Else
                RV.SetVisible(
    "Label5"False)
                RV.SetVisible(
    "IV5"False)
            
    End If
            
    If i2 > 5 Then
                SS = It.Get(
    5)
                RV.SetText(
    "Label6", SS.Txt)
                RV.SetVisible(
    "Label6"True)
                RV.SetVisible(
    "IV6"True)
                RV.SetTextColor(
    "Label6", SS.TxtClr)
                
    Dim CV As Canvas, BMP As Bitmap
                BMP.InitializeMutable(
    155dip50dip)
                CV.Initialize2(BMP)
                CV.DrawColor(SS.BClr)
                RV.SetImage(
    "IV6", BMP)
            
    Else
                RV.SetVisible(
    "Label6"False)
                RV.SetVisible(
    "IV6"False)
            
    End If
    '        Log("Update")
            RV.UpdateWidget
            Sleep(
    0)
            
    Service.StopAutomaticForeground
        
    Catch
            
    ToastMessageShow(LastException.Message, True)
        
    End Try

    End Sub
    You can see where I added ....StopAutomaticForeground to each of the Click events to prevent the spurious notification.
     
  4. Erel

    Erel Administrator Staff Member Licensed User

    Correct code:
    Code:
    Sub Service_Start (StartingIntent As Intent)
         RV.HandleWidgetEvents(StartingIntent)
        Sleep(
    0)
        
    Service.StopAutomaticForeground
    End Sub
     
    MrKim likes this.
  5. MrKim

    MrKim Active Member Licensed User

    Last edited: Jul 7, 2019
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice