iOS 13:MPMediaPickerController-内部错误/找不到请求的应用程序扩展名

问题描述 投票:3回答:3

似乎一般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];

完全不调用委托。没有显示日志,只有本机警报。

我正在获取本机替代品

内部错误

找不到所请求的应用程序扩展名

[取消]

注2

[Apple音乐应用未安装在该设备上,这似乎是一个问题。有人知道一种可靠的方法来确定是否安装了Apple Music应用吗?

ios xcode mpmediaitem mpmediapickercontroller apple-music
3个回答
0
投票
您是否在info.plist中设置了媒体库的权限?NSAppleMusicUsageDescription

0
投票
[似乎Apple的Music应用必须安装在该设备上。仍然不能100%重现,但是安装了该应用程序后,我再也没有看到该问题。

0
投票
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]; }

© www.soinside.com 2019 - 2024. All rights reserved.