6

UIImagePickerを使用してユーザーの写真を表示し、ユーザーがアプリで使用する画像を選択できるようにします。

私の問題は、ユーザーが初めて画像ピッカーを開くと、「「私のアプリ」はあなたの写真にアクセスしたい」という2つのオプション、「許可しない」と「OK」というプロンプトが表示されることです。

私の要件は、ユーザーが[許可しない]をクリックすると、画像ピッカーが閉じられることです。

ユーザーが[許可しない]を選択したことを検出する方法はありますか?

現在、ユーザーは醜い空白のモーダルビューのままになっています。ユーザーが画像ピッカーをもう一度開くと、「このアプリはあなたの写真などにアクセスできません」というアップル提供のメッセージが表示されます。

これが私が画像ピッカーを使用する方法です:

self.imagePickerController = [[UIImagePickerController alloc] init];
self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:self.imagePickerController animated:YES];
4

3 に答える 3

13

とった!

if ([ALAssetsLibrary authorizationStatus] == ALAuthorizationStatusNotDetermined) {
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if (*stop) {
            // INSERT CODE TO PERFORM WHEN USER TAPS OK eg. :
            return;
        }
        *stop = TRUE;
    } failureBlock:^(NSError *error) {
        // INSERT CODE TO PERFORM WHEN USER TAPS DONT ALLOW, eg. :
        self.imagePickerController dismissViewControllerAnimated:YES completion:nil];
    }];
}
于 2013-02-07T04:28:07.040 に答える
2

を使用しALAssetsLibrary authorizationStatusます。アプリが拒否されたことを示す特定の戻り値があります。

ここでそのメソッドを検索すると、さまざまな承認状態を適切に処理するためのサンプルコードがいくつか見つかります。

于 2013-02-07T02:38:55.033 に答える
0

私も同様の問題を抱えていました。同様の問題を抱えている可能性のある将来の誰かを助けることができるかどうか、以下の私のコードを見ることができます。私は画像をロードするのに役立つIBActionを持っています。私はこの方法で4-5時間苦労しました。

(IBAction)loadImages:(id)sender {
    ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];

    if (status == AVAuthorizationStatusAuthorized || status == AVAuthorizationStatusNotDetermined) {

        ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
        [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
            if (*stop) {
                self.imagePicker = [[UIImagePickerController alloc] init];
                self.imagePicker.delegate = self;
                self.imagePicker.allowsEditing = NO;
                self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
                imagePicker.mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
                [self presentViewController:imagePicker animated:YES completion:^{
                    //TODO
                }];
                return;
            }
            *stop = TRUE;
        } failureBlock:^(NSError *error) {
            [imagePicker dismissViewControllerAnimated:YES completion:nil];
        }];
    }

    if (status == AVAuthorizationStatusDenied || status == AVAuthorizationStatusRestricted) {
        UIAlertView *cameraAlert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Camera Access Required", nil) message:NSLocalizedString(@"Please allow us to access your camera roll in your device Settings.", nil) delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
        [cameraAlert show];
    }
}
于 2015-04-13T16:44:54.163 に答える