在 Android 和 iOS 上完全忽略 saveToPhotoAlbum

saveToPhotoAlbum completely ignored on both Android and iOS

在我的 ionic 4 应用程序中,相机可以正常拍照并上传到远程服务器。我还使用该插件来获取另一个页面上图库中已有的图像,它也可以工作。 我唯一无法解决的问题是,尽管 saveToPhotoAlbum 设置为 true

这是带有相机选项的代码部分。我根据平台使用不同的 DestinationTypes

        var uri_type;
        if (this.platform.is('android')) { uri_type: this.camera.DestinationType.FILE_URI }
            if (this.platform.is('ios')) { uri_type: this.camera.DestinationType.NATIVE_URI }
                // Testo con un singolo metodo, da provare su iphone se funziona
            //uri_type = this.camera.DestinationType.FILE_URI; // Metodo sicuramente ok per android

            const options: CameraOptions = {
                quality: 100,
                destinationType: uri_type,
                encodingType: this.camera.EncodingType.JPEG,
                mediaType: this.camera.MediaType.PICTURE,
                saveToPhotoAlbum: true,
            }   

这是我用来拍摄实际照片并上传到远程文件的代码(如上所述,它工作正常)

            this.camera.getPicture(options).then( res => {

                // Recuperp il path dal parametro "res"
                let path:string = res.toString();

                // Estraggo il nome e il percorso del file
                var currentName = path.substr(path.lastIndexOf('/') + 1);
                var correctPath = path.substr(0, path.lastIndexOf('/') + 1);

                if ( CONFIG.DEV == 1) { 
                    let datetime = new Date();
                    console.log('[objects-dashboard] @ ' + datetime.toISOString() + ' picture path: ');
                    console.log(path);
                }

                // Leggo il contenuto in un buffer
                //this.file.readAsArrayBuffer(correctPath.toString(), currentName)
                //this.file.readAsDataURL(correctPath.toString(), currentName)
                this.file.readAsArrayBuffer(correctPath.toString(), currentName)
                .then( res => {

                    // E uso il contenuto per creare un blob con il binario del file
                    let blob = new Blob([res], {type: "image/jpeg"});
                    if ( CONFIG.DEV == 1) { 
                        let datetime = new Date();
                        console.log('[objects-dashboard] @ ' + datetime.toISOString() + 'data blob: ');
                        console.log(blob);
                    }
                    // invoco il metodo per caricare il file
                    this.uploadFile(blob, currentName)

                });

根据 cordova 插件文档,选项 saveToPhotoAlbum 应该使用 Android 和 iOS 的默认相册自动将照片保存到 phone 的相册中。但是没有任何反应。

不知道这些信息是否有用,但这是相关插件的列表:

提前感谢您的提醒

原来我不得不重新安装几次各种插件才能获得所需的行为。

我不得不:

  • 删除并重新安装相机插件
  • 移除并re-add ios 平台
  • 通过xcode在设备上重新安装应用程序(再次强制请求权限)
  • 删除 cordova-photo-library 插件和 cordova-plugin-add-swift-support
  • re-add cordova-plugin-add-swift-support 和 cordova-photo-library 使用:
cordova plugin add https://github.com/nilebma/cordova-plugin-photo-library.git

使用这个版本的插件起到了真正的作用:现在我可以将应用程序中的照片保存在与应用程序同名的特定相册中,以便将照片与照片卷轴分开。

我创建了这个函数

        saveImage(path) {
            this.photolib.requestAuthorization()
            .then ( res => {
                this.photolib.saveImage(path, 'T-Site')
                .then( data => {
                    if (CONFIG.DEV == 1) {
                        let datetime = new Date();
                        console.log('[objects-dashboard] @ ' + datetime.toISOString() + 'PhotoLibrary data: ');
                        console.log(data);
                    }   
                });
            });
        }

为了做到这一点

感谢帮助