![]() |
Android Intent "Action_Call"
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:
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.
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; Vielen dank schonmal! |
AW: Android Intent "Action_Call"
Zitat:
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 ? ![]() |
AW: Android Intent "Action_Call"
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. |
AW: Android Intent "Action_Call"
Zitat:
Das wird vielleicht eher im Hintergrund laufen, aber auch der Internetzugriff im Hintergrund wird immer stärker reglementiert. |
AW: Android Intent "Action_Call"
Zitat:
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 :cry: 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:
Irgendwas mache ich da grundsätzlich falsch.
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; |
AW: Android Intent "Action_Call"
Zitat:
Zitat:
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 :stupid: 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. |
AW: Android Intent "Action_Call"
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 :wink:
Ich habe bei meiner Recherche eben noch etwas interessantes dazu gefunden: ![]() 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:
Ob das jetzt auch unter Android 10 bzw 11 läuft sehe ich dann erst morgen...
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; |
AW: Android Intent "Action_Call"
Zitat:
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. |
AW: Android Intent "Action_Call"
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz