Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Notifications mit individuellem Sound (https://www.delphipraxis.net/214780-notifications-mit-individuellem-sound.html)

bcvs 8. Mär 2024 11:32

Notifications mit individuellem Sound
 
Hallo zusammen,

Mal wieder eine Frage zu Notifications:
Ich möchte meinen Notifications einen individuellen Sound mitgeben.

Wenn man die Dokumentation und verschiedene Forumsbeiträge liest, scheint das ja auch ganz einfach zu seien:

Delphi-Quellcode:
Notification := NotificationCenter1.CreateNotification;
Notification.EnableSound:=true;
Notification.SoundName:= MySoundfile;
Aber wenn ich das so mache, nimmt Andrpoid immer noch den Standard-Sound und unter iOS höre ich überhaupt nichts.

Auf beiden Platformen kann ich den Sound mit dem TMediaplayer abpielen lassen. So weiß ich, dass der Soundfile auf dem Handy angekommen ist und dass MySoundfile korrekt ist.

Ich benutze ein mp3 untere Android und ein caf unter iOS:

Delphi ist V12

Irgendwelche Ideen?

himitsu 8. Mär 2024 11:47

AW: Notifications mit individuellem Sound
 
Gab es da nicht eine neue API (welche Delphi nicht nutzt)
und bei der alten API bestimmt nun das OS den Ton (und ignoriert deine Vorgabe) ?

bcvs 8. Mär 2024 16:17

AW: Notifications mit individuellem Sound
 
Auch auf einem älteren Handy von 2018 mit Android 9 habe ich das selbe verhalten. Das verwendet ja wohl noch nicht diese neue API.

Kai_in_HH 9. Mai 2024 21:26

AW: Notifications mit individuellem Sound
 
Verdammte Axt, ich habe das gleiche Problem.

Ich stelle in assets\internal\ meine eigene mp3 bereit, sie wird aber nicht als Notification-Ton verwendet. Es kommt immer nur der Standard-Ton.

Hier mein Code
Code:
procedure TForm1.PresentNotificationClick(Sender: TObject);
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'BikeAppNotification';
    MyNotification.AlertBody := 'BikeApp Notification';
    MyNotification.FireDate := Now;
    MyNotification.EnableSound := True;
    MyNotification.SoundName := TPath.Combine(ProgDir, 'bell.mp3');;
    NotificationCenter1.PresentNotification(MyNotification);
  finally
    MyNotification.DisposeOf;
  end;
end;
ProgDir wird in einer anderen Funktion so ermittelt und funktioniert z.B. auch einwandfrei für die Arbeit mit meiner SQLLite-DB, daran kanns also nicht liegen

Code:
 ProgDir := TPath.GetDocumentsPath;
Also das ist nach allen Anleitungen eigentlich der richtige Weg. Interessiert nur meine App (oder den Delphi-Compiler?) nicht.

Kai

himitsu 9. Mai 2024 21:53

AW: Notifications mit individuellem Sound
 
Auf welcher Plattform?

Für Android steht z.B. etwas bezüglich setSound in der Hilfe.
https://developer.android.com/refere...icationChannel

Wobei ich irgendwie das Gef+hl hab, als wenn Emba vergessen hat das hasUserSetSound zu implementieren?

Kai_in_HH 9. Mai 2024 22:01

AW: Notifications mit individuellem Sound
 
Ups, sorry, ja, wir reden über Android.

Das Gefühl habe ich irgendwie auch.

Komischerweise, wenn ich das Handy via USB am PC anschließe, sehe ich im Explorer unter \Interner Speicher\Android\data\com.embarcadero.BikeTracking App\files die mp3, die nicht gespielt wird.
Aber die DB nicht, die einwandfrei bearbeitet werden kann.

Maximale Verwirrung macht sich breit.

Und soweit ich Deine Antwort begrüße, anfangen kann ich damit nix. Ich bin offiziell anerkannter Java-Hasser.
Ich weiß, ein Widerspruch in sich, Java nicht mögen und für Android klöppeln...aber genau darum nehme ich ja Delphi.

himitsu 9. Mai 2024 22:06

AW: Notifications mit individuellem Sound
 
Wobei Delphi unter Android intern auf diese Java-Funktionen zugreift.

Kai_in_HH 9. Mai 2024 22:13

AW: Notifications mit individuellem Sound
 
Weiß ich doch, dass Android ohne Java(-Sch*ss) nicht geht.
Aber mögen muss ich es deswegen nicht.

Ich nehme halt Delphi damit ich mit dem Schrott nicht in Verbindung kommen muss.
Aber erlebe halt immer wieder Hindernisse. Wobei ich nicht weiß, ob Embarcadero in einer nicht sauberen Implementierung daran Schuld ist, oder etwas anderes.

Aber die Diskussion darüber löst nicht unser Problem...

TomyN 10. Mai 2024 06:11

AW: Notifications mit individuellem Sound
 
Also unter windows würde ich sagen, dass kein mp3 für solche Sounds verwendet wird, sonden halt wav. Bei Android hab ich da aber keine Ahnung.

TurboMagic 10. Mai 2024 07:59

AW: Notifications mit individuellem Sound
 
Zitat:

Zitat von Kai_in_HH (Beitrag 1536535)
Weiß ich doch, dass Android ohne Java(-Sch*ss) nicht geht.
Aber mögen muss ich es deswegen nicht.

Ich nehme halt Delphi damit ich mit dem Schrott nicht in Verbindung kommen muss.
Aber erlebe halt immer wieder Hindernisse. Wobei ich nicht weiß, ob Embarcadero in einer nicht sauberen Implementierung daran Schuld ist, oder etwas anderes.

Aber die Diskussion darüber löst nicht unser Problem...

Nee. Falls du aber ein kleines Demo Programm zusammen hast welches das Problem zeigt kannst du gerne
hier ein Ticket erstellen:

https://qp.embarcadero.com/

Dann sollte sich EMBT mal irgendwann des Themas annehmen.

Kai_in_HH 10. Mai 2024 12:32

AW: Notifications mit individuellem Sound
 
Zitat:

Zitat von TomyN (Beitrag 1536539)
Also unter windows würde ich sagen, dass kein mp3 für solche Sounds verwendet wird, sonden halt wav. Bei Android hab ich da aber keine Ahnung.

Ich weiß nicht mehr seit welcher Version, aber Windows unterstützt schon länger MP3s für alle möglichen Events....

Unter Android ist MP3 auch kein Problem, ich habe viele eigene kleine MP3s auf meinem Handy und als Ping für SMS, WhatsApp, Mail.....name it, you got it....eingestellt.

Kai_in_HH 10. Mai 2024 12:36

AW: Notifications mit individuellem Sound
 
Zitat:

Zitat von TurboMagic (Beitrag 1536546)
Nee. Falls du aber ein kleines Demo Programm zusammen hast welches das Problem zeigt kannst du gerne
hier ein Ticket erstellen:

https://qp.embarcadero.com/

Dann sollte sich EMBT mal irgendwann des Themas annehmen.

Dazu muss ich noch nicht mal eine Demo-App klöppeln, wie es geht - bzw. gehen soll steht auf deren eigener Seite http://docwiki.embarcadero.com/RADSt...S_and_Android)

Kai_in_HH 10. Mai 2024 12:56

AW: Notifications mit individuellem Sound
 
Anzeige ist raus ... ach Quatsch, ich meine Ticket ist eröffnet. 8-)

