Команда php exec (или аналогичная), чтобы не ждать результата

ОБНОВЛЕНИЕ IOS 11.2 с помощью Swift 4:

Теперь, если вы используете AVPlayer для воспроизведения музыкальных файлов, вы также должны настроить MPNowPlayingInfoCenter.default() для отображения информации о воспроизведении. на экране блокировки.

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

Если вы также хотите, чтобы элементы управления работали, вам следует проверить пример проекта Apple здесь: https://developer.apple.com/library/content/samplecode/MPRemoteCommandSample/Introduction/Intro.html#/ / apple_ref / doc / uid / TP40017322

Пример кода Apple охватывает все, но я нахожу его непонятным.

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

ВАЖНОЕ ПРИМЕЧАНИЕ: Если вы НЕ используете AVPlayer для воспроизведения звука. Если вы используете сторонние библиотеки для создания звука или воспроизведения звукового файла, вам следует прочитать комментарии внутри кода. Также, если вы используете ios simulator 11.2, вы не сможете увидеть какие-либо элементы управления на экране блокировки. Вы должны использовать устройство, чтобы увидеть, как оно работает.


1- Выбрать проект -> Возможности -> включить режимы фона -> отметить аудио, AirPlay и Картинка в картинке

ios 11 background audio setting

2- Файл AppDelegate.swift должен выглядеть следующим образом:

import UIKit

import AVFoundation

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
    {
        // Override point for customization after application launch.

        do
        {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)

         //!! IMPORTANT !!
         /*
         If you're using 3rd party libraries to play sound or generate sound you should
         set sample rate manually here.
         Otherwise you wont be able to hear any sound when you lock screen
         */
            //try AVAudioSession.sharedInstance().setPreferredSampleRate(4096)
        }
        catch
        {
            print(error)
        }
        // This will enable to show nowplaying controls on lock screen
        application.beginReceivingRemoteControlEvents()

        return true
    }
}

3- ViewController.swift должен выглядеть следующим образом:

import UIKit

import AVFoundation
import MediaPlayer

class ViewController: UIViewController
{

    var player : AVPlayer = AVPlayer()

    override func viewDidLoad()
    {
        super.viewDidLoad()


        let path = Bundle.main.path(forResource: "music", ofType: "mp3")
        let url = URL(fileURLWithPath: path!)

        // !! IMPORTANT !!
        /*
            If you are using 3rd party libraries to play sound 
            or generate sound you should always setNowPlayingInfo 
            before you create your player object.

            right:
            self.setNowPlayingInfo()
            let notAVPlayer = SomePlayer()

            wrong(You won't be able to see any controls on lock screen.):
            let notAVPlayer = SomePlayer()
            self.setNowPlayingInfo()
         */

        self.setNowPlayingInfo()
        self.player = AVPlayer(url: url)

    }


    func setNowPlayingInfo()
    {
        let nowPlayingInfoCenter = MPNowPlayingInfoCenter.default()
        var nowPlayingInfo = nowPlayingInfoCenter.nowPlayingInfo ?? [String: Any]()

        let title = "title"
        let album = "album"
        let artworkData = Data()
        let image = UIImage(data: artworkData) ?? UIImage()
        let artwork = MPMediaItemArtwork(boundsSize: image.size, requestHandler: {  (_) -> UIImage in
            return image
        })

        nowPlayingInfo[MPMediaItemPropertyTitle] = title
        nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = album
        nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork

        nowPlayingInfoCenter.nowPlayingInfo = nowPlayingInfo
    }

    @IBAction func startPlayingButtonPressed(_ sender: Any)
    {
        self.player.play()
    }

СТАРЫЙ ОТВЕТ IOS 8.2:

Ответ Патрика совершенно верный.

Но я напишу, что я делаю для ios 8.2 :

Я добавляю info.plist моего приложения в необходимые фоновые режимы, как показано ниже:

enter image description here

И в моем AppDelegate.h я добавляю эти импорта:

#import 
#import 

Затем в моем AppDelegate.m я написал приложение didFinishLaunchingWithOptionsthis точно так же, как показано ниже:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

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

    return YES;
}

Теперь приложение продолжает воспроизводить музыку, даже если экран заблокирован:)

67
задан Cristian 29 September 2010 в 15:05
поделиться

1 ответ

Я знаю, что на этот вопрос ответили, но ответы, которые я нашел здесь, не работали на мой сценарий (или на Windows).

я использую окна 10 ноутбуков с PHP 7.2 в Xampp v3.2.4.

$command = 'php Cron.php send_email "'. $id .'"';
if ( substr(php_uname(), 0, 7) == "Windows" )
{
    //windows
    pclose(popen("start /B " . $command . " 1> temp/update_log 2>&1 &", "r"));
}
else
{
    //linux
    shell_exec( $command . " > /dev/null 2>&1 &" );
}

Это работало отлично на меня.

я надеюсь, что это поможет кому-то с окнами. Аплодисменты.

0
ответ дан 24 November 2019 в 14:30
поделиться
Другие вопросы по тегам:

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