如何将系统音量与媒体播放器应用程序同步

2024-02-16

我刚刚开发了一个简单的媒体播放器,可以播放歌曲,并且有一个可以调节歌曲音量的搜索栏。 这是我的代码:

public class MainActivity extends AppCompatActivity {

Button playBtn;
SeekBar positionBar;
SeekBar volumeBar;
TextView elapsedTimeLabel;
TextView remainingTimeLabel;
MediaPlayer mp;
int totalTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    playBtn = (Button) findViewById(R.id.playBtn);
    elapsedTimeLabel = (TextView) findViewById(R.id.elapsedTimeLabel);
    remainingTimeLabel = (TextView) findViewById(R.id.remainingTimeLabel);

    // Media Player
    mp = MediaPlayer.create(this, R.raw.song);
    mp.setLooping(true);
    mp.seekTo(0);
    mp.setVolume(0.5f, 0.5f);
    totalTime = mp.getDuration();

    // Position Bar
    positionBar = (SeekBar) findViewById(R.id.positionBar);
    positionBar.setMax(totalTime);
    positionBar.setOnSeekBarChangeListener(
            new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    if (fromUser) {
                        mp.seekTo(progress);
                        positionBar.setProgress(progress);
                    }
                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {

                }

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {

                }
            }
    );


    // Volume Bar
    volumeBar = (SeekBar) findViewById(R.id.volumeBar);
    volumeBar.setOnSeekBarChangeListener(
            new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    float volumeNum = progress / 100f;
                    mp.setVolume(volumeNum, volumeNum);
                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {

                }

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {

                }
            }
    );

    // Thread (Update positionBar & timeLabel)
    new Thread(new Runnable() {
        @Override
        public void run() {
            while (mp != null) {
                try {
                    Message msg = new Message();
                    msg.what = mp.getCurrentPosition();
                    handler.sendMessage(msg);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {}
            }
        }
    }).start();
}
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        int currentPosition = msg.what;
        // Update positionBar.
        positionBar.setProgress(currentPosition);

        // Update Labels.
        String elapsedTime = createTimeLabel(currentPosition);
        elapsedTimeLabel.setText(elapsedTime);

        String remainingTime = createTimeLabel(totalTime-currentPosition);
        remainingTimeLabel.setText("- " + remainingTime);
    }
};

public String createTimeLabel(int time) {
    String timeLabel = "";
    int min = time / 1000 / 60;
    int sec = time / 1000 % 60;

    timeLabel = min + ":";
    if (sec < 10) timeLabel += "0";
    timeLabel += sec;

    return timeLabel;
}

public void playBtnClick(View view) {

    if (!mp.isPlaying()) {
        // Stopping
        mp.start();
        playBtn.setBackgroundResource(R.drawable.ic_stop);

    } else {
        // Playing
        mp.pause();
        playBtn.setBackgroundResource(R.drawable.ic_play);
    }

}                                                                        }

现在,当我使用媒体播放器搜索栏调节音量时,电话系统音量没有改变,反之亦然。 如何使音量搜索栏与手机系统音量同步,以便同时调节两者的音量?


使用音频管理器来提高和降低音量。

AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);

//Using volume control UI visibility
//To increase media player volume
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
//To decrease media player volume
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);