Kai_in_HH 10. Mai 2024 17:49

AW: Notifications mit individuellem Sound
 
UPDATE:
Habe meine Anwendung mal wieder für Windows kompiliert und auch hier kommt die Notification (unten rechts am Bildschirm), aber auch nicht mit meinem Ton, sondern das Standard-Palimpalim.

TurboMagic 11. Mai 2024 08:57

AW: Notifications mit individuellem Sound
 
Zitat:

Zitat von Kai_in_HH (Beitrag 1536565)
Anzeige ist raus ... ach Quatsch, ich meine Ticket ist eröffnet. 8-)

Es wäre schön, wenn du den Link zum Ticket hier posten könntest.
Dann können wir es ggf. verfolgen, kommentieren (falls uns noch was hilfreiches dazu einfällt) usw...

Kai_in_HH 11. Mai 2024 10:32

AW: Notifications mit individuellem Sound
 
Zitat:

Zitat von TurboMagic (Beitrag 1536578)
Es wäre schön, wenn du den Link zum Ticket hier posten könntest.
Dann können wir es ggf. verfolgen, kommentieren (falls uns noch was hilfreiches dazu einfällt) usw...

Gute Idee...in der Hoffnung, dass das Ticket "öffentlich lesbar" ist.

https://embt.atlassian.net/servicede...rtal/1/RSS-887

bcvs 13. Mai 2024 16:37

AW: Notifications mit individuellem Sound
 
Sorry, ich hatte vergessen, meine Lösung hier zu posten.

Man muss das über einen Channel machen. Ich hatte dazu ein Ticket im Customer Support Portal eröffnet. Die Antwort:

Zitat:

I must stay there isn't a lot of information on this either in the Android documentation or online so here are the important points.

1) sound needs to be from presented as "content://" it be to make is shareable with the external OS to play the notification sound., because the notification is set up using an Intent and that means the it has to be a shareable URI.

2) the sound can only be set at the channel level AND when the channel is created, so the default channel will always have the default sound. So to have new sound you have to set it at when a new channel is created.
3) Setting the sound at the notification level has been deprecated in Android 7 or 8, that sound is not used at all. (I learnt this from the looking at the Android source)
4) I have modified your code so I could figure out how the notifications work, but it all boils down to a simple function to get the file URI, and to use the file URI you need to need to specify secure file sharing in the entitlements list, in the project options, this will give you the ability to use the file provider.
So läuft's bei mir:
Delphi-Quellcode:
{$ifdef ANDROID}

