如何解决来自n @ studio / nativescript-camera-plus的PhotoCapturedEvent不起作用
我正在尝试解决使用nativescript angular开发的android应用程序上的错误。我使用@ nstudio / nativescript-camera-plus拍照,裁剪等。问题是在拍照时调用的PhotoCapturedEvent事件在android 10上不起作用(关联方法中的console.log没有出现在终端上),我也不明白为什么。
以下(我希望)代码中的相关部分:
html部分
<StackLayout>
<ActionBar
[title]="mode === 'Simple' ? i18nMode('simple') : i18nMode('multiple')"
class="app-action-bar"
class="ABPhoto"
>
<!-- [title]="mode === 'Simple' ? {{ 'photo.takePicture.mode.simple' | L }} : {{ 'photo.takePicture.mode.multiple' | L }}" -->
<NavigationButton
text=""
android.systemIcon="ic_menu_back"
(tap)="goBack()"
class="buttonBack"
></NavigationButton>
</ActionBar>
<GridLayout rows="*,8000*,1000*" class="GDPhoto">
<StackLayout
#SLCam
row="1"
class="SLCameraPlus"
>
<StackLayout
[width]="camWidth"
[height]="camHeight"
>
<CameraPlus
class="cameraElement"
row="0"
class="camScreen"
debug="false"
galleryPickerMode="single"
showFlashIcon="true"
showToggleIcon="true"
showCaptureIcon="true"
showGalleryIcon="true"
(loaded)="camLoaded($event)"
(toggleCameraEvent)="toggleCameraEvent($event)"
(photoCapturedEvent)="photoCapturedEvent($event)"
(errorEvent)="errorEvent($event)"
(imagesSelectedEvent)="imagesSelectedEvent($event)"
>
</CameraPlus>
</StackLayout>
</StackLayout>
<GridLayout row="2" columns="*,2*,*" class="bottomBar">
<GridLayout rows="*,*" columns="*,*" col="0" row="0">
<Label
[ngStyle]="{ color: mode === 'Multiple' ? '#3789ab' : 'white' }"
row="1"
[text]="'\ue413'"
(tap)="switchMode()"
col="1"
class="mdi switchMode"
></Label>
</GridLayout>
<Button
[text]="'\ue3af'"
(tap)="takePicFromCam()"
col="1"
class="mdi"
id="takePhoto"
></Button>
<GridLayout
*ngIf="mode === 'Multiple'"
class="GDsendPhotos"
row="0"
(tap)="toPreview()"
id="toMultiplePhoto"
col="2"
VerticalOptions="Center"
[isEnabled]="photoService.atLeastOnePhoto()"
>
<AbsolutLayout>
<Label
top="20"
class="numberPhotos"
verticalAlignement="center"
[text]="photoService.getNbTot()"
[opacity]="photoService.atLeastOnePhoto() ? 1 : 0.2"
></Label>
<Image
top="20"
class="iconSend"
verticalAlignement="center"
src="res://ic_send_white"
[opacity]="photoService.atLeastOnePhoto() ? 1 : 0.2"
></Image>
</AbsolutLayout>
</GridLayout>
</GridLayout>
</GridLayout>
</StackLayout>
打字稿部分
/**
* Function automatically called when a photo is captured.
* @param {any} e - the event
*/
public async photoCapturedEvent(e: any) {
console.log("Je suis passé par là photoCapturedEvent");
//console.log("PHOTO CAPTURED EVENT!!!");
let path=e.data.android;
if (isAndroid){
this.pathCaptureAndroid=e.data.android;
await this.loadImageFromGallery();
} else {
await this.loadImage(e.data as ImageAsset);
}
console.log("Je suis passé par là photoCapturedEvent milieu");
if (this.mode === "Simple") {
let pathF = await this.savePhoto();
if (fsa.FileSystemAccess.prototype.fileExists(pathF)) {
console.log("Je suis passé par là photoCapturedEvent un peu plus loin");
this.photoService.finished = true;
this.photoService.pathes.push(pathF);
console.log("Je suis passé par là Ouverture du Cropping");
this.cropp.emit();
} else {
//console.log("CROPPING CANCELED");
}
} else {
this.photoService.pathes.push(await this.savePhoto());
}
}
/**
private async loadImageFromGallery() {
// var photoFolder : fs.Folder = fs.Folder.fromPath(android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/skinvoices/lastInvoice");
// this.delay(20);
// const pic = photoFolder.getFile("lastInvoice.jpg");
console.log("Je suis passé par là loadImageFromGallery");
this.imageSource = new ImageSource();
this.imageSource = ImageSource.fromFileSync(this.pathCaptureAndroid);
}
/**
* load the image taken when takePicFromCam was called and put it in this.imageSource.
*/
private async loadImage(imageAsset: ImageAsset) {
if (imageAsset) {
this.imageSource = new ImageSource();
this.imageSource = await this.imageSource.fromAsset(imageAsset);
} else {
alert("Image Asset was null");
this.imageSource = null;
}
}
/**
* Take a picture of what you see in the <CameraPlus>.
*/
public takePicFromCam(): void {
console.log("Je suis passé par là takePicFromCam");
this.cam.confirmPhotos = false;
this.cam.debug = false;
let outputret = this.cam.takePicture({
confirm: false,saveToGallery: true,keepAspectRatio: true,autoSquareCrop: false,confirmRetakeText: "Hello",confirmSaveText: "GoodBye"
});
console.log("nouvelle photo: ",outputret);
//this.photoCaptured
}
takePicFromCam()中的console.log运行正常。我找不到有关不推荐使用的方法或其他方法的消息,因此,如果有人有想法,我要感谢他。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。