javafxports如何调用android原生Media Player
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javafxports如何调用android原生Media Player,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2786字,纯文字阅读大概需要4分钟。
内容图文
由于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所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。