AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Android Intent "Action_Call"

Ein Thema von Phantom1 · begonnen am 28. Sep 2021 · letzter Beitrag vom 30. Sep 2021
Antwort Antwort
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#1

Android Intent "Action_Call"

  Alt 28. Sep 2021, 14:33
Moin zusammen,

hab da mal eine Anfängerfrage zur Android APP Entwicklung.

Die APP soll automatisch einen Anruf tätigen. Das klappt soweit mit dem Code hier:

Code:
procedure TTestForm.CallAPhone(const ANumber: string);
var
  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_CALL);
  Intent.setData(StrToJURI('tel:' + ANumber));
  TAndroidHelper.Activity.startActivity(Intent);
end;
Aber sobald die APP im "Hintergrund" läuft funktioniert dieser Code unter den neueren Android Versionen nicht mehr. Wie kann man das Problem lösen? mit einem ForegroundService oder so? Hab schon vieles ausprobiert, aber es klappt leider nicht.

Vielen dank schonmal!
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#2

AW: Android Intent "Action_Call"

  Alt 28. Sep 2021, 18:19
Die APP soll automatisch einen Anruf tätigen. Das klappt soweit mit dem Code hier:
Im Hintergrund anrufen ist so ziemlich am Verbotensten (wenn man das so weit steigern kann) was man unter Mobile machen kann
Ich fürchte dafür gibt es gar keine Lösung, ausser irgendwelchen Hacks.
Was genau soll das denn bringen, das Phone ist gerade in der Tasche, und die App ruft irgendwo an ?

Vielleicht funktioniert das bei Dir ?
https://stackoverflow.com/questions/...d-call-android

Geändert von Rollo62 (28. Sep 2021 um 18:23 Uhr)
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Android Intent "Action_Call"

  Alt 29. Sep 2021, 08:38
Danke für deine Antwort. Der Sinn dahinter ist eine art Notfall APP die in bestimmten Situationen automatisch einen Anruf an eine vorher angegebene Person tätigt.

Auf Android 8 funktioniert der Code übrigens auch im Hintergrund, aber bei Android 10 oder neuer klappt das nicht mehr. Der Link hat mir leider nicht weitergeholfen.
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#4

AW: Android Intent "Action_Call"

  Alt 29. Sep 2021, 11:42
Danke für deine Antwort. Der Sinn dahinter ist eine art Notfall APP die in bestimmten Situationen automatisch einen Anruf an eine vorher angegebene Person tätigt.

Auf Android 8 funktioniert der Code übrigens auch im Hintergrund, aber bei Android 10 oder neuer klappt das nicht mehr. Der Link hat mir leider nicht weitergeholfen.
Vielleicht könntest Du eine Server-Lösung dazu bauen, so das der Anruf nicht vom Phone selbst initiert werden muss.
Das wird vielleicht eher im Hintergrund laufen, aber auch der Internetzugriff im Hintergrund wird immer stärker reglementiert.
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Android Intent "Action_Call"

  Alt 29. Sep 2021, 16:12
Vielleicht könntest Du eine Server-Lösung dazu bauen, so das der Anruf nicht vom Phone selbst initiert werden muss.
Das wäre zwar eine Interessante Lösung, aber ziemlich komplex und warscheinlich auch mit extra kosten verbunden.

Wäre es mit einen ForegroundService nicht möglich einen solchen Intent zu starten? Oder sind ForegroundServices dafür nicht geeignet? Ich habe es zwar bereits versucht, aber die APP stürzt dann einfach ab, vermutlich mache ich da etwas falsch Die APP die ich erstelle nutzt bereits einen ForegroundService (für GPS) und wenn ich über diesem ForegroundService zb einfach nur eine Webseite öffnen will dann klappt das ebenso nicht:
Code:
procedure TTest.OpenWebsite(const URL: string);
var
  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.setData(StrToJURI(URL));
  Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  TAndroidHelper.Activity.startActivity(Intent);
end;
Irgendwas mache ich da grundsätzlich falsch.
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#6

AW: Android Intent "Action_Call"

  Alt 29. Sep 2021, 18:16
Vielleicht könntest Du eine Server-Lösung dazu bauen, so das der Anruf nicht vom Phone selbst initiert werden muss.
Das wäre zwar eine Interessante Lösung, aber ziemlich komplex und warscheinlich auch mit extra kosten verbunden.
Kommt drauf an was genau Du machen willst, ein einfach PHP Server kostet nur ein paar Euro.


Oder sind ForegroundServices dafür nicht geeignet? Ich habe es zwar bereits versucht, aber die APP stürzt dann einfach ab, vermutlich mache ich da etwas falsch
Das ist genau was passiert wenn man was macht das dem Phone nicht "gefällt", die App wird einfach gekillt, in der Regel ohne irgendwelche sinnvollen Fehlermeldungen woran es liegt.

