7

可能重复:
如何避免 AlAssetLibrary 中的定位服务?我可以在不使用定位服务的情况下使用 AlAssetLibrary 检索文件吗?

大家好,我是iphone开发和obj-c的新手。我在我的应用程序中使用“ALAssetLibrary”从照片库中检索图像。我确定“ ALAssetPropertyLocation ”属性密钥仅在为呼叫者启用位置服务时可用。它是检索资产位置信息的关键。但我没有使用“ALAssetPropertyLocation”Property。我只使用ALAssetPropertyURL。

每当我尝试在新设备中部署我的应用程序时,都会出现一个消息框,其中显示“需要定位服务..”消息我可以隐藏“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];      
}
4

1 回答 1

6

启用“位置服务”是使用 AssetsLibrary 的要求。原因是照片库中的任何照片/视频都可能包含地理数据。这些数据不仅可以通过 ALAssetPropertyURLs 获得,而且如果您从资产中读出原始数据(通过使用 ALAssetsRepresentation 的 getBytes:fromOffset:length:error: 方法)也可以使用。因为没有办法从原始图像数据中去除地理元数据(如果位置服务被禁用),我猜设计决定是让“位置服务”强制使用 AssetsLibrary。

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

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

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

干杯,

亨德里克

于 2011-05-05T09:58:06.980 回答