Родной плагин для камеры ionic v3 не работает на Android - PullRequest
0 голосов
/ 12 июня 2019

с использованием плагина ionic cordova не работает на открытой камере или галерее на Android

Ионный:

ионный (Ionic CLI): 4.12.0 Ionic Framework: ионно-угловой 3.9.2 @ ionic / app-scripts: не установлено

Кордова:

кордова (Cordova CLI): 8.1.2 (cordova-lib@8.1.1)

Система:

NodeJS: v10.15.3 нпм: 6,9,0 ОС: Windows 10

takePicture() {
        const options: CameraOptions = {
          quality: 75,
          destinationType: this.camera.DestinationType.NATIVE_URI ,
          encodingType: this.camera.EncodingType.JPEG,
          mediaType: this.camera.MediaType.PICTURE,
          sourceType: this.camera.PictureSourceType.CAMERA,
          allowEdit: true,
          correctOrientation: true,
          targetWidth: 300,
          targetHeight: 300,
          saveToPhotoAlbum: true
        }

         alert("1");
      this.camera.getPicture(options).then(imageData => {
        
          let base64Image = 'data:image/jpeg;base64,' + imageData;
          this.image = base64Image;
          alert("done");
        }, error => {
      //  Utils.showToast( null,JSON.stringify(error));
        });
        
      }

1 Ответ

0 голосов
/ 13 июня 2019

ты пропустил самый важный шаг, Убедитесь, что вы ввели camera в провайдерах в app.module.ts

Вы должны создать файл PictureProvider, подобный этому

import { Injectable } from '@angular/core';
import { Defer } from '../../common/Defer';
import { Camera } from '@ionic-native/camera';

export enum PictureSource {
	PhotoLibrary,
	Camera,
	Local,
	Remote,
}

@Injectable()
export class PictureProvider {

	constructor(private camera: Camera, ) {
		console.log('Hello PictureProvider Provider');
	}

	fromCamera(source: PictureSource, options?, ) {
		let mergedOtions = this.getOptions(source, options);
		if (options)
			for (let k in options)
				mergedOtions[k] = options[k];

		let defer = Defer.create();

		navigator['camera'].getPicture(
			imageUri => defer.resolve(imageUri),
			(message: string) => {
				console.log(message);
				defer.reject();
			},
			mergedOtions,
		);

		return defer.promise;
	}

	private getOptions(source, options?) {
		return {
			sourceType: source == PictureSource.PhotoLibrary ? this.camera.PictureSourceType.PHOTOLIBRARY : this.camera.PictureSourceType.CAMERA,
			destinationType: this.camera.DestinationType.NATIVE_URI,
			quality: 50,
			mediaType: this.camera.MediaType.PICTURE,
			allowEdit: options.allowEdit,
			correctOrientation: true,
			targetWidth: options.targetWidth,
			targetHeight: options.targetHeight
		}
	}

}

Выполнить по мере необходимости

this.picture.fromCamera(1, {
        allowEdit: true,
        targetWidth: 256,
        targetHeight: 256,
        destinationType: this.camera.DestinationType.DATA_URL,  //直接返回base64
    }).then(base64Img => {
        this.headImg = this.encodeBase64Img(base64Img);
    }).catch(Defer.NoOP);
...