ユーザーが「カメラロールにエクスポート」機能のオンまたはオフを選択できる設定ビューがあります
ユーザーが初めて電源を入れたとき (最初の写真を撮ったときではありません)、アプリにカメラロールへのアクセス許可を求めてもらいたいと思います。
多くのアプリで動作を見てきましたが、それを行う方法が見つかりません。
ユーザーが「カメラロールにエクスポート」機能のオンまたはオフを選択できる設定ビューがあります
ユーザーが初めて電源を入れたとき (最初の写真を撮ったときではありません)、アプリにカメラロールへのアクセス許可を求めてもらいたいと思います。
多くのアプリで動作を見てきましたが、それを行う方法が見つかりません。
このための組み込みメソッドがあるかどうかはわかりませんが、簡単な方法は、ALAssetsLibrary を使用して、機能をオンにしたときに写真ライブラリから無意味な情報を引き出すことです。次に、取得した情報を無効にするだけで、ユーザーに写真へのアクセスを求めることができます.
たとえば、次のコードは、カメラ ロール内の写真の数を取得するだけで、許可プロンプトをトリガーするには十分です。
#import <AssetsLibrary/AssetsLibrary.h>
ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init];
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSLog(@"%zd", [group numberOfAssets]);
} failureBlock:^(NSError *error) {
if (error.code == ALAssetsLibraryAccessUserDeniedError) {
NSLog(@"user denied access, code: %zd", error.code);
} else {
NSLog(@"Other error code: %zd", error.code);
}
}];
編集:これに出くわしました。以下は、フォトアルバムへのアプリケーションアクセスの認証ステータスを確認する方法です。
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
if (status != ALAuthorizationStatusAuthorized) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Attention" message:@"Please give this app permission to access your photo library in your settings app!" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil, nil];
[alert show];
}
Photosフレームワークを使用するiOS 8以降:
スウィフト 3.0 :
PHPhotoLibrary.requestAuthorization { status in
switch status {
case .authorized:
<#your code#>
case .restricted:
<#your code#>
case .denied:
<#your code#>
default:
// place for .notDetermined - in this callback status is already determined so should never get here
break
}
}
Objective-C :
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
switch (status) {
case PHAuthorizationStatusAuthorized:
<#your code#>
break;
case PHAuthorizationStatusRestricted:
<#your code#>
break;
case PHAuthorizationStatusDenied:
<#your code#>
break;
default:
break;
}
}];
ドキュメントからの重要な注意:
このメソッドは常にすぐに戻ります。ユーザーが以前に写真ライブラリへのアクセス許可を付与または拒否している場合、呼び出されたときにハンドラー ブロックが実行されます。それ以外の場合は、アラートを表示し、ユーザーがアラートに応答した後にのみブロックを実行します。
ユーザーが iOS 6 で初めてカメラ ロールに書き込もうとすると、自動的に許可を求められます。余分なコードを追加する必要はありません (その前に、authorisationstatus は ALAuthorizationStatusNotDetermined です)。
ユーザーが初めて拒否した場合、再度質問することはできません (私の知る限り)。ユーザーは、設定 - >プライバシー - >写真セクションでそのアプリ固有の設定を手動で変更する必要があります。
別のオプションが 1 つあります。それは、ユーザーがペアレンタル コントロールなどの他の制限のために許可を与えることができないということです。その場合、ステータスは ALAuthorizationStatusRestricted です。
迅速:
import AssetsLibrary
var status:ALAuthorizationStatus = ALAssetsLibrary.authorizationStatus()
if status != ALAuthorizationStatus.Authorized{
println("User has not given authorization for the camera roll")
}
#import <AssetsLibrary/AssetsLibrary.h>
//////
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
switch (status) {
case ALAuthorizationStatusRestricted:
{
//Tell user access to the photos are restricted
}
break;
case ALAuthorizationStatusDenied:
{
// Tell user access has previously been denied
}
break;
case ALAuthorizationStatusNotDetermined:
case ALAuthorizationStatusAuthorized:
// Try to show image picker
myPicker = [[UIImagePickerController alloc] init];
myPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
myPicker.delegate = self;
[self presentViewController: myPicker animated:YES completion:NULL];
break;
default:
break;
}
iOS 9.2.1、Xcode 7.2.1、ARC 対応
'ALAuthorizationStatus' は非推奨です: iOS 9.0 で最初に非推奨になりました - 代わりに Photos フレームワークで PHAuthorizationStatus を使用してください
更新されたソリューションについては、この投稿を参照してください。
フォト ライブラリへのアクセスが設定されているかどうかを確認する - PHPhotoLibrary (iOS 8)
重要な注意事項:
ALAuthorizationStatus
ますPHAuthorizationStatus
。一番やりやすいのは…
if ([PHPhotoLibrary class])
{
//Use the Photos framework
}
else
{
//Use the Asset Library framework
}
ソースとして使用するメディア コレクションを決定する必要があります。これは、アプリを実行するデバイスによって決まります。で実行され、使用している OS のバージョン。
承認がユーザーによって拒否された場合は、ユーザーを設定に誘導することができます。