2012-01-14 1 views
0

Я работаю с приложением, которое использует фотографии и видео в AssetsLibrary, и я просто пытаюсь определить раз и навсегда, если есть какой-либо способ попросить у пользователя разрешения на доступ к данным местоположения, чтобы получить эти активы. Я понимаю, что данные EXIF ​​включают в себя информацию GPS, и это имеет для меня достаточный смысл.AssetsLibrary: запрос служб местоположения. Как Instagram избегал этого?

Примечание: Я искал в StackOverflow, и я нашел похожие вопросы, и я не делаю это сообщение просто для добавления еще одного в список. Я задаю конкретно один (очевидный) контрпример.

При использовании Instagram в первый раз, я могу просматривать мой фотоальбом, выбирать фотографии, редактировать их и делиться ими, не запрашивая подсказки о службах определения местоположения. Я только подскажу, когда я выбираю кнопку на кнопку «Включить геотеги». Проверяя вкладку настроек, похоже, что если я никогда не нажимаю на эту кнопку, Instagram даже не появляется в разделе «Настройки местоположения» моих настроек.

Вопрос в том, как Instagram уйти от этого? У кого-нибудь есть идеи? Я хотел бы выяснить, смогу ли я имитировать их реализацию так или иначе, чтобы мои пользователи не закрывались из-за того, чтобы получать свои камеры, если они не ответят на это приглашение.

ответ

5

Объяснение довольно простое. Instagram использует UIImagePickerController. UIImagePickerController работает без служб определения местоположения, но вы не получаете данные EXIF ​​с помощью этого метода. UIImagePickerController может извлекать метаданные (включая GPS) только через UIImagePickerControllerReferenceURL. UIImagePickerControllerReferenceURL вам необходимо передать методы AssetsLibrary, которые нуждаются в повторных службах определения местоположения. Приветствия,

Хендрик

0

Как Holtmann упоминалось, чтение UIImagePickerControllerReferenceURL запускает службы определения местоположения строки. Если вам нужны только данные изображения, а не метаданные, вы можете получить это из ключей UIImagePickerControllerOriginalImage и UIImagePickerControllerEditedImage (сначала я проверяю EditedImage, а затем проверяю OriginalImage, если EditedImage равно null). Это не требует использования библиотеки ресурсов и не требует доступа к местоположению.

Вот как я использую это в моем приложении, в том числе сохранения локальной копии изображения для дальнейшего редактирования:

- (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]; 
    } 
}