MPMediaQuery等到“媒体”对话框完成后再进行回调

时间:2018-09-27 14:02:28

标签: ios objective-c react-native promise mpmediaquery

我的目标是在iOS和本机之间建立桥梁,并返回所有播客标题。桥似乎正在工作,并且播客标题已返回,但是我设置的回调将立即调用,而不是在用户接受媒体权限提示(下面的提示)之后调用

enter image description here

因此,由于未获得我的授权,因此回调将不返回任何播客标题,但是,如果在用户单击“确定”(表示我已获得授权)后调用该函数,则播客标题将正确返回。因为我不必等待对话框被回答。因此,我的问题是在调用带有播客标题的回调之前,如何等待对话框得到答复。

这是我检索播客标题的功能:

RCT_EXPORT_METHOD(requestPodcastTitles: (RCTResponseSenderBlock)callback)
{
    MPMediaQuery *query = [[MPMediaQuery alloc] init];
    [query setGroupingType: MPMediaGroupingPodcastTitle];
    NSArray *podcasts = [query collections];
    NSMutableArray *mutablePodcastsToSerialize = [NSMutableArray array];

    for (MPMediaItemCollection *podcast in podcasts) {
      MPMediaItem *representativeItem = [podcast representativeItem];
      NSString *podcastTitle =
      [representativeItem valueForProperty: MPMediaItemPropertyPodcastTitle];\
      NSLog (@" Podcast Title: %@", podcastTitle);
      NSDictionary *podcastDictionary = @{@"podcastTitle": podcastTitle};
      [mutablePodcastsToSerialize addObject:podcastDictionary];

    }

    callback(@[[NSNull null], mutablePodcastsToSerialize]);
    return;
}

您知道在返回回调之前需要做什么来等待提示结束吗?

1 个答案:

答案 0 :(得分:2)

问题是您没有致电MPMediaLibrary.requestAuthorization()。如果执行了此操作,则对话框消失后会回叫您,现在您可以继续。