Kindle Fire HD 8第10代平板电脑上的音乐应用不兼容问题-FireOS 7.3.1.4-发生了什么事?

如何解决Kindle Fire HD 8第10代平板电脑上的音乐应用不兼容问题-FireOS 7.3.1.4-发生了什么事?

我们的APP与具有fireos 5.1.x的旧版本Kindle Fire HD配合使用正常。 APP仅在具有fireos 7.3.1.4的Kindle HD 8(第10代)上有问题。

这个问题是随机的,有时应用程序工作正常,但有时应用程序表现不佳。

fireos 7.3.1.4使用的是Android API LEVEL 28(Android Pie)

我们有一个带有3个Media Player的音乐APP,我们在我们的APP中使用的是Androids标准Media Player。

所有3个媒体播放器均同时运行,并且我们在每个媒体播放器上运行的音轨具有相同的持续时间。

我们正在后台线程中进行所有处理,例如在所有媒体播放器上播放音乐,因此共有3个线程并行运行。

由于某些故障,问题出在Kindle HD 8(第10代)上,运行在第一媒体播放器上的曲目与第二媒体播放器上的曲目重叠或超出了第二媒体播放器上的曲目。

总体而言,我的意思是,即使3个媒体播放器的持续时间相同并且在同一时间开始,它们的轨道也不同步。

另外一首歌曲开始时没有问题,它们在开始时是同步的,但是大约50秒后,它们开始变得不同步。

该问题是随机发生的。

Again应用程序在较旧版本的Kindle Fire平板电脑和三星手机上均能正常工作,该问题仅在Kindle HD 8(10代)上出现。

因此,如果有人可以帮助我们提供有关新Kindle Fire HD发生的情况的任何解决方案?,我将非常感谢您的帮助。

我的猜测是,运行媒体播放器的后台线程在随机时间出现了一些问题,导致媒体播放器不同步。但我不知道如何纠正这种行为

请帮助我们,因为我们在此问题上受阻,因此我们的用户无法在新的Kindle Fire HD 8平板电脑上使用我们的APP。谢谢

以下是我们拥有的3个Media Player的一些代码片段

我们创建一个新的媒体播放器并在其中添加曲目。代码中的for循环执行了3次。

protected void initTracks(boolean high) {

        this.mWavPlayers = new ArrayList<>();

        HashMap<TrackType,String> map = null;

        if (high) {
            map = mPathHigh;
        } else {
            map = mPathLow;
        }

        try {
            for (Map.Entry<TrackType,String> entry : map.entrySet()) {
                MediaPlayer player = new MediaPlayer();
                player.setDataSource(entry.getValue());
                player.prepare();
                mWavPlayers.add(new WavPlayerItem(entry.getValue(),entry.getKey(),player));
                if (entry.getKey().equals(TrackType.backing_MUSIC)) {
                    mDuration = player.getDuration();
                }
            }
        } catch (IOException e) {
            Log.e(TAG,"Map exception",e);
        }
    }

方法创建并启动后台线程,在for循环中创建3个后台线程

 protected void sendState(WavPlayerEvent.State state) {
       
 CyclicBarrier barrier = new CyclicBarrier(mWavPlayers.size() + 1);
  
        for (WavPlayerItem item : mWavPlayers) {
            MediaPlayer player = (MediaPlayer) item.getPlayer();
            new Thread(new SyncedStateRunnable(state,player,barrier,STATE.PLAYER)).start();
        }
    }

方法的运行方法是在start()中启动播放器

    private class SyncedStateRunnable<T> implements Runnable {
        private WavPlayerEvent.State state;
        private MediaPlayer player;
        private NativeSuperpoweredRecorder recorder;
        private CyclicBarrier cyclicBarrier;
        private STATE entityState;

        SyncedStateRunnable(WavPlayerEvent.State state,T entity,CyclicBarrier cyclicBarrier,STATE entityState) {
            this.state = state;
            this.cyclicBarrier = cyclicBarrier;
            this.entityState = entityState;
            switch (entityState) {
                case PLAYER:
                    player = (MediaPlayer) entity;
                    break;
            }
        }

        @Override
        public void run() {
            awaitBarrier();
            switch (state) {
                case PLAYING:
                    start();
                    break;
                case STOP:
                    stop();
                    break;
                case PAUSE:
                    pause();
                    break;
            }
        }
        private void start() {
            switch (entityState) {
                case PLAYER:
                    try {
                        player.start();
                        Log.d(TAG,"player.start();");
                    } catch (IllegalStateException e) {
                        e.printstacktrace();
                    }
                    break;
            }
        }

解决方法

我将检查控制minSdkVersion和 targetSdkVersion并对其进行了修改。

,

您是否修改了minSdkVersion并将targetSdkVersion保持不变?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?