Android Question android.app.MissingForegroundServiceTypeException: Starting FGS without a type

Declan

Well-Known Member
Licensed User
Longtime User
I get the following error when opening the app on a Samsung SM-S918B.
The app compiles fine and no errors are displayed.
I have attempted the solution examples, but the error persists.

B4X:
Logger connected to:  samsung SM-S918B
--------- beginning of main
Copying updated assets files (58)
*** Service (starter) Create ***
android.intent.action.SEND
** Service (starter) Start **
** Activity (main) Create (first time) **
landinglayout - Main
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
*** Service (firebasemessaging) Create ***
First Token:
** Service (firebasemessaging) Start **
Error occurred on line: 66 (FirebaseMessaging)
android.app.MissingForegroundServiceTypeException: Starting FGS without a type  callerApp=ProcessRecord{ff9f608 31851:com.ecowatch.isprotector/u0a417} targetSDK=35
    at android.app.MissingForegroundServiceTypeException$1.createFromParcel(MissingForegroundServiceTypeException.java:53)
    at android.app.MissingForegroundServiceTypeException$1.createFromParcel(MissingForegroundServiceTypeException.java:49)
    at android.os.Parcel.readParcelableInternal(Parcel.java:4882)
    at android.os.Parcel.readParcelable(Parcel.java:4864)
    at android.os.Parcel.createExceptionOrNull(Parcel.java:3064)
    at android.os.Parcel.createException(Parcel.java:3053)
    at android.os.Parcel.readException(Parcel.java:3036)
    at android.os.Parcel.readException(Parcel.java:2978)
    at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7214)
    at android.app.Service.startForeground(Service.java:775)
    at anywheresoftware.b4a.objects.ServiceHelper.StartForeground(ServiceHelper.java:85)
    at com.ecowatch.isprotector.firebasemessaging._service_start(firebasemessaging.java:641)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
    at com.ecowatch.isprotector.firebasemessaging.handleStart(firebasemessaging.java:103)
    at com.ecowatch.isprotector.firebasemessaging.access$000(firebasemessaging.java:8)
    at com.ecowatch.isprotector.firebasemessaging$1.run(firebasemessaging.java:74)
    at anywheresoftware.b4a.objects.ServiceHelper$StarterHelper.onStartCommand(ServiceHelper.java:240)
    at com.ecowatch.isprotector.firebasemessaging.onStartCommand(firebasemessaging.java:72)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5268)
    at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2531)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:230)
    at android.os.Looper.loop(Looper.java:319)
    at android.app.ActivityThread.main(ActivityThread.java:8893)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

The Manifest:
B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="35"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
'SetApplicationAttribute(android:theme, "@style/LightTheme")
SetActivityAttribute(main, android:theme, @android:style/Theme.Translucent)
AddPermission(android.permission.VIBRATE)
SetActivityAttribute (Splash, android:showWhenLocked, "true")
SetActivityAttribute (Splash, android:turnScreenOn, "true")
AddPermission(android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
AddPermission(android.permission.CALL_PHONE)

'SetApplicationAttribute(android:allowBackup, "false")

RemovePermission(com.google.android.gms.permission.AD_ID)

SetServiceAttribute(Starter, android:foregroundServiceType, shortService)


'************ Required with GetSafeDirDefaultExternal ***********
AddManifestText(<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
)
'**************************************

'********************  Required for file provider *************************
AddApplicationText(
  <provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="$PACKAGE$.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths"/>
  </provider>
)
CreateResource(xml, provider_paths,
   <external-files-path name="name" path="shared" />
)
'End of default text.
AddApplicationText(<meta-data
    android:name="com.google.android.gms.vision.DEPENDENCIES"
    android:value="barcode,,face" />
)
CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)
CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)
CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)
CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)
CreateResourceFromFile(Macro, FirebaseAnalytics.Crashlytics)
CreateResourceFromFile(Macro, FirebaseAuth.FirebaseAuth)
'SetServiceAttribute(Tracker, android:foregroundServiceType, "location")

