【问题标题】:saveToPhotoAlbum completely ignored on both Android and iOSsaveToPhotoAlbum 在 Android 和 iOS 上完全被忽略
【发布时间】:2019-11-27 07:05:10
【问题描述】:

在我的 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“文件传输”

提前感谢您的提醒

【问题讨论】:

  • 尝试更改目的地类型:destinationType:Camera.DestinationType.FILE_URI
  • 另一种解决方案是使用这个插件来保存img:cordova-plugin-save-image
  • 如果原来的插件有办法正常工作,我想避免使用另一个插件。目前我已经能够在 android 版本中找到该文件,所以 .FILE_URI 似乎可以工作。我将尝试强制对 iOS 使用 FILE_URI。谢谢。
  • 到目前为止,还没有运气。 FILE_URI 对 iOS 不起作用。我尝试安装 Ionic 本机照片库插件,但是一旦我加载模块,页面就会变为空白,不显示任何内容。 private library: PhotoLibrary 是导致页面变为空白的原因。
  • 你的离子版本是什么?

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


【解决方案1】:

事实证明,我必须重新安装各种插件才能获得所需的行为。

我不得不:

  • 删除并重新安装相机插件
  • 移除并重新添加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

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

我已经创建了这个函数

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

为了做到这一点

感谢您的帮助

【讨论】:

    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多