在Android和iOS上完全忽略saveToPhotoAlbum

时间:2019-07-18 10:56:24

标签: angular cordova cordova-plugins ionic-native cordova-plugin-camera

在我的ionic 4应用程序中,相机可以很好地拍照并上传到远程服务器。我还使用该插件来获取另一页上的图库中已经存在的图像,它也可以正常工作。 我唯一无法解决的问题是,尽管将saveToPhotoAlbum设置为true,但将应用程序与相机插件一起使用时拍摄的照片并未保存在Photo Reel或任何其他相册中。 >

这是带cameraOptions的代码的一部分。我根据平台使用不同的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的默认相册将照片自动保存到手机的照片库中。但是什么也没发生。

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

  • cordova-plugin-camera 4.0.3“相机”
  • cordova-plugin-device 2.0.2“设备”
  • cordova-plugin-file 6.0.1“文件”
  • cordova-plugin-file-transfer 1.7.1“文件传输”

提前感谢任何单挑

1 个答案:

答案 0 :(得分:0)

结果是,我必须对各种插件进行几次重新安装才能获得所需的行为。

我必须:

  • 删除并重新安装相机插件
  • 删除并重新添加ios平台
  • 通过xcode将应用重新安装到设备上(以再次强制许可请求)
  • 删除cordova-photo-library插件和cordova-plugin-add-swift-support
  • 使用以下方法重新添加cordova-plugin-add-swift-support和cordova-photo-library:
cordova plugin add https://github.com/nilebma/cordova-plugin-photo-library.git

使用此插件版本确实能解决问题:现在,我可以将应用程序中的照片保存在与应用程序名称相同的特定相册中,以使照片与Photo Reel分开。

我已经创建了此功能

        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);
                    }   
                });
            });
        }

为了做到这一点

感谢您的帮助