陈寒丫丫 2022-12-05 16:18 采纳率: 45.5%
浏览 11

真机测试音乐播放器,语音控制bug

使用真我手机语音助手测试自己开发的音乐app,语音控制上一曲,下一曲,歌曲会发生改变,但界面没有改变。
目前就是,播放的歌曲,和界面显示的歌词不一样。
实现:语音切歌,歌词画面随着改变
报错:W/System.err: java.lang.NoSuchFieldException: No field sDurationScale in class Landroid/animation/ValueAnimator; (declaration of 'android.animation.ValueAnimator' appears in /system/framework/framework.jar)

img

LrcUtils.java代码:

     /**
     * 重置动画缩放时长
     */
    public static void resetDurationScale() {

        try {
            // Field mField = ValueAnimator.class.getDeclaredField("sDurationScale");
            @SuppressLint("SoonBlockedPrivateApi") Field mField = ValueAnimator.class.getDeclaredField("sDurationScale");
            mField.setAccessible(true);
            mField.setFloat(null, 1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

LyricView,java

    /**
     * 滑动到指定的行
     */
    private void smoothScrollTo(int line, int duration) {
//        if (!isShowTimeline) {
//        mCurrentLine = line;
//        }
        float offset = getOffset(line);
        endAnimation();

        mAnimator = ValueAnimator.ofFloat(mOffset, offset);
        mAnimator.setDuration(duration);
        mAnimator.setInterpolator(new LinearInterpolator());
        mAnimator.addUpdateListener(animation -> {
            mOffset = (float) animation.getAnimatedValue();
            invalidate();
        });
        LrcUtils.resetDurationScale();
        mAnimator.start();
    }

    /**
     * 传入时间刷新歌词
     */
    public void updateTime(long time) {
        if (!lrcNotEmpty()) {
            return;
        }

        runOnUi(() -> {
            int line = findShowLine(time);
            if (line != mCurrentLine) {
                mCurrentLine = line;
                if (!isShowTimeline) {
                    smoothScrollTo(line, ANIMATION_DURATION);
                } else {
                    invalidate();
                }
            }
        });
    }

    /**
     * 主线程中运行
     */
    private void runOnUi(Runnable r) {
        if (Looper.getMainLooper() == Looper.myLooper()) {
            r.run();
        } else {
            post(r);
        }
    }
  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-12-06 10:07
    关注

    应该是反射失败了,估计是源码中修改了这个文件

    评论

报告相同问题?

问题事件

  • 创建了问题 12月5日

悬赏问题

  • ¥15 距离软磁铁一定距离的磁感应强度大小怎么求
  • ¥15 霍尔传感器hmc5883l的xyz轴输出和该点的磁感应强度大小的关系是什么
  • ¥15 vscode开发micropython,import模块出现异常
  • ¥20 Excel数据自动录入表单并提交
  • ¥30 silcavo仿真,30分钟,只需要代码
  • ¥15 FastReport 怎么实现打印后马上关闭打印预览窗口
  • ¥15 利用3支股票数据估计其均值和方差的95%置信区间。
  • ¥15 微信小程序运行一项功能时,弹出未知错误弹框,检查代码没有问题
  • ¥15 ATAC测序生成self-pseudo replicates之前是否要进行去线粒体reads
  • ¥15 python模糊字匹配函数问题