Whatever I tried I always got this error
Since I spent several hours and just couldn’t get the NativeAudio plugin to play an audio file in Ionic (no matter if React or Angular), I had to dig through the JAVA code of the plugin.
Apparently the Cordova NativeAudio plugin is not compatible with the new Capacitor directory structure ?
Therefore make the following adjustment in this file:
appname/android/capacitor-cordova-android-plugins/src/main/java/com/rjfun/cordova/plugin/nativeaudio/NativeAudio.java
try { audioID = data.getString(0); if (!assetMap.containsKey(audioID)) { String assetPath = data.getString(1); Log.d(LOGTAG, "preloadComplex - " + audioID + ": " + assetPath); double volume; if (data.length() <= 2) { volume = 1.0; } else { volume = data.getDouble(2); } int voices; if (data.length() <= 3) { voices = 1; } else { voices = data.getInt(3); } String fullPath = "www/".concat(assetPath); Context ctx = cordova.getActivity().getApplicationContext(); AssetManager am = ctx.getResources().getAssets(); AssetFileDescriptor afd = am.openFd(fullPath); NativeAudioAsset asset = new NativeAudioAsset( afd, voices, (float)volume); assetMap.put(audioID, asset); return new PluginResult(Status.OK); } else { return new PluginResult(Status.ERROR, ERROR_AUDIOID_EXISTS); } } catch (JSONException e) { return new PluginResult(Status.ERROR, e.toString()); } catch (IOException e) { return new PluginResult(Status.ERROR, e.toString()); }
In the marked line simply change “www” by “public”.
Then
ionic capacitor run android --host=IP_DEINES_RECHNERS --livereload
To view the changes in the app on your phone.
From now on the NativeAudio plugin finds the files.
For the first time after hours the code gave me a “Y” as an alert box ?
import { Component } from '@angular/core'; import { NativeAudio } from '@ionic-native/native-audio/ngx'; import { Platform } from '@ionic/angular'; @Component({ selector: 'app-tab1', templateUrl: 'tab1.page.html', styleUrls: ['tab1.page.scss'] }) export class Tab1Page { constructor( public platform: Platform ) { this.platform.ready().then(() => { var n = new NativeAudio; var onSuccess = function() { alert("Y"); } var onError = function(u: any) { alert("X2" + u); } n.preloadSimple('uniqueId12', 'assets/file2.mp3').then(onSuccess, onError); //alert("platform ready"); }); } playSound() { alert("test"); } }