//Without volume control UI
//To increase media player volume
audioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);
//To decrease media player volume
audioManager.adjustVolume(AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将系统音量与媒体播放器应用程序同步 的相关文章

  • Android主线程的IO操作

    我的问题有两个 是否建议在 Android 的主线程上进行 IO 操作 或者它是否有可能导致我的应用程序崩溃 如果在主线程上执行 IO 操作不理想 我可以使用哪些其他框架 以便当我的应用程序加载时它可以执行一些基本的 IO 文件读取并将值存
  • 使用 JSONArray 还是普通数组来存储/读取数据更有效?

    我正在使用一个连接到PHP MySQL返回所有内容的服务器JSON格式 例如 用户列表作为JSONArray of JSONObject 每个对象都包含单个用户的信息 姓名 位置 电话号码等 处理这种格式的信息时 将所有内容保留在其中会更有
  • 如何使用 gradle 从 3 个子模块构建 1 个 jar

    I have 安卓工作室3 gradle 4 1 梯度工具3 classpath com android tools build gradle 3 0 1 当我有一个模块并使用 gradle 工具 2 时 我使用了 task makeJar
  • 如何在应用程序关闭时在 Android 通知中显示操作按钮?

    我有一个安卓应用程序 对于通知 我们必须显示一些操作按钮 当应用程序打开时 我们可以自由地构建通知并显示操作按钮 但是当应用程序关闭时 通知会在 Android 的通知托盘中收到 应用程序开发人员无法控制构建用户界面和操作按钮 我们现在如何
  • 如何在android中显示对话框之外的图像?

    我试图在对话框片段的顶部显示配置文件图像 一半在图像之外 我在下面附加了示例对话框 就像那样 并尝试了旧 Stackoverflow 解决方案中的所有 FrameLayout 协作 但我无法存档此内容 请给我正确的解决方案 谢谢 Updat
  • 吉夫伦致命信号11

    我正在尝试使用一些本机代码来创建 Gif 我使用绘画绘制图像 创建一些笔画 单击 保存 绘制的图像将保存为 JPG 格式 当我单击 创建 Gif 时 它会获取所有图像并开始创建 gif 这是当我收到致命信号 11 并且应用程序重新启动时 我
  • 改造中的多个队列导致内存不足错误?

    我正在使用retrofit2 做我的项目 当我的呼叫失败时 我再次重复相同的呼叫 重复此 呼叫使我的应用程序强制关闭 当我查看日志时 我得到了错误日志 如下所示 我觉得这是由于同一呼叫的多次排队造成的 所以我在排队之前就这样做了 我打电话给
  • Android 全屏对话框确认和拒绝操作

    材料设计中的全屏对话框应该在操作栏 工具栏上有确认和拒绝操作 我的问题是 我该怎么做 显示对话框 getFragmentManager beginTransaction add R id container new MyDialogFrag
  • 如果使用grifika的ContinualCaptureActivity中的预览方式,相机预览的视野会更小

    我们知道 当相机预览比例设置为时 在相同距离下我们会得到更大的预览视野4 3代替16 9 具体如下 Android Camera API 奇怪的缩放效果 https stackoverflow com questions 20664628
  • 错误类型 3 - 活动类不存在

    我正在尝试运行 webRTC 应用程序 但返回以下错误 启动应用程序 com onlinevoicecallapp com onlinevoicecallapp MainActivity 设备外壳命令 am start n com onli
  • React Native Expo StackNavigator 重叠通知栏

    我正在尝试为我的 React Native Expo 应用程序实现导航栏 这里有一个问题 dependencies expo 18 0 3 react 16 0 0 alpha 12 react native 0 45 1 react na
  • MIUI 权限被拒绝活动 KeyguardLocked

    当应用程序处于后台且屏幕被锁定时 我无法启动活动 没有异常或警告 只是不调用 onCreate 我一直在与这个问题作斗争 我想我终于找到了它的根源 日志中有一行 D com android server am ExtraActivityMa
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • 如何为我的 Android Market APK 创建证书?

    我想将我的第一个 APK 应用程序上传到 Android Market 但我收到了此错误 顺便说一下 在 stackoverflow 中搜索时并没有引导我找到正确的链接 市场不接受使用调试证书签名的 APK 创建有效期至少 50 年的新证书
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 离子初始加载时间

    我正在使用 Ionic 构建一个简单的应用程序 但我的应用程序在冷启动时的初始加载时间方面存在性能问题 这是我所做的 collection repeat 代替带有 track by 的 ng repeat 原生滚动 overflow scr
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • 如何更改操作栏背景和文本颜色

    我正在使用本教程中的导航抽屉 http www androidhive info 2013 11 android sliding menu using navigation drawer http www androidhive info

随机推荐

  • 如何本地读取羽毛/箭头文件?

    I have feather格式文件sales feather我用来在之间交换数据python and R 在 R 中我使用以下命令 df arrow read feather sales feather as data frame TRU
  • 如何从 NetBeans 6.8 中删除所有断点?

    如何从 NetBeans 6 8 中删除所有断点 Select menu Window Debugging Breakpoints or press Alt Shift 5 then right click in the Breakpoin
  • trunc(date, 'IW') 到底做什么?

    对于我的项目 我需要在一周中的天数和 1 7 值之间建立绝对的数字对应关系 您可能知道 日期和数字之间的关联可能会根据区域设置而有所不同 例如在德国 星期一是 1 星期日是 7 而在美国 星期一是 2 星期日是 1 因此 在寻找解决方案时
  • R 使用JavaScript自定义DT表

    我之前问过如何根据隐藏列中存储的颜色为单元格着色 link https stackoverflow com questions 56105725 dt apply background colour to cell based on sep
  • EasyPHP 16.1 自动启动 httpd 和 mysql

    我很困惑 因为每次运行 EasyPHP 时我都需要通过仪表板来启动 http 和 mysql 服务器 真的很烦人 有没有办法设置easyphp自动启动http和mysql 现在 需要点击 10 次才能运行网站 而不是 14 1 中的 3 次
  • Google Colab 驱动器安装(带下划线)无法正常工作

    直到昨天 1月20日 我还可以连接到另一个谷歌驱动器帐户 使用drive mount 但是当我今天尝试这个时 谷歌colab向我显示了这个错误 from google colab import drive drive mount conte
  • 在两个坐标空间之间变换对象

    所以我正在阅读 图形和游戏开发的 3D 数学入门 一书 我几乎没有数学背景 我终于开始掌握矢量 矩阵数学 这是一种解脱 但是 是的 总有一个但是 我无法理解对象从一个坐标空间到另一个坐标空间的转换 作者在书中举了一个例子枪击汽车 图 htt
  • firebase auth 在安装过程中要求授权代码

    我正在尝试安装 firebase 身份验证 它要求在 cli 中提供授权代码 无论我如何检查 我都没有看到任何授权代码 我在 firebaseConfig 中提供了 Web api 密钥等 我是否遗漏了一些明显的东西 这是我在 cli 中的
  • Rails 路线 - 斜杠字符与哈希字符

    在 url 和 Rails 路由中 使用斜杠字符与井号 井号 字符有什么区别 这些工作 get static pages about get about to static pages about as about 这些不 get stat
  • MVC - 一个模型可以由几个其他模型组成吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 当同步/异步与串行/并发队列混合时,调度程序如何工作?

    在 Grand Central Dispatch 中 调度程序如何处理不同的队列 serial and concurrent 当使用dispatch sync函数和dispatch async功能 首先我们需要两种类型queue one s
  • 使用 Spring Data Mongo 的 ObjectId 进行 Facet + 聚合查询问题

    我正在开发Spring Boot Spring Data Mongo 我真的很努力 public Page
  • 命令组合设计模式

    有没有人有 Ruby 中使用组合命令的好例子 这是我在各种设计模式文献中看到的一种设计模式混合体 听起来相当强大 但一直无法找到任何有趣的用例或代码 受到总体想法的启发这篇博文中的示例模式实现 http blog ashwinraghav
  • INVD指令有什么用?

    The x86 INVD http faydoc tripod com cpu invd htm使缓存层次结构无效without显然 将内容写回内存 我很好奇 这样的指令有什么用 鉴于人们对各个缓存级别中可能存在哪些数据的控制非常少 甚至对
  • jsp页面中使用spring bean的教程

    我不熟悉与 HTML 交付相关的技术 例如 JSP 但我知道基本概念 在我的应用程序中 我使用 Spring Beans 和 Spring Security 以及 Blaze DS 通过 AMF 协议与 Flex 应用程序进行通信 一切都很
  • Google 地图 API 中的建议路线选项?

    我需要显示源和目的地之间的多条路线 例如 如果我选择源和目的地 我就能够找到一条路线 但就像在谷歌地图中一样 我们有一个建议的路线选项 我需要实现它 但我所有的尝试都失败了 请找到下面的代码 例如 它显示源和目的地之间的单个路由 如果我错过
  • 在 php 中测量字符串大小(以字节为单位)

    我正在为一个门户网站做一个房地产提要 它告诉我字符串的最大长度应该是 20 000 字节 20kb 但我以前从未遇到过这个 我怎样才能测量byte的大小varchar string 所以我可以做一个 while 循环来修剪它 您可以使用 m
  • java中的资源是什么?为什么使用完后要关闭它?

    java中 资源 一词的含义是什么 尽管垃圾收集器在jvm中运行 为什么我们在使用后必须关闭它 为什么我们必须在finally块中编写资源清理代码 资源是数量有限的东西 例如数据库连接和文件描述符 GC 释放内存 但您仍然必须释放资源 例如
  • Nestjs ConfigModule.forRoot() 异步

    我想从具有 REST API 的配置服务器加载 Nestjs 中的配置 以允许集中式应用程序配置 但是 ConfigModule forRoot 函数没有异步版本 因此配置返回为undefined 有没有办法解决 通过创建返回 Nest C
  • 如何将系统音量与媒体播放器应用程序同步

    我刚刚开发了一个简单的媒体播放器 可以播放歌曲 并且有一个可以调节歌曲音量的搜索栏 这是我的代码 public class MainActivity extends AppCompatActivity Button playBtn Seek