Rodrigo Chaves
Rodrigo Chaves

Reputation: 1114

Ionic 2 Camera select Video on iOS not working

I'm developing a App with Ionic 2 and I'm have problems with @ionic-native/Camera. I've this code on Upload.ts

let loader = this.loading.create({
  content: 'Carregando video....'
});
loader.present().then(() => {
  const options: CameraOptions = {
    quality: 100,
    destinationType: this.camera.DestinationType.FILE_URI,
    sourceType: this.camera.PictureSourceType.PHOTOLIBRARY,
    mediaType: this.camera.MediaType.VIDEO,
  }
  this.camera.getPicture(options).then((videoData) => {
      this.uploadForm.controls['file'].setValue(videoData)
      loader.dismiss();
    }, (err) => {
      console.log(err);
  });
});

This code works fine in Android, but when I run ionic cordova run ios -lc, the promise this.camera.getPicture(options) is never resolved, so the loader keep running forever.

Thanks in advance!

Upvotes: 3

Views: 635

Answers (1)

Rodrigo Chaves
Rodrigo Chaves

Reputation: 1114

So, I found the problem. First thing is that native components bugs with -l (--livereload). I don't know how to explain why but I got this information from the Ionic Worldwide slack. A member from Ionic Team said:

"live-reload on a device can cause issues with plugins and file system".

So I used this video to understand how to debbug the APP using the iOS emulator and Safari.

https://www.youtube.com/watch?v=Aob749bkoLY

A little brief of the video: when using iOS emulator, you can access the menu Developer > Emulator > <App Name>. A new window with inspector tools will open and logs from the emulator will appear on this window.

I found out that's the video url was incorrect. Before, to be compatible with Android, I've this code responsible to find the video pointer in system and send to the server:

filePath = 'file:///' + this.uploadForm.controls['file'].value;

But, iOS File Picker already has a "file:///" prefix. So prefixing it again made it wrong. So I updated the code to be like this:

  if (this.platform.is('android')) {
    filePath = 'file:///' + this.uploadForm.controls['file'].value;
  } else {
    filePath = this.uploadForm.controls['file'].value;
  }

This resolved the problem.

Upvotes: 2

Related Questions