0

AssetsLibrary の写真とビデオを使用するアプリを使用しています。これらのアセットを取得するために、位置データにアクセスする許可をユーザーに求める方法があるかどうかを一度だけ判断しようとしています。EXIF データに GPS 情報が含まれていることは理解しています。

注: StackOverflow を検索したところ、同様の質問が見つかりました。リストにもう 1 つ追加するためだけにこの投稿を作成しているわけではありません。私は具体的に 1 つの (明らかな) 反例について質問しています。

Instagram を初めて使用するとき、フォト アルバムをブラウズし、写真を選択し、編集し、共有することができます。位置情報サービスについて尋ねられることはありません。「ジオタグを有効にする」というラベルの付いたボタンをクリックすることを選択した場合にのみ、プロンプトが表示されます。設定タブを確認すると、そのボタンをクリックしないと、設定の位置情報サービスセクションに Instagram が表示されません。

私の質問は、Instagram がこれをどのように回避したかです。誰にもアイデアはありますか?ユーザーがこのプロンプトにノーと言った場合に、カメラ アセットを取得することから締め出されないように、何らかの方法で実装を模倣できるかどうかを調べたいと思います。

4

2 に答える 2

5

説明は非常に簡単です。Instagram は UIImagePickerController を使用します。UIImagePickerController は、位置情報サービスを有効にしなくても機能しますが、このメソッドを使用して EXIF データを取得することはできません。UIImagePickerController は、UIImagePickerControllerReferenceURL を介してのみメタデータ (GPS を含む) を取得できます。UIImagePickerControllerReferenceURL を渡す必要があり、次に AssetsLibrary メソッドを渡す必要があります。これには、位置情報サービスを再度有効にする必要があります。乾杯、

ヘンドリック

于 2012-01-16T11:26:14.057 に答える
0

holtmann が述べたように、UIImagePickerControllerReferenceURL を読み取ると、位置情報サービスのプロンプトがトリガーされます。メタデータではなく画像データのみが必要な場合は、代わりに UIImagePickerControllerOriginalImage および UIImagePickerControllerEditedImage キーから取得できます (最初に EditedImage をチェックし、次に EditedImage が null の場合は 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];
    }
}
于 2012-05-30T17:56:56.707 に答える