当您第一次尝试访问用户的 ALAssetsLibrary 时,操作系统将向他们显示一个询问权限的对话框。如果他们不允许这样做,则将调用 failureBlock 并将在将来始终调用。有没有办法再次强制提示这个授权请求?
我注意到在地图应用程序中,他们通知用户转到设置应用程序以使用按钮打开位置服务。但是,我不知道以编程方式打开“设置”应用程序。我应该只显示有关如何打开位置服务的说明吗?
当您第一次尝试访问用户的 ALAssetsLibrary 时,操作系统将向他们显示一个询问权限的对话框。如果他们不允许这样做,则将调用 failureBlock 并将在将来始终调用。有没有办法再次强制提示这个授权请求?
我注意到在地图应用程序中,他们通知用户转到设置应用程序以使用按钮打开位置服务。但是,我不知道以编程方式打开“设置”应用程序。我应该只显示有关如何打开位置服务的说明吗?
您无法以 Apple 批准的方式打开设置应用程序。您可以期望的最好的方法是捕获错误,然后显示 UIAlertView 或其他视图,其中包含有关如何执行此操作的说明。查看 Dropbox 应用程序的最新版本,了解它们如何指导用户。
当您尝试从您的代码访问库时,您可以使用错误处理程序来捕获错误并显示警报,指定用户要做什么。
例子
failureBlock:^(NSError *error) {
// error handling
if (error.code == ALAssetsLibraryAccessGloballyDeniedError) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!"
message:@"Error loading image... \nEnable Location Services in 'Settings -> Location Services'."
delegate:self cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
} else if (error.code == ALAssetsLibraryAccessUserDeniedError) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!"
message:[NSString stringWithFormat:@"Error loading image... \nEnable Location Services in 'Settings -> Location Services' for %@.", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]]
delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"Error loading image..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
}