I’m using Ionic4 on Angular with Capacitor and the Cordova Camera Plugin. I installed the plugin as instructed on the Capacitor docs:
npm install cordova-plugin-name
npx cap sync
Everything builds fine, it’s only when I try to invoke the getPicture method that I get an issue.
Here’s the relevant code from my component:
Import
import { Camera, CameraOptions } from '@ionic-native/camera/ngx';
Within my component class:
cameraOptions: CameraOptions = {
destinationType: this.camera.DestinationType.FILE_URI,
mediaType: this.camera.MediaType.VIDEO,
};
onPickVideo() {
if (this.platform.is('cordova')) {
this.camera
.getPicture(this.cameraOptions)
.then(videoData => {
console.log(videoData);
})
.catch(err => {
this.filePickerRef.nativeElement.click();
console.log(err);
});
} else {
this.filePickerRef.nativeElement.click();
}
}
I can provide the Ionic project config.xml
on request.
I run a development server using ionic capacitor run android -l --external --consolelogs
When I press the button that invokes onPickVideo()
I get the following output in Android Studio’s Logcat at Warn level:
2019-11-17 20:00:04.958 30163-30362/io.ionic.starter W/System.err: java.lang.ClassNotFoundException: org.apache.cordova.camera.CameraLauncher
2019-11-17 20:00:04.959 30163-30362/io.ionic.starter W/System.err: at java.lang.Class.classForName(Native Method)
2019-11-17 20:00:04.959 30163-30362/io.ionic.starter W/System.err: at java.lang.Class.forName(Class.java:453)
2019-11-17 20:00:04.959 30163-30362/io.ionic.starter W/System.err: at java.lang.Class.forName(Class.java:378)
2019-11-17 20:00:04.959 30163-30362/io.ionic.starter W/System.err: at org.apache.cordova.PluginManager.instantiatePlugin(PluginManager.java:489)
2019-11-17 20:00:04.959 30163-30362/io.ionic.starter W/System.err: at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:169)
2019-11-17 20:00:04.960 30163-30362/io.ionic.starter W/System.err: at org.apache.cordova.PluginManager.exec(PluginManager.java:122)
2019-11-17 20:00:04.960 30163-30362/io.ionic.starter W/System.err: at com.getcapacitor.MessageHandler.callCordovaPluginMethod(MessageHandler.java:70)
2019-11-17 20:00:04.960 30163-30362/io.ionic.starter W/System.err: at com.getcapacitor.MessageHandler.postMessage(MessageHandler.java:46)
2019-11-17 20:00:04.960 30163-30362/io.ionic.starter W/System.err: at android.os.MessageQueue.nativePollOnce(Native Method)
2019-11-17 20:00:04.961 30163-30362/io.ionic.starter W/System.err: at android.os.MessageQueue.next(MessageQueue.java:326)
2019-11-17 20:00:04.961 30163-30362/io.ionic.starter W/System.err: at android.os.Looper.loop(Looper.java:160)
2019-11-17 20:00:04.961 30163-30362/io.ionic.starter W/System.err: at android.os.HandlerThread.run(HandlerThread.java:65)
2019-11-17 20:00:04.962 30163-30362/io.ionic.starter W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.cordova.camera.CameraLauncher" on path: DexPathList[[zip file "/data/app/io.ionic.starter-ZK4SKTdditPynSsm_exuUQ==/base.apk"],nativeLibraryDirectories=[/data/app/io.ionic.starter-ZK4SKTdditPynSsm_exuUQ==/lib/arm64, /system/lib64, /vendor/lib64]]
2019-11-17 20:00:04.962 30163-30362/io.ionic.starter W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
2019-11-17 20:00:04.962 30163-30362/io.ionic.starter W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
2019-11-17 20:00:04.963 30163-30362/io.ionic.starter W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
2019-11-17 20:00:04.963 30163-30362/io.ionic.starter W/System.err: ... 12 more
2019-11-17 20:00:04.966 30163-30362/io.ionic.starter E/Capacitor: Post message error:
java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaPlugin.privateInitialize(java.lang.String, org.apache.cordova.CordovaInterface, org.apache.cordova.CordovaWebView, org.apache.cordova.CordovaPreferences)' on a null object reference
at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:171)
at org.apache.cordova.PluginManager.exec(PluginManager.java:122)
at com.getcapacitor.MessageHandler.callCordovaPluginMethod(MessageHandler.java:70)
at com.getcapacitor.MessageHandler.postMessage(MessageHandler.java:46)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:326)
at android.os.Looper.loop(Looper.java:160)
at android.os.HandlerThread.run(HandlerThread.java:65)