Dialog oder Oberfläche mit Button aus Foregroundservice starten

  • 11 Antworten
  • Letztes Antwortdatum
Status
Dieses Thema wurde gelöst! Zur Lösung springen…
A

Alex1978

Neues Mitglied
1
Hallo Leute,

ich habe eine App mit Foregroundservice programmiert, mit der ich per TCP/IP auf Server zugreife. Funktioniert auch alles einwandfrei.
Ich möchte, wenn die Oberfläche geschlossen wird (die App läuft im Hintergrund weiter), das wenn ein event eintritt (von mir aus zum testen erstmal, nach 10 sek), eine Oberfläche geöffnet wird. So ähnlich wie das mit dem Telefon ist, wird man angerufen erscheint ja Button zum annehmen etc.

Ich habe PendingIntent probiert. Fehlende Berechtigungen eingetragen im Manifest. Trotzdem knallt es da immer und die App crasht.
Könnt ihr mir da weiter helfen?

Habe mal den Code gepostet.

Liebe Grüsse
 

Anhänge

  • App.zip
    2,4 KB · Aufrufe: 40
Empfohlene Antwort(en)
Bitte - viel Erfolg



Beiträge automatisch zusammengeführt:

Ja bei mir geht es aber um eine Meldung/einer Info die von einem Server kommt. Kann ich also nicht anders machen als mit einem Server Request
Vorschlag zu deinem Foreground- Service.

Bei jedem Event erstellst du eine neue Notification , oder du updatest die Vorhandene.
Bitte beachte, dass die Vorhandene ab API32 weggewischt werden kann , also solltest du diese mit einem Dismiss Intent ausstatten
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Alex1978
Alle Antworten (11)
eine Oberfläche geöffnet wird
Eine ? oder deine "MainActivity.class" ??

Trotzdem knallt es da immer und die App crasht.
Wo ist der LogCat dazu ?
Unsere Kristallkugel ist leider nicht so leistungsfähig

Anmerkung :
a) Dein ThreadLoop im OnStartCommand wird mit an Sicherheit grenzender Wahrscheinlichkeit beendet werden
Zumal dieser kein runflag hat. (Nimm Worker)
b) warum NOT_STICKY im Foregroundservice ?
 
Zuletzt bearbeitet:
@swa00 danke für deine schnelle Antwort, eigentlich will ich eine andere Oberfläche öffnen, hatte das nur erst mit der MainActivity probiert, aber wie gesagt, so weit komm ich erst gar nicht da es vorher schon crasht.

LogCat im Anhang
 

Anhänge

  • logcat.txt
    31,5 KB · Aufrufe: 41
steht mehrfach da , warum die App crashed ....

Locationservices in einen Forgroundservice sind nicht erlaubt und benötigen eine gesonderte Freigabe von Google
java.lang.SecurityException: Starting FGS with type location callerApp=ProcessRecord{9855156 29059:com.example.alarming_1/u0a502} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_LOCATION] any of the permissions allOf=false [android.permission.ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION] and the app must be in the eligible state/exemptions to access the foreground only permission
 
Zuletzt bearbeitet:
@swa00 jetzt hab ich das nochmal so abgeändert wie es vorher war.
Die MainActivity öffnet sich alle 5 sekunden, solange die Anwendung im Vordergrund sichtbar ist. Sobald ich sie wegklicke geht nix mehr. Nur die serveranfragen.

Gibt es da irgendeine Lösung?

Neues LogCat ohne Fehler wurde hinzugefügt
 

Anhänge

  • app.zip
    7 KB · Aufrufe: 29
Die MainActivity öffnet sich alle 5 sekunden, solange die Anwendung im Vordergrund sichtbar ist.
Ehrlich gesagt , verstehe ich im Moment wirklich nicht , was du machen möchtest ...
Solange die Anwendung im Vordergund ist ? - Dann läuft doch dein Acivity schon - warum nochmal ?


Dein Source startet eine Loop , und quetscht dir alle 5 sekunden einen Launch der Activity Intent rein -
Das ist erst mal überhaupt nicht Sinn und Zweck eines Foreground servcies.

Ein Foregroundservice ist eine eigenständige Instanz mit Notification und soll NUR Hintergrund-Aktivitäten ausführen.

Entweder startet man eine Acitivity mit Click auf die Notification -
oder , wenn du ein Dialog angezeigt haben möchtest :
Intent an die Activity Bundle Flag übergeben - App starten und Dialog ausgeben

