
由于javafxports Media尚未实现,我希望使用Android Native MediaPlayer.有谁知道如何做到这一点.
解决方法:
如果您查看GoNative示例here(docs和code),您将找到一种方法将AndroID本机代码添加到JavaFX项目中.
这是使用gluon插件将androID.media.MediaPlayer添加到JavaFX项目的简单示例.
基于Single VIEw项目,我们首先添加一个包含所需音频方法签名的界面:
public interface NativeAudioService { voID play(); voID pause(); voID resume(); voID stop();}现在在我们的VIEw中,我们可以创建按钮来调用这些方法,这些按钮基于实现NativeAudioService接口的AndroIDNativeAudio类的实例:
public class BasicVIEw extends VIEw { private NativeAudioService service; private boolean pause; public BasicVIEw(String name) { super(name); try { service = (NativeAudioService) Class.forname("com.gluonhq.nativeaudio.AndroIDNativeAudio").newInstance(); } catch (ClassNotFoundException | InstantiationException | illegalaccessexception ex) { System.out.println("Error " + ex); } if (service != null) { final HBox hBox = new HBox(10, MaterialDesignIcon.PLAY_ARROW.button(e -> service.play()), MaterialDesignIcon.PAUSE.button(e -> { if (!pause) { service.pause(); pause = true; } else { service.resume(); pause = false; } }), MaterialDesignIcon.Stop.button(e -> service.stop())); hBox.setAlignment(Pos.CENTER); setCenter(new StackPane(hBox)); } else { setCenter(new StackPane(new Label("Only for AndroID"))); } } @OverrIDe protected voID updateAppbar(Appbar appbar) { appbar.setNavIcon(MaterialDesignIcon.MUSIC_NOTE.button()); appbar.setTitleText("Native Audio"); }}现在,我们在AndroID文件夹下创建本机类.它将使用androID API.它会尝试找到我们必须放在/ src / androID / assets文件夹下的音频文件audio.mp3:
package com.gluonhq.nativeaudio;import androID.content.res.AssetfileDescriptor;import androID.media.AudioManager;import androID.media.MediaPlayer;import java.io.IOException;import javafxports.androID.FXActivity;public class AndroIDNativeAudio implements NativeAudioService { private MediaPlayer mp; private int currentposition; public AndroIDNativeAudio() { } @OverrIDe public voID play() { currentposition = 0; try { if (mp != null) { stop(); } mp = new MediaPlayer(); AssetfileDescriptor afd = FXActivity.getInstance().getAssets().openFd("audio.mp3"); mp.setDataSource(afd.getfileDescriptor(), afd.getStartOffset(), afd.getLength()); mp.setAudioStreamType(AudioManager.STREAM_RING); mp.setonCompletionListener(mp -> stop()); mp.prepare(); mp.start(); } catch (IOException e) { System.out.println("Error playing audio resource " + e); } } @OverrIDe public voID stop() { if (mp != null) { if (mp.isPlaying()) { mp.stop(); } mp.release(); mp = null; } } @OverrIDe public voID pause() { if (mp != null) { mp.pause(); currentposition = mp.getCurrentposition(); } } @OverrIDe public voID resume() { if (mp != null) { mp.start(); mp.seekTo(currentposition); } }}最后,我们可以将项目部署到运行gradlew androIDInstall的AndroID设备上.
总结以上是内存溢出为你收集整理的javafxports如何调用android原生Media Player全部内容,希望文章能够帮你解决javafxports如何调用android原生Media Player所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)