const
    sChannelID = 'MyChannelID'; // to have a custom sound you HAVE to use custom channel
                                // as the channel's sound is set at creation

//this is crucial bit...
// to use fileprovider you need to specify secure file sharing in the entitlements list
function GetFileUriStr(const AFileName: string): string;
var
  LFile: JFile;
begin
  LFile := TJFile.JavaClass.init(StringToJString(AFileName));
  Result := JStringToString(TAndroidHelper.JFileToJURI(LFile).toString);
end;

{$endif}

procedure TdmNotification.CreateDefaultNotificationChannel;
// wird vorab aufgerufen, z.B. im Create
var
 NotificationChannel: TChannel;
begin
 NotificationChannel := NotificationCenter.CreateChannel;
 NotificationChannel.Id := sChannelID;
 NotificationChannel.Title := 'Custom notification channel';
 NotificationChannel.Description := 'Notification channel to test sound';
 NotificationChannel.Importance := TImportance.High; // NOTE: This is a 'heads-up notification'.
 //the CONTENT URI string needs to be set here and will be used for the all THIS channel notifications
 NotificationChannel.SoundName:= GetFileUriStr(GetSoundFileName);
 NotificationCenter.CreateOrUpdateChannel(NotificationChannel);
end;


function TdmNotification.GetSoundFileName: string;
begin
{$IFDEF IOS}
  Result := 'mixkit-bell-notification-933.caf';
{$ELSE}
  Result := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'mixkit-bell-notification-933.mp3';
{$ENDIF}
end;

procedure TdmNotification.CreateNotification(AlarmTime);
var Notification: TNotification;
begin
  Notification := NotificationCenter.CreateNotification;
  try
    Notification.Name    :='MyNotification';
    Notification.Title   :='Test Notification Title';
    Notification.AlertBody:='Test Notification with individual sound';
    {$ifdef ANDROID}
    Notification.ChannelId := sChannelID;
    {$else}
    Notification.EnableSound:=true;
    Notification.SoundName:= GetSoundFileName;
    {$endif}

    Notification.FireDate:= AlarmTime;

    NotificationCenter.ScheduleNotification(Notification);
  finally
    Notification.Free;
  end;
end;

himitsu 13. Mai 2024 17:23

AW: Notifications mit individuellem Sound
 
Wenn man schon TPath benutzt, dann kann man auch gleich Weiteres davon verwenden.
Delphi-Quellcode:
Result := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'mixkit-bell-notification-933.mp3';

Result := TPath.Combine(TPath.GetDocumentsPath, 'mixkit-bell-notification-933.mp3');

Kai_in_HH 13. Mai 2024 20:34

AW: Notifications mit individuellem Sound
 
@bcvs
Das wäre eigentlich genau das Beispiel, wonach ich gesucht habe, da gibts echt nicht viel, aber leider bekomme ich in der Zeile

Code:
  NotificationChannel.SoundName:= GetFileUriStr(TPath.Combine(TPath.GetDocumentsPath, 'bell.mp3'));
der Prozedur CreateDefaultNotificationChannel die Fehlermeldung, dass es die Funktion im Objekt TChannel nicht gibt.

Kommentiere ich diese Zeile aus, lässt sich die App natürlich kompilieren, löst aber nicht das Problem.
Und für Windows wird es gar nicht gelöst, da ja einige Funktionen / Befehle eh nur unter Android verfügbar sind.

Und nu? Liegt es vielleicht daran, dass ich Delphi 11 CE verwende und nicht die Vollversion 12?

bcvs 14. Mai 2024 07:33

AW: Notifications mit individuellem Sound
 
Was gibt es bei dir nicht? Das Feld Soundname? Würde mich schon sehr wundern.

Kai_in_HH 14. Mai 2024 07:45

AW: Notifications mit individuellem Sound
 
Zitat:

Zitat von bcvs (Beitrag 1536667)
Was gibt es bei dir nicht? Das Feld Soundname? Würde mich schon sehr wundern.

Genau. E2003: Undeklarierter Bezeichner: 'Soundname' in ....

Strange, oder?

DeddyH 14. Mai 2024 08:45

AW: Notifications mit individuellem Sound
 
Ich habe eben nachgesehen, das Feld wurde anscheinend erst mit Delphi 12 eingeführt.

Kai_in_HH 14. Mai 2024 09:10

AW: Notifications mit individuellem Sound
 
Zitat:

Zitat von DeddyH (Beitrag 1536671)
Ich habe eben nachgesehen, das Feld wurde anscheinend erst mit Delphi 12 eingeführt.

:wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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