我怎样才能避免AlassetLibrary的位置服务?

时间:2011-04-20 09:01:35

标签: iphone cocoa-touch ios ios4 alasset

  

可能重复:
  How can i avoid Location service in AlAssetLibrary? Can i retrieve files using AlAssetLibrary without using Location Service?

大家好,  我是iphone开发和obj-c的新手。我在我的应用程序中使用“ALAssetLibrary”从照片库中检索图像。 我发现“ ALAssetPropertyLocation ”属性密钥仅在为调用者启用了位置服务时才可用。它是检索资产位置信息的关键。但我没有使用“ALAssetPropertyLocation”Property.i我只使用 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 个答案:

答案 0 :(得分:6)

启用“位置服务”是使用AssetsLibrary的要求。 原因是Photo-Library中的任何照片/视频可能包含地理数据。此数据不仅可通过ALAssetPropertyURLs获得,而且还可以从资产中读取原始数据(通过使用getBytes:fromOffset:length:error:ALAssetsRepresentation方法)。因为没有办法从原始图像数据中剥离地理元数据(如果禁用了位置服务),我想设计决定是为了使“AssetsLibrary”强制使用“位置服务”。

此要求可能会让用户感到困惑。所以你需要做两件事:

1)如果用户拒绝访问位置服务,则在您的应用需要此访问权限时显示清除消息,并且该应用实际上并未确定当前位置或任何GPS /数据。

2)一旦用户在初始对话框中按“否”,就会显示如何启用位置服务的明确说明。

干杯,

亨德里克