5

当您第一次尝试访问用户的 ALAssetsLibrary 时,操作系统将向他们显示一个询问权限的对话框。如果他们不允许这样做,则将调用 failureBlock 并将在将来始终调用。有没有办法再次强制提示这个授权请求?

我注意到在地图应用程序中,他们通知用户转到设置应用程序以使用按钮打开位置服务。但是,我不知道以编程方式打开“设置”应用程序。我应该只显示有关如何打开位置服务的说明吗?

4

2 回答 2

6

您无法以 Apple 批准的方式打开设置应用程序。您可以期望的最好的方法是捕获错误,然后显示 UIAlertView 或其他视图,其中包含有关如何执行此操作的说明。查看 Dropbox 应用程序的最新版本,了解它们如何指导用户。

于 2011-05-03T22:47:38.757 回答
0

当您尝试从您的代码访问库时,您可以使用错误处理程序来捕获错误并显示警报,指定用户要做什么。

例子

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];
    }
}
于 2012-12-22T16:46:47.920 回答