javafxports如何调用android原生Media Player

javafxports如何调用android原生Media Player,第1张

概述由于javafxportsMedia尚未实现,我希望使用AndroidNativeMediaPlayer.有谁知道如何做到这一点.解决方法:如果您查看GoNative示例here(docs和code),您将找到一种方法将Android本机代码添加到JavaFX项目中.这是使用Gluon插件将android.media.MediaPlayer添加到JavaFX项目的简单示

由于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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1103579.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存