Воспроизведение звука, если iPhone находится в режиме молчания [дубликат]

Вы можете использовать json_decode () для преобразования строки json в объект / массив PHP.

Например.

Вход:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

Выход:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

Несколько точек для запоминания:

  • json_decode требует, чтобы строка была действительной json, иначе она вернется NULL.
  • В случае отказа декодирования json_last_error() можно использовать для определения точного характера ошибки.
  • Сделать убедитесь, что вы перешли в utf8 контент, или json_decode может выйти из строя и просто вернуть значение NULL.

50
задан jszumski 17 April 2013 в 14:58
поделиться

8 ответов

Да, вы можете воспроизводить звук, когда телефон настроен на вибрацию. Просто используйте класс AVAudioPlayer.

По умолчанию воспроизведение звука аудио-сессии будет ~ не соответствовать настройке переключателя отключения звука на iPhone. Другими словами, если вы звоните, чтобы воспроизвести звук, а тихий (аппаратный) переключатель на iPhone настроен на молчание, вы все равно услышите звук.

Это то, что вы хотите. Итак, теперь вы знаете, что воспроизведение аудио сессии, когда ваш телефон находится в бесшумном режиме, по-прежнему будет воспроизводить звук, который вам просто нужно знать, как создать аудио-сессию для воспроизведения звука, например: взято с этого сайта: http: //iosdevelopertips.com/audio/playing-short-sounds-audio-session-services.html

SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle]
   pathForResource:@"RapidFire" ofType:@"wav"];    

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);

Для этого вам нужно будет импортировать файл заголовка, а также добавьте AudioToolbox.framework в ваш проект.

И все.

Итак, из этого ответа вы теперь знаете, что вы можете воспроизводить звук, пока телефон вибрирует. Вам не нужен дополнительный или специальный код, который позволит вам выполнять эту функцию, поскольку она уже делает это по умолчанию.

Pk

12
ответ дан Cœur 21 August 2018 в 23:30
поделиться

для Objective C, вы можете воспроизводить системный звук с помощью следующего кода:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
*The system path could be modified.*
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf";
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player play];
1
ответ дан Dennis Lan 21 August 2018 в 23:30
поделиться

Просто поместите это в свой viewDidLoad:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                         sizeof(sessionCategory), &sessionCategory);
2
ответ дан Dex 21 August 2018 в 23:30
поделиться

Работает на iOS 6 и выше

NSError *setCategoryErr = nil;
NSError *activationErr  = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
9
ответ дан hfossli 21 August 2018 в 23:30
поделиться
  • 1
    в Swift do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance().setActive(true) } catch let error as NSError { // report error } – Guy 15 April 2016 в 20:14

Для воспроизведения звука в бесшумном режиме и даже когда он идет на задний план, попробуйте следующее:

Поместите этот код в приложение: didFinishLaunchingWithOpitons:

[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

и этот код в applicationDidEnterBackground:

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

Также установите фоновый режим воспроизведения аудио / воздушного воспроизведения и включите заголовок AVFoundation.

1
ответ дан Jeet 21 August 2018 в 23:30
поделиться

И для Swift 2 и Swift 3

    do {
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
      try AVAudioSession.sharedInstance().setActive(true)
    } catch {
      print(error)
    }
9
ответ дан Mamta 21 August 2018 в 23:30
поделиться

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

Если вы используете Audio Sessions, включите <AVFoundation/AVFoundation.h> в начале вашего файла, а

[[AVAudioSession sharedInstance]
                setCategory: AVAudioSessionCategoryPlayback
                      error: nil];

должны выполнить трюк. Обратите внимание, что если вы воспроизводите музыку или звуки, воспроизведение iPod будет приостановлено.

Как только это было сделано, возможно, где-то в инициализации одного из ваших классов, который воспроизводит звуки, вы можете создавать такие звуки:

// probably an instance variable: AVAudioPlayer *player;
NSString *path = [[NSBundle mainBundle] pathForResource...];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url];

Когда это будет сделано, вы можете играть с ним в любое время, когда хотите:

[player play]; // Play the sound
[player pause]; // Pause the sound halfway through playing
player.currentTime += 10 // skip forward 10 seconds
player.duration // Get the duration

И другие приятные вещи. Посмотрите ссылку на AVAudioPlayer .

115
ответ дан Nathan Tuggy 21 August 2018 в 23:30
поделиться
  • 1
    есть ли какой-либо код для воспроизведения звука в бесшумном режиме – Pankaj Kainthla 18 September 2010 в 11:01
  • 2
    Это должен быть принятый ответ. – Tyilo 13 August 2012 в 21:25
  • 3
    Привет, ребята, сначала спасибо cool_me5000 за ответ. В моем случае звук звучит, когда приложение находится в фоновом режиме (с минимальным объемом), но если приложение находится на переднем плане (с минимальным объемом), звук не звучит. Я тестирую в iPod touch 4 поколения (я сказал это, потому что у него нет бесшумного переключателя). Знаете ли вы, что я могу изменить для достижения того, что приложение звучит в обеих ситуациях? – xarly 25 July 2013 в 09:36
  • 4
    отлично @ cool_me5000 – KDeogharkar 23 April 2015 в 05:15
  • 5
    В случае, если вы окажетесь здесь, потому что это решение не будет работать на iPad, но только на iPhone: у меня была эта проблема при настройке категории AVAudioSession перед представлением AVPlayerViewController. Если я установил категорию в блоке завершения вызова presentViewController (и до фактического вызова play()), он отлично работает в обоих семействах устройств. – Jerrot 10 February 2017 в 15:44
0
ответ дан budidino 4 November 2018 в 21:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: