【问题标题】:AssetsLibrary: Location Services prompt. How did Instagram avoid it?AssetsLibrary:位置服务提示。 Instagram是如何避免它的?
【发布时间】:2012-02-10 03:55:44
【问题描述】:

我正在开发一个使用 AssetsLibrary 中的照片和视频的应用程序,我只是想一劳永逸地确定是否有任何方法可以请求用户访问位置数据的权限以获取这些资产.我知道 EXIF 数据包含 GPS 信息,这对我来说很有意义。

注意:我在 StackOverflow 上进行了搜索,发现了类似的问题,我发布这篇文章并不是为了在列表中再添加一个。我在问一个(明显的)反例。

当我第一次使用 Instagram 时,我可以浏览我的相册、选择照片、编辑它们并分享它们,而不会收到有关位置服务的提示。只有当我选择单击标有“启用地理标记”的按钮时才会提示我。检查设置选项卡,如果我不点击该按钮,Instagram 甚至不会出现在我的设置的位置服务部分。

我的问题是,Instagram 是如何解决这个问题的?谁有想法?我想知道我是否可以以某种方式模仿他们的实现,这样如果我的用户对这个提示说不,他们就不会被拒绝获取他们的相机资产。

【问题讨论】:

    标签: iphone ios alassetslibrary assetslibrary instagram


    【解决方案1】:

    解释很简单。 Instagram 使用 UIImagePickerController。 UIImagePickerController 在没有启用位置服务的情况下工作,但您不会使用此方法获取 EXIF 数据。 UIImagePickerController 只能通过 UIImagePickerControllerReferenceURL 检索元数据(包括 GPS)。 UIImagePickerControllerReferenceURL 你必须通过 AssetsLibrary 方法,这需要再次启用位置服务。 干杯,

    亨德里克

    【讨论】:

      【解决方案2】:

      正如 holtmann 所说,读取 UIImagePickerControllerReferenceURL 会触发位置服务提示。如果您只需要图像数据,而不需要元数据,则可以从 UIImagePickerControllerOriginalImage 和 UIImagePickerControllerEditedImage 键获取它(我首先检查 EditedImage,然后如果 EditedImage 为空,则检查 OriginalImage)。这不需要使用资产库,也不需要位置访问权限。

      这是我在我的应用程序中使用它的方式,包括保存图像的本地副本以供进一步编辑:

      - (void)imagePickerController:(UIImagePickerController *)controller didFinishPickingMediaWithInfo:(NSDictionary *)info {
          // get the selected photo as a UIImage
          UIImage *photo = [info objectForKey:@"UIImagePickerControllerEditedImage"];
          if (!photo) {
              photo = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
          }
      
          // save the photo to the app's Documents folder
          if (photo) {
              NSString *extension = @"jpg";
              NSString *filename = [NSString stringWithFormat:@"%@.%@", self.defaultTitle, extension]; // self.defaultTitle is defined elsewhere in my app
              NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:filename];
              [UIImageJPEGRepresentation(photo, 0.8) writeToFile:path atomically:YES];
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-19
        • 2012-05-14
        • 1970-01-01
        • 2019-10-23
        • 2014-05-26
        • 1970-01-01
        • 2011-08-09
        • 2011-03-03
        相关资源
        最近更新 更多