AddApplicationText(
<uses-library
      android:name="org.apache.http.legacy"
      android:required="false" />

<meta-data
  android:name="com.google.android.geo.API_KEY"
  android:value="AIzaSyDmX6Ij512yLcrZyUs4IdVBi-VtFy2i9Ds"/>
)
CreateResourceFromFile(Macro, Core.NetworkClearText)
AddPermission(android.permission.SYSTEM_ALERT_WINDOW)

'AddPermission(android.permission.CAMERA)

'Samsung
AddPermission("com.sec.android.provider.badge.permission.READ")
AddPermission("com.sec.android.provider.badge.permission.WRITE")
'HTC
AddPermission("com.htc.launcher.permission.READ_SETTINGS")
AddPermission("com.htc.launcher.permission.UPDATE_SHORTCUT")
'Sony
AddPermission("com.sonyericsson.home.permission.BROADCAST_BADGE")
AddPermission("com.sonymobile.home.permission.PROVIDER_INSERT_BADGE")
'Apex
AddPermission("com.anddoes.launcher.permission.UPDATE_COUNT")
'Solid
AddPermission("com.majeur.launcher.permission.UPDATE_BADGE")
'Huawei
AddPermission("com.huawei.launcher3.permission.READ_SETTINGS")
AddPermission("com.huawei.launcher3.permission.WRITE_SETTINGS")
AddPermission("com.huawei.launcher2.permission.READ_SETTINGS")
AddPermission("com.huawei.launcher2.permission.READ_SETTINGS")
AddPermission("com.huawei.android.launcher.permission.CHANGE_BADGE")
AddPermission("com.huawei.android.launcher.permission.WRITE_SETTINGS")
AddPermission("com.huawei.android.launcher.permission.READ_SETTINGS")
'Zuk
AddPermission("android.permission.READ_APP_BADGE")
'Oppo
AddPermission("com.oppo.launcher.permission.READ_SETTINGS")
AddPermission("com.oppo.launcher.permission.WRITE_SETTINGS")
'EvMe
AddPermission("me.everything.badger.permission.BADGE_COUNT_READ")
AddPermission("me.everything.badger.permission.BADGE_COUNT_WRITE")

AddPermission("com.android.launcher.permission.READ_SETTINGS")
AddPermission("com.android.launcher.permission.WRITE_SETTINGS")
AddPermission("com.android.launcher.permission.INSTALL_SHORTCUT")
AddPermission("com.android.launcher.permission.UNINSTALL_SHORTCUT")

I have attached the app ZIP file
 

DonManfred

Expert
Licensed User
Longtime User
Error occurred on line: 66 (FirebaseMessaging) android.app.MissingForegroundServiceTypeException: Starting FGS without a type
It is FirebaseMessaging which raises the error.
But you only have an Entry for Starter in Manifest.

Do you have a FirebaseMessaging SERVICE??? It should not be a Service.
 
Upvote 0

Declan

Well-Known Member
Licensed User
Longtime User
Do you have a FirebaseMessaging SERVICE??? It should not be a Service.
I have always run FirebaseMessaging as a service in numerous apps and never had a problem.

FirebaseMessaging:
#Region  Service Attributes
    #StartAtBoot: True
    #End Region

Sub Process_Globals
    Private nid As Int = 1
    Private lock As PhoneWakeState
    Private Tracking As Boolean
    Private fm As FirebaseMessaging
    Public Token As String
    Public APIKey As String
    Public mustPlay As Boolean
    
    Public regDate As String
    
'    Dim SQL1 As SQL
End Sub

Sub Service_Create
    Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves
'    Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_ALWAYS
    
    fm.Initialize("fm")
    Token = fm.token
    Log("First Token: " & Token)
    
    lock.PartialLock
End Sub

Public Sub SubscribeToTopic (Topic As String)
    fm.SubscribeToTopic(Topic)
End Sub


Public Sub SubscribeToTopics
    If Tracking Then Return
    fm.SubscribeToTopic("is") 'you can subscribe to more topics
    fm.SubscribeToTopic("avp") 'you can subscribe to more topics
    
    Tracking = True
End Sub

Public Sub UnsubscribeToTopics(topic As String)
    fm.UnsubscribeFromTopic(topic)