Aber innerhalb eines Foregroundservices einen Dialog ausgeben - geht schon lange nicht mehr
Das war mal irgendwo bei API 18 möglich aber definitiv nicht mehr ab API 32
 
Zuletzt bearbeitet:
@swa00 wenn man angerufen wird auf dem smartphone öffnet doch auch ein menü. Da kann man anruf annehmen oder ablehnen. Das muss doch auch über einen Service im Hintergrund laufen.
Ich mache das mit den 5 sekunden um zu testen ob das funktioniert. Das mit den 5 sekunden fliegt nachher raus.

Was ich machen will ist folgendes:

Es kommt vom Server ein Signal rein auf den Client (Smartphone) lass es ein char sein 'a' oder so. Sobald dieses Signal rein kommt soll ein Alarmton losgehen und eine Oberfläche mit einem Button öffnen. Mit diesem Button kann ich dann den Alarmton wieder beenden.
Diese App soll im Hintergrund laufen, ohne das die Oberfläche die ganze Zeit offen ist und zwar solange bis ich die App unter den Einstellungen beende.


Oder gibt es eine andere Möglichkeit wenn nicht mit dem Foregroundservice? Hab aber gelesen das wenn es langfristig laufen soll und aufgaben erledigen soll der Foregroundservice geeignet sein
Beiträge automatisch zusammengeführt:

Es gibt ja auch so viele Apps wie Kicker, Facebook usw du hast diese Apps nicht offen im Vordergrund, wenn du eine Nachricht bekommst kommt aber auch eine Pushnachricht und einen Ton.

Aber das beste Beispiel ist das Telefon selber was ich oben erwähnt habe. Sobald ein Anruf reinkommt bekommst du die Buttons Anruf Annehmen oder Ablehnen. Also muss das ja irgendwie gehen.

Da wäre ich sehr dankbar wenn mir da einer einen Hinweis, eine Lösung dazu hat.
 
Zuletzt bearbeitet:
wenn man angerufen wird auf dem smartphone öffnet doch auch ein menü. Da kann man anruf annehmen oder ablehnen. Das muss doch auch über einen Service im Hintergrund laufen.
Richtig , das ist aber keine Dritt-App von Dir , sondern ein Service , der vom Hersteller im System integriert ist .
Der entscheidende Unterschied.

Oder gibt es eine andere Möglichkeit wenn nicht mit dem Foregroundservice? Hab aber gelesen das wenn es langfristig laufen soll und aufgaben erledigen soll der Foregroundservice geeignet sein
Doch, ein Background service der mit FCM/Worker o.ä. getriggert wird.
Und bei Allen solltest du die Non-Battery-Optimation integrieren .

Es gibt ja auch so viele Apps wie Kicker, Facebook usw du hast diese Apps nicht offen im Vordergrund, wenn du eine Nachricht bekommst kommt aber auch eine Pushnachricht und einen Ton.
Das ist ein FCM Service mit Notification - das hat nichts mit deinem periodischen TCP Request zu tun .
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Alex1978
@swa00 danke dir das hört sich gut an, werde ich mal testen.

Ja bei mir geht es aber um eine Meldung/einer Info die von einem Server kommt. Kann ich also nicht anders machen als mit einem Server Request
 
Zuletzt bearbeitet:
Bitte - viel Erfolg



Beiträge automatisch zusammengeführt:

Ja bei mir geht es aber um eine Meldung/einer Info die von einem Server kommt. Kann ich also nicht anders machen als mit einem Server Request
Vorschlag zu deinem Foreground- Service.

Bei jedem Event erstellst du eine neue Notification , oder du updatest die Vorhandene.
Bitte beachte, dass die Vorhandene ab API32 weggewischt werden kann , also solltest du diese mit einem Dismiss Intent ausstatten
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Alex1978
@swa00 also ich habe das jetzt mit Notification gemacht. Wenn ich auf die Notification klicke übergebe ich einen Wert an die activity den ich überprüfe. Das funktioniert sehr gut. Könnte auch per klick auf Notification eine activity öffnen, brauch ich aber nicht.

Vielen dank nochmals
 
  • Danke
Reaktionen: swa00
Bitte sehr , gerne geschehen :)
 
Status
Dieses Thema wurde gelöst! Zur Lösung springen…

Ähnliche Themen

AnnaBauer21
Antworten
6
Aufrufe
242
AnnaBauer21
AnnaBauer21
MES
Antworten
10
Aufrufe
1.200
MES
MES
A
  • AnimaAngelo85
Antworten
1
Aufrufe
563
swa00
swa00
Zurück
Oben Unten