我正在使用PhoneGap 2.8来创建iOS 6应用。我在XCode中构建它,而不是使用PhoneGap Build。我的应用程序不需要位置服务,但使用相机。每次从camera.getPicture()调用返回时,它都会显示一个对话框,允许我的应用程序使用位置服务。如果我拒绝,或者位置服务被禁用,则照片不会传回我的应用程序。
即使我在隐私设置中拒绝了相机应用位置服务,也会发生这种情况。我还编辑了我的config.xml并删除了对CDVLocation的所有引用。我的javascript代码中没有对navigator.geolocation的引用。
为什么要求提供位置服务?我的XCode项目中是否有其他地方需要删除此权限,或者排除phonegap模块?即使用户已经阻止相机使用位置服务,iOS 6是否会向使用相机的任何应用显示此提示?
感谢您的帮助。
答案 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;
}