End Sub

Sub Service_Start (StartingIntent As Intent)
    If StartingIntent.IsInitialized Then fm.HandleIntent(StartingIntent)
    
    Service.StartForeground(nid, CreateNotification("iS-PROTECTOR is running"))

    StartServiceAt(Me, DateTime.Now + 30 * DateTime.TicksPerMinute, True)
    SubscribeToTopics
    
    'commented out on 13 september
    'Sleep(0)
    'Service.StopAutomaticForeground 'remove if not using B4A v8+.
End Sub
'
Sub CreateNotification (Body As String) As Notification
    Dim notification As Notification
    notification.Initialize2(notification.IMPORTANCE_LOW)
    notification.Icon = "Logo-IS-HP"
    notification.SetInfo("iS-PROTECTOR", Body, Splash)
    Return notification
End Sub

Sub fm_TokenRefresh (sToken As String)
    Token = sToken
End Sub


Sub GetMessageDescription(xtype As String) As String
    Select Case xtype
        Case "00"
            Return "Closed"
        Case "01"
            Return "Open"
        Case "03"
            Return "Under Attack"
            
        Case "04"
            Return "Closed"
        Case "05"
            Return "Open"
            
        Case "06"
            Return "Start"
        Case "07"
            Return "Stop"
            
        Case "09"
            Return "SOS"
            
        Case "10"
            Return "Disarmed"
        Case "11"
            Return "Armed"
        Case "12"
            Return "Motion Detected"
            
        Case "20"
            Return "Power ON"
        Case "21"
            Return "Power OFF"
            
        Case Else
            Return "Unknown Status"
    End Select
End Sub

Sub fm_MessageArrived (Message As RemoteMessage)
    B4XPages.MainPage.MP.Stop
    'LogColor("fm_MessageArrived", Colors.Magenta)
    'get the device id for this user
    Dim data As Map = Message.getdata
    
Log("data: " & data)
            
    If data.IsInitialized Then   
        'get the details of the message
        Dim sdeviceID As String = data.Get("deviceid")
        Dim smsgtype As String = data.Get("msgtype")
        Dim svoltage As String = data.Get("voltage")
        Dim smsgdate As String = data.Get("msgdate")
'        Dim smsgid As String = data.Get("seqnumber")
        
'        Dim myRegDate = smsgdate
        
        smsgdate = modAVP.NiceDate(smsgdate)
        

'*************************************
        
        Dim msgdesc As String = GetMessageDescription(smsgtype)
        'get the device name
        Dim devicename As String = modAVP.Devices.GetDefault(sdeviceID, "")
        mustPlay = False
        If devicename <> "" Then
            
'            '*********************************************************
'            ' Check for regdate
'            Private dbUser As B4XDBUtils
'            dbUser.Initialize(modAVP.SQLiteDB, "devices", "deviceid", "id")
'            dbUser.Execute("SELECT COUNT(datereg) FROM devices WHERE deviceid=" & "'" & sdeviceID & "'")
'            dbUser.FromJSON
'            Dim regTot As Int = dbUser.result.Size
'            LogColor("COUNT: " & regTot, Colors.Magenta )
'           
'            Dim myPos As Int
'            myPos = myRegDate.IndexOf(":")
'            myRegDate = myRegDate.SubString2(0, 11)
'           
'            If (regTot = 0) Then
''                regDate = smsgdate
'                SQL1.Initialize(File.DirDefaultExternal, "avp.db", True)
'                SQL1.ExecNonQuery("INSERT INTO devices '" & myRegDate & "' WHERE deviceid = '" & sdeviceID & "'")
'               
'               
'            End If
'                        '**********************************************************
            
            
            'create the title
            Dim stitle As String = $"${devicename}: ${msgdesc}"$
                Dim inbox As Map = MapCopy(data, Array("deviceid","voltage","msgdate","msgid","msgtype"))
                inbox.Put("msgtypedesc", msgdesc)
                inbox.Put("status", "A")
                Dim jsonData As String = modAVP.Map2Json(inbox)
                '
                Dim tbInbox As B4XDBUtils
                tbInbox.Initialize(modAVP.SQLiteDB, "inbox", "id", "id")
                tbInbox.SchemaAddInt(Array("msgid", "id"))
                tbInbox.Insert1(inbox)
                tbInbox.FromJSON
                'update the status of the device
                Dim dstatus As Map = MapCopy(data, Array("voltage", "msgdate", "msgtype", "deviceid"))
                dstatus.Put("msgtypedesc", msgdesc)
                '
                Dim rsDevice As B4XDBUtils
                rsDevice.Initialize(modAVP.SQLiteDB, "devices", "deviceid", "")
                rsDevice.SchemaAddInt(Array("int"))
                rsDevice.Update1(dstatus, sdeviceID)
                rsDevice.FromJSON

            'increment the number of messages   
            modAVP.BadgeNumber = modAVP.BadgeNumber + 1
            Starter.UpdateAppBadge(modAVP.BadgeNumber)
            '
            RndSeed(DateTime.Now)
            Dim rint As Int=Rnd(1,65536)

