iOS 13: MPMediaPickerController не работает? - PullRequest
3 голосов
/ 12 октября 2019

Кажется, что общее MPMediaPicker больше не работает на ios13 (ipad air 2, iphone SE)

В скопированном оттуда примере 1: 1 не отображается средство выбора носителя https://developer.apple.com/documentation/mediaplayer/displaying_a_media_picker_from_your_app

Любые советы, как вернуть функциональность ??

Примечание 1

При использовании MPMediaPickerController, как этот

    musicPickerView = [[UIView alloc] initWithFrame:fullScreenRect];
    musicPickerView.alpha = 0.0f;
    musicPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
    musicPicker.showsCloudItems               = false;
    musicPicker.showsItemsWithProtectedAssets = false;
    musicPicker.delegate                      = self;
    musicPicker.allowsPickingMultipleItems    = false;
    musicPicker.prompt                        = NSLocalizedString(@"Select a song", @"Select a song");
    musicPicker.view.frame                    = musicPickerView.bounds;
    [self addChildViewController:musicPicker];
    [musicPickerView addSubview:musicPicker.view];
    [self.view addSubview:musicPickerView];
    [musicPicker didMoveToParentViewController:self];
    [self fadeInMusicPicker:true];

Делегат вообще не вызывается. Журнал не отображается, только собственное предупреждение.

Я получаю этот собственный altert

Внутренняя ошибка

Не найдено требуемое расширение приложения

[Отмена]

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

Похоже, на этом устройстве должно быть установлено приложение Music от Apple. Все еще не воспроизводится на 100%, но с этим приложением я больше никогда не видел эту проблему.

0 голосов
/ 25 октября 2019

С iOS 13 MPMediaPicker требуется авторизация пользователя, в отличие от более ранней версии iOS. Поэтому вам нужно сначала обработать аутентификацию, а затем показать средство выбора, если пользователь предоставил разрешение. Ваш код будет следующим:

MPMediaLibraryAuthorizationStatus authorizationStatus = MPMediaLibrary.authorizationStatus;

    switch (authorizationStatus)
    {
        case MPMediaLibraryAuthorizationStatusAuthorized:
        {
            [self showPickerView];
            break;
        }
        case MPMediaLibraryAuthorizationStatusNotDetermined:
        {
            // Not yet authorized - request it from the system
            [MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus authorizationStatus)
             {
                 if ( authorizationStatus == MPMediaLibraryAuthorizationStatusAuthorized )
                 {
                     dispatch_async(dispatch_get_main_queue(), ^{

                            [self showPickerView];

                        });
                 }
                 else
                 {
                     PLog(@"The Media Library was not authorized by the user");

                 }
             }];
            break;
        }

        case MPMediaLibraryAuthorizationStatusRestricted:
        case MPMediaLibraryAuthorizationStatusDenied:
        {
            // user has previously denied access. Ask again with our own alert that is similar to the system alert
            // then take them to the System Settings so they can turn it on for the app

            break;
        }
    }


-(void)showPickerView
{
    musicPickerView = [[UIView alloc] initWithFrame:fullScreenRect];
    musicPickerView.alpha = 0.0f;
    musicPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
    musicPicker.showsCloudItems               = false;
    musicPicker.showsItemsWithProtectedAssets = false;
    musicPicker.delegate                      = self;
    musicPicker.allowsPickingMultipleItems    = false;
    musicPicker.prompt                        = NSLocalizedString(@"Select a song", @"Select a song");
    musicPicker.view.frame                    = musicPickerView.bounds;
    [self addChildViewController:musicPicker];
    [musicPickerView addSubview:musicPicker.view];
    [self.view addSubview:musicPickerView];
    [musicPicker didMoveToParentViewController:self];
    [self fadeInMusicPicker:true];
}
0 голосов
/ 24 октября 2019

Вы установили разрешение для библиотеки мультимедиа в своем info.plist? NSAppleMusicUsageDescription

...