2017-07-14 6 views
0

私はこのテーマに関する様々な質問に様々な回答をしてきましたが、私は結果とそのように見えるいくつかのコードに来ました。私はそれのNSURLの部分に立ち往生している。 iOSグルーオンプロジェクトのassetsフォルダに2つのmp3トラックがあります。私は再生を処理するためにIOSAudioServiceクラスを作った。ビューの再生ボタンからPlay()メソッドに引数を渡しています。実際のファイル以外のものはすべて動作中として登録されています。私は、コードを見ることから無関係の値であるNSErrorを取得しているので、引数が正しく渡されていないか、ファイルを見つけることができません。以下のコード。Gluon iOSオーディオプレーヤー

public AVAudioPlayer backgroundMusic; 
private double currentPosition; 
NSURL songURL = null; 

@Override 
public void Play(String filename){ 
songURL = new NSURL(filename); 

try { 
     if (backgroundMusic != null) { 
      Resume(); 
     } 
     else { 
     //Start the audio at the beginning. 
     currentPosition = 0; 
     backgroundMusic = new AVAudioPlayer(songURL); 
     //create the mendia player and assign it to the audio 
     backgroundMusic.prepareToPlay(); 
     backgroundMusic.play();} 
     //catch the audio error 
    } catch(NSErrorException e) { 
     System.out.println("error: " + e); 
    } 
} 
@Override 
public void Stop() { 
    backgroundMusic.stop(); 
    backgroundMusic = null; 
} 
@Override 
public void Pause() { 
    currentPosition = backgroundMusic.getCurrentTime(); 
    backgroundMusic.pause(); 
} 
@Override 
public void Resume() { 
    backgroundMusic.setCurrentTime(currentPosition); 
    backgroundMusic.play(); 
} 

try { 
     services = (AudioService) Class.forName("com.gluonhq.charm.down.plugins.ios.IOSAudioService").newInstance(); 
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) { 
     System.out.println("Error " + ex); 
    } 

NSExceptionErrorのcatchブロックでエラーが発生しました。

if (services != null) { 
     final HBox hBox = new HBox(10, 
       MaterialDesignIcon.PLAY_ARROW.button(e -> services.Play("/audio.mp3")), 
       MaterialDesignIcon.PAUSE.button(e -> { 
        if (!pause) { 
         services.Pause(); 
         pause = true; 
        } else { 
         services.Resume(); 
         pause = false; 
        } 
       }), 
       MaterialDesignIcon.STOP.button(e -> services.Stop())); 
     //set the HBox alignment 
     hBox.setAlignment(Pos.CENTER); 
     hBox.getStyleClass().add("hbox"); 
     //create and set up a vbox to include the image, audio controls and the text then set the alignment 
     final VBox vBox = new VBox(5, Image(), hBox, text1); 
     vBox.setAlignment(Pos.CENTER); 
     setCenter(new StackPane(vBox)); 
    } else { 
     //start an error if service is null 
     setCenter(new StackPane(new Label("Only for Android"))); 
    } 
    Services.get(LifecycleService.class).ifPresent(s -> s.addListener(LifecycleEvent.PAUSE,() -> services.Stop())); 
} 

私はまた、サービスファクトリクラスを作成し、Audio performance with Javafx for Android (MediaPlayer and NativeAudioService)からインターフェイスが追加audio要素を取り出すのアドバイスに従ってきたし、可能ならば、私は、ビューごとのビューでこれを行うことを意図しています。

+0

エラーのスタックトレースを投稿できますか? –

+0

私はアプリケーションが実際にクラッシュしないスタックトレースを持っていません。私は2000年から始まってエラーが出ます。詳細は今日まで月曜日まで利用できません。エラーは、NSURLがゼロの値を持つため、リソースが見つからないか、または可変ラッピングエラーが発生したことを意味しました。 NSBundleを使用してリソースのパスを最初に見つけ出す必要があるかどうか、私は可能であるとは確信していません。 –

+0

エラーコードはOSStatusエラー2003334207でした。 –

答えて

0

問題を解決し、Javadocs.Solvedで以下のコードを追加/置き換えて調べる必要があります。

songURL = new NSURL("file:///" + NSBundle.getMainBundle().findResourcePath(filename, "mp3")); 
try { 
songURL.checkResourceIsReachable();} 
catch(NSErrorException d) { 
    System.out.println("Song not found!" + d); 
} 
関連する問題