'*******************************************************
            Private dbUser As B4XDBUtils
            dbUser.Initialize(modAVP.SQLiteDB, "devices", "id", "id")
            dbUser.Execute("SELECT * FROM devices WHERE deviceid=" & "'" & sdeviceID & "'")
            dbUser.FromJSON
            Dim notifTot As Int = dbUser.result.Size
            modAVP.DeviceNumber = notifTot
            modAVP.Devices.Initialize
            For Each devicem As Map In dbUser.result
            Dim alarmState As String = devicem.Get("pac")
            Log("PAC: " & alarmState)
            Next

            If alarmState = "true" Then
                mustPlay = True
            End If           

'*******************************************************
            lock.PartialLock
            Dim n1 As NB6
        
            n1.Initialize("avp3", Application.LabelName, "HIGH")
            n1.SmallIcon(LoadBitmapResize(File.DirAssets, "is-icon-small.jpg", 24dip, 24dip, False))
            n1.AutoCancel(True)
            n1.OnlyAlertOnce(False)
            n1.Visibility("PUBLIC")
            n1.SetDefaults(True, True, True)

            Dim n1msg As String = stitle & ", voltage @ " & svoltage & ", on " & smsgdate
            Dim n As Notification = n1.Build(stitle, n1msg, jsonData, Splash)
            n.Notify(rint)
            
'            lock.ReleasePartialLock
                
            If B4XPages.IsInitialized Then
                B4XPages.MainPage.UpdateBadge
                If mustPlay Then
                    B4XPages.MainPage.PlaySound
                End If
                StartActivity(Splash)
            End If
        End If
    End If
End Sub

Sub MapCopy(sourceM As Map, sourceKeys As List) As Map
    Dim nm As Map = CreateMap()
    If sourceKeys.Get(0) = "*" Then
        For Each k As String In sourceM.Keys
            Dim v As Object = sourceM.Get(k)
            nm.Put(k, v)
        Next
    Else
        For Each k As String In sourceKeys
            Dim v As Object = sourceM.Get(k)
            nm.Put(k, v)
        Next
    End If
    Return nm
End Sub

Sub Service_Destroy
    '13 september
    If Tracking Then
        'GPS.Stop
    End If
    Tracking = False
    lock.ReleasePartialLock
    ''13 september
End Sub
 
Upvote 0

DonManfred

Expert
Licensed User
Longtime User
Upvote 0

Declan

Well-Known Member
Licensed User
Longtime User
Now running a Receiver for FirebaseMessaging, I get the following error when opening the app:
B4X:
Error occurred on line: 0 (FirebaseMessaging)
java.lang.Exception: Sub subscribetotopics signature does not match expected signature.
public static anywheresoftware.b4a.pc.RemoteObject com.ecowatch.isprotector.firebasemessaging_subs_0._subscribetotopics() throws java.lang.Exception
class java.lang.String,

My code that relates to the error:
B4X:
Public Sub SubscribeToTopics
    fm.SubscribeToTopic("is") 'you can subscribe to more topics
End Sub
 
Upvote 0
Top