I have an ionic mobile app and in my app, I want to be able to select images from gallery but I get this error after selecting the image
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image:58 from pid=2173, uid=10062 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
this is my code to select image from gallery and add it
var options = {
destinationType : Camera.DestinationType.FILE_URI,
sourceType : Camera.PictureSourceType.PHOTOLIBRARY,
allowEdit : false,
encodingType: Camera.EncodingType.JPEG,
popoverOptions: CameraPopoverOptions,
mediaType: Camera.MediaType.PICTURE,
correctOrientation: true
};
// 3
$cordovaCamera.getPicture(options).then(function(imageData) {
// 4
var imagetype;
onImageSuccess(imageData);
function onImageSuccess(fileURI) {
console.log("im in image success")
console.log(fileURI)
createFileEntry(fileURI);
}
function createFileEntry(fileURI) {
console.log("im in create file entry")
console.log(fileURI)
window.resolveLocalFileSystemURL(fileURI, copyFile, fail);
}
// 5
function copyFile(fileEntry) {
console.log("im in file entry")
console.log(fileEntry)
var name = fileEntry.fullPath.substr(fileEntry.fullPath.lastIndexOf('/') + 1);
var newName = (new Date()).getTime() + name;
halfthru(fileEntry, newName); //diff
getImageType(fileEntry); //diff
}
function getImageType(fileEntry) { //diff
var typeImage;
$scope.$evalAsync(function() {
fileEntry.file(function(file){
console.log(fileEntry.file)
console.log(file)
typeImage= file.type;
$scope.imagelist = typeImage;
imagetype = typeImage;
}, function(e){
});
})
}
function halfthru(fileEntry, newName) {
console.log("halftru")
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(fileSystem2) {
fileEntry.copyTo(
fileSystem2,
newName,
onCopySuccess,
fail
);
}, fail);
}
// 6
function onCopySuccess(entry) {
console.log("im in copy success")
console.log(entry)
$scope.activeSlide = index;
if(modalExists === false) {
$ionicModal.fromTemplateUrl('image-modal.html', {
scope: $scope,
}).then(function(modal) {
$scope.modal1 = modal;
$scope.modal1.show();
modalExists = true;
$scope.$evalAsync($scope.images.push({file: entry.nativeURL, type: $scope.imagelist}));
imagesModalCount = $scope.images.length;
attachedImageCount = $scope.imagesAttached.length;
});
}
else {
$scope.modal1.show();
$scope.$evalAsync($scope.images.push({file: entry.nativeURL, type: $scope.imagelist}));
imagesModalCount = $scope.images.length;
attachedImageCount = $scope.imagesAttached.length;
}
$scope.$on('$destroy', function() {
$scope.modal1.remove();
});
}
function fail(error) {
}
}, function(err) {
});
my config.xml file
<platform name="android">
<icon src="resources/android/icon/drawable-ldpi-icon.png" density="ldpi"/>
<icon src="resources/android/icon/drawable-mdpi-icon.png" density="mdpi"/>
<icon src="resources/android/icon/drawable-hdpi-icon.png" density="hdpi"/>
<icon src="resources/android/icon/drawable-xhdpi-icon.png" density="xhdpi"/>
<icon src="resources/android/icon/drawable-xxhdpi-icon.png" density="xxhdpi"/>
<icon src="resources/android/icon/drawable-xxxhdpi-icon.png" density="xxxhdpi"/>
<splash src="resources/android/splash/drawable-land-ldpi-screen.png" density="land-ldpi"/>
<splash src="resources/android/splash/drawable-land-mdpi-screen.png" density="land-mdpi"/>
<splash src="resources/android/splash/drawable-land-hdpi-screen.png" density="land-hdpi"/>
<splash src="resources/android/splash/drawable-land-xhdpi-screen.png" density="land-xhdpi"/>
<splash src="resources/android/splash/drawable-port-ldpi-screen.png" density="port-ldpi"/>
<splash src="resources/android/splash/drawable-port-mdpi-screen.png" density="port-mdpi"/>
<splash src="resources/android/splash/drawable-port-hdpi-screen.png" density="port-hdpi"/>
<splash src="resources/android/splash/drawable-port-xhdpi-screen.png" density="port-xhdpi"/>
<splash src="resources/android/splash/drawable-port-xxhdpi-screen.png" density="port-xxhdpi"/>
<splash src="resources/android/splash/drawable-port-xxxhdpi-screen.png" density="port-xxxhdpi"/>
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission platform="android" name="android.permission.MANAGE_DOCUMENTS" />
</config-file>
</platform>
This is happening on an android 5.1.1 phone.
My guess will be this is caused somehow from the cordova-file-plugin when resolveLocalFileSystemURL method is called but how do i solve this?
It says that you need MANAGE_DOCUMENTS permissions, have you add this permission in your config.xml ?
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
In my app, to add an image from gallery I do:
$scope.addMedia = function addMedia() {
var buttons = [];
var onCameraSuccess = function onCameraSuccess(imageData) {
$scope.files.push(imageData);
};
var onCameraError = function onCameraError() {};
var photoConfig = {
quality: 70,
targetWidth: 400,
targetHeight: 400,
allowEdit: false,
destinationType: window.navigator.camera.DestinationType.DATA_URL,
encodingType: window.navigator.camera.EncodingType.JPEG,
saveToPhotoAlbum: false,
mediaType: window.navigator.camera.MediaType.ALLMEDIA,
cameraDirection: window.navigator.camera.Direction.BACK
};
buttons.push({
text: 'Take a photo',
action: function cameraUpload() {
// Camera upload
window.navigator.camera.getPicture(onCameraSuccess, onCameraError, angular.extend({
sourceType: window.navigator.camera.PictureSourceType.CAMERA
}, photoConfig));
}
});
buttons.push({
text: 'Choose a photo',
action: function deviceUpload() {
// Device upload
window.navigator.camera.getPicture(onCameraSuccess, onCameraError, angular.extend({
sourceType: window.navigator.camera.PictureSourceType.PHOTOLIBRARY
}, photoConfig));
}
});
$ionicActionSheet.show({
buttons: buttons,
cancelText: 'Cancel',
cancel: function cancel() {},
buttonClicked: function buttonClicked(index) {
buttons[index].action();
return true;
}
});
};
本文地址:IT屋 » cordova-plugin-camera: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider requires android.permission.MANAGE_DOCUMENTS
我有一个离子的移动应用程序,并在我的应用程序,我希望能够从图库中选择图片,但我选择图像后,得到这个错误
java.lang.SecurityException异常:权限拒绝:阅读com.android.providers.media.MediaDocumentsProvider URI内容://com.android.providers.media.documents/document/image: 58 PID = 2173,UID = 10062需要android.permission.MANAGE_DOCUMENTS,或grantUriPermission()
这是我的code,从库中选择图像,并将其添加
VAR选项= {
destinationType:Camera.DestinationType.FILE_URI,
sourceType的:Camera.PictureSourceType.PHOTOLIBRARY,
allowEdit:假的,
encodingType:Camera.EncodingType.JPEG,
popoverOptions:CameraPopoverOptions,
mediaType的:Camera.MediaType.PICTURE,
correctOrientation:真
}; // 3
$ cordovaCamera.getPicture(选项)。然后(功能(为imageData){
// 4
VAR IMAGETYPE;
onImageSuccess(为imageData);
功能onImageSuccess(fileURI所){
的console.log(“即时图像成功”)
的console.log(fileURI所)
createFileEntry(fileURI所);
} 功能createFileEntry(fileURI所){
的console.log(“即时通讯在创建文件条目”)
的console.log(fileURI所)
window.resolveLocalFileSystemURL(fileURI所,copyFile,失败);
} // 5
功能copyFile(FileEntry的){
的console.log(“IM文件条目”)
的console.log(FileEntry的)
变种名称= fileEntry.fullPath.substr(fileEntry.fullPath.lastIndexOf('/')+ 1);
VAR了newName =(新的Date())的getTime()+名。
halfthru(FileEntry的,了newName); //差异
getImageType(FileEntry的); //差异 } 功能getImageType(FileEntry的){//差异
VAR typeImage;
$范围。$ evalAsync(函数(){
fileEntry.file(功能(文件){
的console.log(fileEntry.file)
的console.log(文件)
typeImage = file.type;
$ scope.imagelist = typeImage;
IMAGETYPE = typeImage;
},功能(E){
});
}) } 功能halfthru(FileEntry的,了newName){
的console.log(“halftru”)
window.resolveLocalFileSystemURL(cordova.file.dataDirectory,功能(fileSystem2){
fileEntry.copyTo(
fileSystem2,
了newName,
onCopySuccess,
失败
);
},失败);
} // 6
功能onCopySuccess(进入){
的console.log(“即时通讯在复制成功”)
的console.log(进入)
$ scope.activeSlide =指数;
如果(modalExists === FALSE){
$ ionicModal.fromTemplateUrl('形象modal.html',{
适用范围:$范围,
}),然后(函数(模式){ $ scope.modal1 =模态;
$ scope.modal1.show();
modalExists = TRUE;
$ $范围evalAsync($ scope.images.push({文件:entry.nativeURL,键入:$ scope.imagelist}))。
imagesModalCount = $ scope.images.length;
attachedImageCount = $ scope.imagesAttached.length;
});
}
其他{
$ scope.modal1.show();
$ $范围evalAsync($ scope.images.push({文件:entry.nativeURL,键入:$ scope.imagelist}))。
imagesModalCount = $ scope.images.length;
attachedImageCount = $ scope.imagesAttached.length;
} $范围。在$('$破坏',函数(){
$ scope.modal1.remove();
}); } 功能失效(错误){ }
},功能(错误){ });
我的config.xml文件
&LT;平台名称=“机器人”&GT;
&LT;图标SRC =“资源/安卓/图标/绘-LDPI-的icon.png”密度=“LDPI”/&GT;
&LT;图标SRC =“资源/安卓/图标/绘-MDPI-的icon.png”密度=“MDPI”/&GT;
&LT;图标SRC =“资源/安卓/图标/绘-HDPI-的icon.png”密度=“华电国际”/&GT;
&LT;图标SRC =“资源/安卓/图标/绘-xhdpi-的icon.png”密度=“xhdpi”/&GT;
&LT;图标SRC =“资源/安卓/图标/绘-xxhdpi-的icon.png”密度=“xxhdpi”/&GT;
&LT;图标SRC =“资源/安卓/图标/绘-xxxhdpi-的icon.png”密度=“xxxhdpi”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘-土地LDPI-screen.png”密度=“土地LDPI”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘-土地MDPI-screen.png”密度=“土地MDPI”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘-土地HDPI-screen.png”密度=“土地华电国际”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘-土地xhdpi-screen.png”密度=“土地xhdpi”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘端口-LDPI-screen.png”密度=“港LDPI”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘端口-MDPI-screen.png”密度=“港MDPI”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘端口-HDPI-screen.png”密度=“港华电国际”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘端口-xhdpi-screen.png”密度=“港xhdpi”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘端口-xxhdpi-screen.png”密度=“港xxhdpi”/&GT;
&LT;飞溅SRC =“资源/安卓/飞溅/绘端口-xxxhdpi-screen.png”密度=“港xxxhdpi”/&GT;
&LT;配置文件中的目标=“AndroidManifest.xml中”父=“/ *”&GT;
&LT;使用许可权的平台=“机器人”NAME =“android.permission.MANAGE_DOCUMENTS”/&GT;
&LT; /配置-文件&gt;
&LT; /平台&GT;
这是一款Android 5.1.1的手机上发生的事情。providers.mediaproviders.media
我的猜测将在以某种方式从科尔多瓦文件-插件时引起resolveLocalFileSystemURL方法被调用但我怎么解决这个问题?
解决方案
它说,你需要MANAGE_DOCUMENTS权限,你在你的config.xml中添加此权限吗?
&LT;使用许可权的android:NAME =“android.permission.MANAGE_DOCUMENTS”/&GT;
在我的应用程序,从图库添加图像我做的:
$ scope.addMedia =功能addMedia(){
VAR按钮= [];
VAR onCameraSuccess =功能onCameraSuccess(为imageData){
$ scope.files.push(为imageData);
}; 变种onCameraError =函数onCameraError(){}; VAR photoConfig = {
品质:70,
targetWidth:400,
targetHeight:400,
allowEdit:假的,
destinationType:window.navigator.camera.DestinationType.DATA_URL,
encodingType:window.navigator.camera.EncodingType.JPEG,
saveToPhotoAlbum:假的,
mediaType的:window.navigator.camera.MediaType.ALLMEDIA,
cameraDirection:window.navigator.camera.Direction.BACK
}; buttons.push({
文字:“拍照”,
动作:功能cameraUpload(){
//摄像机上传
window.navigator.camera.getPicture(onCameraSuccess,onCameraError,angular.extend({
sourceType的:window.navigator.camera.PictureSourceType.CAMERA
},photoConfig));
}
}); buttons.push({
文本:“选择照片”,
动作:功能deviceUpload(){
//设备上传
window.navigator.camera.getPicture(onCameraSuccess,onCameraError,angular.extend({
sourceType的:window.navigator.camera.PictureSourceType.PHOTOLIBRARY
},photoConfig));
}
}); $ ionicActionSheet.show({
按钮:按钮,
cancelText:'取消',
取消:功能取消(){},
buttonClicked:功能buttonClicked(指数){
按钮[指数] .action(); 返回true;
}
});
};
本文地址:IT屋 » 科尔多瓦 - 插件:拒绝权限:读com.android.providers.media.MediaDocumentsProvider需要android.permission.MANAGE_DOCUMENTS
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-25002-1.html
我估计很多还是雇佣的
我要去厕所哭了~哭完继续加班
luna怎么好像去整容了变化好大