Перейти к содержанию
Fire Monkey от А до Я
  • 0

Звук и вибра при нажатии на кнопку


Pavel M

Вопрос

Как проиграть стандартный звук системы "кнооцк" при нажатии на кнопку?

Про вибрацию вроде уже нашел:

uses
  FMX.Helpers.Android, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os,
  Androidapi.JNI.App, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText;

implementation
 
{$R *.fmx}
 
uses
  FMX.Helpers.Android, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os,
  Androidapi.JNI.App, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText;


procedure TForm1.Button1Click(Sender: TObject);
var
  VibratorObj: JObject;
  Vibrator: JVibrator;
begin
  VibratorObj := SharedActivity.getSystemService(TJActivity.JavaClass.VIBRATOR_SERVICE);
  Vibrator := TJVibrator.Wrap((VibratorObj as ILocalObject).GetObjectID);
  Vibrator.vibrate(StrToInt(ClearingEdit1.Text));
end;

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 1
uses 
  AndroidApi.JNI.Media;

procedure MakeSound(ADuration: Integer);
var
  Volume: Integer;
  StreamType: Integer;
  ToneType: Integer;
  ToneGenerator: JToneGenerator;
begin
  Volume := TJToneGenerator.JavaClass.MAX_VOLUME; // задаем громкость
  StreamType := TJAudioManager.JavaClass.STREAM_ALARM; 
  ToneType := TJToneGenerator.JavaClass.TONE_DTMF_0; // тип звука
  ToneGenerator := TJToneGenerator.JavaClass.init(StreamType, Volume);
  ToneGenerator.startTone(ToneType, ADuration);
end;

Типы звука можно посмотреть здесь 

Изменено пользователем Rusland
Ссылка на комментарий
  • 0

Спасибо, звук воспроизводиться.

Однако при частом многократном обращении (поставил событие на клик по кнопке и покликал) появляются ошибки:

java.lang.RuntimeExceprion: Init failed

И я не нашел стандартного звука "чпок" :), как будто все звуки только для работы с телефонией.

Изменено пользователем pvmmpv
Ссылка на комментарий
  • 0

я так и сделал, но полагаю это костыль.

Неужели нет API для применения. 

Интересна так же причина возникающих ошибок у предложенного вами варианта после 30 кликов

Ссылка на комментарий
  • 0

Не нужно каждый раз делать новый генератор.

Выносим в форму

 ToneGenerator: JToneGenerator;
procedure TForm1.FormShow(Sender: TObject);
begin
  inherited;
  {$IFDEF ANDROID}
  ToneGenerator:=nil;
  {$ENDIF}
end;


 

procedure TForm1.beep;
var
  Volume: Integer;
  StreamType: Integer;
  ToneType: Integer;
begin
  {$IFDEF ANDROID}
  if not assigned(ToneGenerator) then
  begin
    Volume := TJToneGenerator.JavaClass.MAX_VOLUME; // задаем громкость
    StreamType := TJAudioManager.JavaClass.STREAM_NOTIFICATION;
    ToneType := TJToneGenerator.JavaClass.TONE_CDMA_SOFT_ERROR_LITE; // тип звука
    ToneGenerator := TJToneGenerator.JavaClass.init(StreamType, Volume);
  end;
  ToneGenerator.startTone(ToneType,1000);
  {$ENDIF}
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  {$IFDEF ANDROID}
  if assigned(ToneGenerator) then
    ToneGenerator.release;
  {$ENDIF}
end;

 

 

Ссылка на комментарий
  • 0

Деплоим в assets\internal\ файл звука (мр3 или ogg), размещаем на Форме компонент MediaPlayer1 и используем:

procedure TMainForm.MakeSound;
begin
  {$IFDEF ANDROID}
   MediaPlayer1.FileName := TPath.Combine(TPath.GetDocumentsPath, 'Button.ogg');
   MediaPlayer1.Play;
  {$ENDIF}
end;

К примеру:

procedure TMainForm.Button2Click(Sender: TObject);
begin
//====================
...

...
  MakeSound;
//======================
end;

 

Изменено пользователем Hevard
Ссылка на комментарий
  • 0
В 29.03.2016 в 21:09, Pavel M сказал:

как будто все звуки только для работы с телефонией.

Всё верно. В этом примере используются тоновые звуки стандарта CDMA

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...