Как проверить, имеет ли приложение доступ к галерее телефона?
У меня есть приложение, в котором я делаю снимок с камерой и сохраняю это изображение в собственной галерее. Но если у приложения нет разрешения на это, я хочу, чтобы пользователь это знал. Итак, как я могу проверить его?
Кстати: я храню изображение в галерее с помощью:
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
Ответы
Ответ 1
Вам нужно проверить статус ALAssetLibrary
убедитесь, что в вашем файле AssetsLibrary/AssetsLibrary.h
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
//проверить статус для ALAuthorizationStatusAuthorized
или ALAuthorizationStatusDenied
e.g
if (status != ALAuthorizationStatusAuthorized) {
//show alert for asking the user to give permission
}
Ответ 2
Примечание: только iOS 6
Это то, что вы ищете
[ALAssetsLibrary authorizationStatus] == ALAuthorizationStatusAuthorized;
Другие значения authorizationStatus:
ALAuthorizationStatusRestricted, // This application is not authorized to access photo data.
// The user cannot change this application’s status, possibly due to active restrictions
// such as parental controls being in place.
ALAuthorizationStatusDenied, // User has explicitly denied this application access to photos data.
ALAuthorizationStatusAuthorized // User has authorized this application to access photos data.
Ответ 3
Если вы используете фреймворк, поскольку библиотеки ALAsset устарели от ios 9, вы можете использовать PHAuthorizationStatus для проверки доступа галереи. Вам также нужно импортировать фреймворк.
#import <Photos/Photos.h>
- (BOOL)hasGalleryPermission
{
BOOL hasGalleryPermission = NO;
PHAuthorizationStatus authorizationStatus = [PHPhotoLibrary authorizationStatus];
if (authorizationStatus == PHAuthorizationStatusAuthorized) {
hasGalleryPermission = YES;
}
return hasGalleryPermission;
}
Ответ 4
Swift 3
import photos
PHPhotoLibrary.requestAuthorization { status in
switch status {
case .authorized:
self.processSnapShotPhotos()
case .restricted:
print("handle restricted")
case .denied:
print("handle denied")
default:
// place for .notDetermined - in this callback status is already determined so should never get here
break
}
}