如何从PhoneGap iOS 6应用程序中删除位置服务请求?

时间:2013-06-22 16:56:39

标签: ios6 geolocation cordova

我正在使用PhoneGap 2.8来创建iOS 6应用。我在XCode中构建它,而不是使用PhoneGap Build。我的应用程序不需要位置服务,但使用相机。每次从camera.getPicture()调用返回时,它都会显示一个对话框,允许我的应用程序使用位置服务。如果我拒绝,或者位置服务被禁用,则照片不会传回我的应用程序。

即使我在隐私设置中拒绝了相机应用位置服务,也会发生这种情况。我还编辑了我的config.xml并删除了对CDVLocation的所有引用。我的javascript代码中没有对navigator.geolocation的引用。

为什么要求提供位置服务?我的XCode项目中是否有其他地方需要删除此权限,或者排除phonegap模块?即使用户已经阻止相机使用位置服务,iOS 6是否会向使用相机的任何应用显示此提示?

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

似乎Phonegap会自动将EXIF数据添加到使用相机拍摄的Jpeg图像,而后者又会触发位置服务警报。 有两种方法可以防止这种情况发生:

1 - 为捕获图片的格式指定 PNG (默认情况下,phonegap使用包含EXIF数据的JPEG)

encodingType=navigator.camera.EncodingType;

function capturePhotoEdit() {
        navigator.camera.getPicture(onPhotoDataSuccess, onFail, { encodingType: encodingType.PNG, destinationType: destinationType.DATA_URL });
    }

2 - 如果要使用JPEG而不是PNG图像,则必须在第312行和第322行之间的 CordovaLib / Classes / CDVCamera.m 中注释掉这些行。这是代码将EXIF数据添加到图片中。

        NSDictionary *controllerMetadata = [info objectForKey:@"UIImagePickerControllerMediaMetadata"];
        if (controllerMetadata) {
            self.data = data;
            self.metadata = [[NSMutableDictionary alloc] init];

            NSMutableDictionary *EXIFDictionary = [[controllerMetadata objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy];
            if (EXIFDictionary) [self.metadata setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];

            [[self locationManager] startUpdatingLocation];
            return;
        }