gpt4 book ai didi

android - cordova 相机复制文件错误代码 1000

转载 作者:太空狗 更新时间:2023-10-29 16:34:10 27 4
gpt4 key购买 nike

如果我使用 cordova 插件 cordova-plugin-file 3.0.0 (android) 从我的照片库中选择一张图片,我会收到错误代码 1000。我不知道错误代码 1000 是什么。如果我拍一张新照片,一切正常。

有人有想法吗?

function optionsForType(type) {
var source;
switch (type) {
case 0:
source = Camera.PictureSourceType.CAMERA;
break;
case 1:
source = Camera.PictureSourceType.PHOTOLIBRARY;
break;
}
return {
destinationType: Camera.DestinationType.FILE_URI,
sourceType: source,
allowEdit: false,
encodingType: Camera.EncodingType.JPEG,
popoverOptions: CameraPopoverOptions,
saveToPhotoAlbum: false
};
}

function saveMedia(type) {
var deferred = $q.defer();
var options = optionsForType(type);

$cordovaCamera.getPicture(options).then(function(imageUrl) {
var name = imageUrl.substr(imageUrl.lastIndexOf('/') + 1);
var namePath = imageUrl.substr(0, imageUrl.lastIndexOf('/') + 1);
var newName = makeid() + name;
console.log(newName, cordova.file.dataDirectory);
$cordovaFile.copyFile(namePath, name, cordova.file.dataDirectory, newName)
.then(function() {
deferred.resolve(newName);
}, function(e) {
// e is error code 1000
console.error(e);
deferred.reject(e);
});
});

return deferred.promise;
}

最佳答案

tl;博士:

问题是:相机插件返回像这样的 URL content://... 但文件插件似乎只管理像这样的 URL file:///...

使用此插件将 content://... URL 转换为 file:///... URL:

https://github.com/hiddentao/cordova-plugin-filepath

长版:

错误代码 1000 表示 UNKNOWN_ERR 您可以在以下位置看到它:

/plugins/cordova-plugin-file/src/android/FileUtils.java (l.68)

这个UNKNOW_ERR在l.585中使用

[...]
} else if(e instanceof JSONException ) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
} else {
e.printStackTrace();
callbackContext.error(FileUtils.UNKNOWN_ERR);
}

您是否可以看到针对此未知错误打印的堆栈跟踪。要查看堆栈跟踪,我使用 android 监视器。为此,请转到您的 android sdk 文件夹并像这样启动监视器:

$ ./tools/monitor

对我来说,监视器公开了这个特定的堆栈跟踪:

10-28 20:34:28.645: W/System.err(8846): java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/ from pid=8846, uid=10085 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
10-28 20:34:28.648: W/System.err(8846): at android.os.Parcel.readException(Parcel.java:1540)
10-28 20:34:28.648: W/System.err(8846): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
10-28 20:34:28.649: W/System.err(8846): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
10-28 20:34:28.649: W/System.err(8846): at android.content.ContentProviderProxy.query(ContentProviderNative.java:420)
10-28 20:34:28.649: W/System.err(8846): at android.content.ContentResolver.query(ContentResolver.java:478)
10-28 20:34:28.649: W/System.err(8846): at android.content.ContentResolver.query(ContentResolver.java:422)
10-28 20:34:28.649: W/System.err(8846): at org.apache.cordova.file.ContentFilesystem.openCursorForURL(ContentFilesystem.java:170)
10-28 20:34:28.649: W/System.err(8846): at org.apache.cordova.file.ContentFilesystem.getFileMetadataForLocalURL(ContentFilesystem.java:126)
10-28 20:34:28.650: W/System.err(8846): at org.apache.cordova.file.Filesystem.exists(Filesystem.java:130)
10-28 20:34:28.650: W/System.err(8846): at org.apache.cordova.file.FileUtils.resolveLocalFileSystemURI(FileUtils.java:619)
10-28 20:34:28.650: W/System.err(8846): at org.apache.cordova.file.FileUtils.access$400(FileUtils.java:51)
10-28 20:34:28.650: W/System.err(8846): at org.apache.cordova.file.FileUtils$14.run(FileUtils.java:378)
10-28 20:34:28.650: W/System.err(8846): at org.apache.cordova.file.FileUtils$25.run(FileUtils.java:561)
10-28 20:34:28.650: W/System.err(8846): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-28 20:34:28.650: W/System.err(8846): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-28 20:34:28.650: W/System.err(8846): at java.lang.Thread.run(Thread.java:818)

在谷歌搜索“android.permission.MANAGE_DOCUMENTS + camera + plugin”或类似“FILE_URI + camera + resolveLocalFileSystemURL”之后,我发现相机插件返回的 URL 像这样 content://... 但文件插件似乎只管理这样的 URL file:///...

所以直到这个错误没有被修复(如果它真的是一个错误,我不是专家......)你可以使用这个插件来转换 content://... URL在 file:///...URL:

https://github.com/hiddentao/cordova-plugin-filepath

关于android - cordova 相机复制文件错误代码 1000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33022455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com