如何避免AlassetLibrary的位置服务?

7

可能重复:
如何避免使用AlAssetLibrary中的定位服务?我能否不使用定位服务检索文件?

大家好, 我是一个iPhone开发和Obj-C的新手。我正在我的应用程序中使用“ALAssetLibrary”从照片库中检索图像。 我发现如果调用方启用了位置服务,则“ALAssetPropertyLocation”属性键才可用。这是检索资产位置信息的关键,但我没有使用“ALAssetPropertyLocation”属性,而是只使用了 ALAssetPropertyURLs。

每当我尝试在新设备上部署我的应用程序时,都会弹出一条消息框,显示“需要定位服务..” 我能否隐藏“ALAssetPropertyLocation”属性?

如果有人能够以正确的方式协助我解决问题,并提供任何样例代码来启动我的项目,我将不胜感激。

谢谢您的帮助 :)

这是我的代码:

//Getting image url from dictionary according to the user input
NSURL *imageurl = [dict objectForKey: [youSaid text]];   

//Getting asset from url
typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset);
typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);    
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
    ALAssetRepresentation *rep = [myasset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    //Setting asset image to image view according to the image url
    [imageview setImage:[UIImage imageWithCGImage:iref]];        
};
ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
{
    NSLog(@"Error, cant get image - %@",[myerror localizedDescription]);
}; 

if(imageurl != nil)
{
ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
[assetLibrary assetForURL:imageurl resultBlock:resultblock    failureBlock:failureblock];      
}
1个回答

6
启用“位置服务”是使用AssetsLibrary的要求。原因是照片/视频库中的任何照片/视频都可能包含地理数据。这些数据不仅可以通过ALAssetPropertyURLs获得,还可以通过从资产中读取原始数据(使用ALAssetsRepresentation的getBytes:fromOffset:length:error:方法)获得。由于没有办法从原始图像数据中剥离地理元数据(在禁用位置服务的情况下),我想设计决策是使“位置服务”成为使用AssetsLibrary所必需的。
这个要求可能会让用户感到困惑。因此,您需要做两件事:
1)如果用户拒绝访问位置服务,则在应用程序需要此访问权限时提供清晰的消息,并说明该应用程序实际上不确定当前位置或任何GPS /数据。
2)一旦用户在初始对话框上按“NO”,请显示明确的说明如何启用位置服务。
祝好,
Hendrik

定位服务似乎是访问照片URL/路径的唯一方式,这太残忍了。 - AlvinfromDiaspar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接