Как изменить звук уведомления по умолчанию другим звуком, который уже установлен на смартфоне android - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу, чтобы мое приложение не воспроизводило звук уведомлений по умолчанию, но я хочу воспроизводить любой другой звук, установленный на смартфонах Android. Я знаю, что все другие звуки уведомлений можно изменить на смартфонах Android в разделе «Настройки приложения» / «Категории уведомлений». У меня вопрос, как я могу объединить этот звук, например, «Хорошие новости» с MyNotification.SoundName. Я использую Delphi 10.3.3

procedure TForm1.Button1Click(Sender: TObject);
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'MyNotification';
    MyNotification.Title := 'Notification 01';
    // MyNotification.SoundName := how to get another sound that are installed on the smartphone 
    // for example
    MyNotification.SoundName := TPath.Combine(TPath.???, 'Good news???.mp3'); 
    MyNotification.FireDate := Now; 
    NotificationCenter1.ScheduleNotification(MyNotification);
  finally
    MyNotification.Free;
  end;
end;

Большое спасибо за любые предложения и помощь.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Разверните файл mp3 в. \ Assests \ internal

Вы можете воспроизвести файл, используя этот пример кода, предполагая, что имя файла хранится в переменной 'filename':

    uses
      Androidapi.JNI.Media;    
    var
      mp : JMediaPlayer
    begin
      mp := tjmediaplayer.Create;
mp.setdatasource(StringToJString(IncludeTrailingPathDelimiter(System.ioutils.TPath.GetDocumentsPath) + filename));
      mp.prepare;
      mp.start;
      // mp.release;
    end;

На самом деле вы должны создать и выпустить медиаплеер вне этой процедуры в формах «oncreate» и «ondestroy», поэтому я закомментировал часть релиза в примере. В противном случае я ожидаю, что релиз немедленно остановит медиаплеер.

0 голосов
/ 05 февраля 2020

Если я делаю тест для просмотра файлов в этом каталоге, «TPath.GetRingtonesPath» ничего не отображается.

var
  aStrArray: TStringDynArray;
  i, icount: integer;
begin
    aStrArray := TDirectory.GetFiles(TPath.GetRingtonesPath);
    icount := High(aStrArray);
    form1.memo2.lines.add('> '+TPath.GetRingtonesPath+'<   Count='+IntToStr(icount));
    for i := 0 to icount do form1.memo2.lines.add( aStrArray[i]);
end;

Я сделал еще один тест и добавил аудиофайл «Beep01.mp3» для развертывания

 assets/ 

, выполнив тестирование, файл хорошо существует в этом каталоге "TPath.GetPublicPath"

Я пытаюсь добавить звук в уведомление SoundName, как это, но при запуске уведомления нет звука появляются звуковые сигналы.

 MyNotification.SoundName: = TPath.Combine(TPath.GetPublicPath, 'Beep01.mp3');

что я могу сделать, чтобы воспроизвести другой тон.

...