Im Foreground ist der Nutzer aktiv an der App, Display ist an, da kannst Du zwar nicht Alles, aber Einiges machen.
Im Background ist die App im Hintergrund, oder sogar das ganze Phone schläft, da ist Alles was Spaß macht nicht mehr erlaubt.
Die Hersteller nennen das Sicherheit

Man kann aber für gewisse Dinge im Hintergrund Rechte anfordern, das Thema ist sehr komplex,
soweit ich weiss gibt es da nichts was im Hintergrund "telefoniert", weil ja auch gar kein User an der App ist.
Du könntest z.B. Notifications schicken, und dann die App hochholen, aber das ist auch nicht sehr attraktiv.

Unter Android könnte man Services anlegen, die können Dinge im Hintergrund erledigen.
Unter IOS gibt es die Background-Modes, die z.B. Location, Bluetooth, Audio, etc. explizit erlauben können.
Sowas wie Telefonieren habe ich noch nicht gesehen, eventuell funktionieren EMail oder SMS.

Das generelle Problem ist das im Hintergrund die App nicht mehr weiterläuft ( es sei denn unter Android hat die einen Service zugewiesen ).
Geht die App in de Hintergrund ( über die ApplicationEvents wird das mitgeteilt ) hat man in der Regel nur eine kurze Zeit
um seine dringendsten Aufgaben zu erledigen ( Task abschliessen, Speichern, etc. ), ich glaube maximal 10 Minuten bevor es gekillt wird, wenn es nicht ein für Background vorgesehener Prozess ist, wie oben.

Ausserdem wird bei den Review seit längermen genau darauf geachtet was deine App im Hintergrund macht, und Du musst das
dem Prüfer gut begründen können.
Selbst wenn es technisch laufen sollte kann es durch die Review-Prüfung fliegen.


Edit:
Ach ja, zur Vervollständigung:
Für solche "Meldungen" sind eigentlich die PushNotifications vorgesehen, die auch halbwegs im Hintergrund funktionieren.
Das könnte man z.B. mit Google Firebase anbinden.

Geändert von Rollo62 (29. Sep 2021 um 18:21 Uhr)
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Android Intent "Action_Call"

  Alt 29. Sep 2021, 21:01
Danke für die Erklärung, die Sache mit der Prüfung im Google Play Store ist mir bewusst. Da sehe ich weniger das Problem

Ich habe bei meiner Recherche eben noch etwas interessantes dazu gefunden: https://stackoverflow.com/questions/...-screen-is-off

Das passt ganz gut zu meinem Problem und unter Android10 funktioniert das scheinbar auch per ForegroundService, dann funktioniert es vielleicht auch auf Android11.

EDIT:
Ich habs jetzt hinbekommen das der Anruf jetzt auch per ForegroundService funktioniert. Ich musste nur eine kleinigkeit an meinem Code ändern, wie folgt:
Code:
procedure TTestService.CallAPhone(const ANumber: string);
var
  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_CALL);
  Intent.setData(StrToJURI('tel:' + ANumber));
  Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  TAndroidHelper.Context.startActivity(Intent);    // anstatt TAndroidHelper.Activity.startActivity(Intent);
end;
Ob das jetzt auch unter Android 10 bzw 11 läuft sehe ich dann erst morgen...
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#8

AW: Android Intent "Action_Call"

  Alt 30. Sep 2021, 07:27
Danke für die Erklärung, die Sache mit der Prüfung im Google Play Store ist mir bewusst. Da sehe ich weniger das Problem
Solltest Du aber, sonst kommt die App nicht in den Store.
Da muss man erklären, dokumentieren, im Zweifel Videos erstellen, Serverzugänge zum Testen bereithalten, etc.
Es kann sein das Google das mal überseieht, aber dann hast du vielleicht beim nächsten Upload das Problem,
wenn Du schon zig Nutzer hast.
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#9

AW: Android Intent "Action_Call"

  Alt 30. Sep 2021, 07:34
Ja WakeLock funktioniert gut, da muss mann höchstens den erhöhten Stromverbrauch erklären.
Man kann einstellen ob voll oder gedimmte Helligkeit (ich meine bei Android, kann auch bei iOS sein müsste ich jetzt nachsehen).
Das heisst aber die App bleibt immer im Vordergund, wie z.B. Youtube solange ein Film läuft,
kann aber trotzdem durch den Nutzer nach hinten gelegt werden.
Wenn die App so noch Sinn macht ist es das Einfachste.

Ich mache mir da einen Timer-Fallback, wenn die App dann ihre Aufgabe erledigt hat kann sie sich selbst schlafen legen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz