Saat menggunakan plugin Cordova Native Audio pada project ionic saya, terdapat error java.io.FileNotFoundException www/assets/musik/1.mp3
Padahal saya sudah menaruhkan file aset yang saya miliki di direktori assets/musik/1.mp3
Berikut adalah contoh sederhana source code saya :
home.page.html
<ion-header [translucent]="true">
<ion-toolbar>
<ion-title>
Blank
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content [fullscreen]="true">
<ion-header collapse="condense">
<ion-toolbar>
<ion-title size="large">Blank</ion-title>
</ion-toolbar>
</ion-header>
<div id="container">
<ion-button (click)="playAudio()">Play audio</ion-button>
</div>
</ion-content>
home.page.ts
import { Component, OnInit } from '@angular/core';
import { NavController } from '@ionic/angular';
import { NativeAudio } from '@awesome-cordova-plugins/native-audio/ngx';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage {
constructor(
public navCtrl: NavController,
public nativeAudio: NativeAudio
) {
}
ngOnInit(){
this.nativeAudio.preloadSimple('1mp3', 'assets/musik/1.mp3').then((res)=>{
console.log(res);
}, (err) => {
console.log(err)
});
}
async playAudio(){
this.nativeAudio.play('1mp3', () => console.log('1mp3 is done playing'));
}
}
Setelah berselancar kesana kemari, akhirnya saya mendapatkan solusi yang tepat.
Solusi :
Plugin Cordova Native Audio membaca folder aset “www“. Sedangkan, pada project Ionic Capacitor membaca “public“.
Kita perlu merubah kode pada Plugin untuk membaca ke folder “public“
IOS
silahkan buka direktori “ios/capacitor-cordova-ios-plugins/sources/CordovaPluginNativeaudio/NativeAudio.m“
pad baris 87, ubah NSString* basePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"www"];
menjadi NSString* basePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"public"];
Android
Untuk android buka direktori “android/capacitor-cordova-android-plugins/src/main/java/com/rjfun/cordova/plugin/nativeaudio/NativeAudio.java“
Pada baris 85, ubah String fullPath = "www/".concat(assetPath);
menjadi String fullPath = "public/".concat(assetPath);
Setelah diubah, kita hanya perlu membuil kembali project kita ke IOS atau Android.