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

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(使用前将#替换为@)

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

  • 确定是否在已取得 root 权限的设备上运行

    我的应用程序具有某些功能 该功能只能在具有 root 权限的设备上运行 与其让此功能在使用时失败 然后向用户显示适当的错误消息 我更喜欢能够先默默地检查 root 是否可用 如果不可用 则首先隐藏相应的选项 有没有办法做到这一点 这是一个类
  • 任务“:app:checkReleaseDuplicateClasses”执行失败

    我的 React Native Android 构建中突然出现构建问题 令人惊讶的是 它是早上建好的 没有做任何改变 但突然就失败了 这就是我得到的错误 知道为什么会发生这种情况吗 在 stack 和 GitHub 中也看到了一些类似的问题
  • 服务在后台运行?

    我正在构建的应用程序的功能之一是记录功能 我通过在服务中启动 MediaRecorder 对象来实现此目的 Intent intent new Intent v getContext RecordService class Messenge
  • android - 过度绘制布局允许通过 LinearLayout 进行触摸

    在下面的 UI 中 我将下面的 drabable 覆盖了整个屏幕 LinearLayout 是透明的 并允许其下方的控件可单击或可触摸 基本上我可以滚动此 LinearLayout 下面的列表以及单击控件 我如何禁用它 See attach
  • Android,让文本切换器成为中心?

    如何集中我的文本切换器 我尝试过设置重力 但似乎不起作用 ts setFactory new ViewFactory public View makeView TextView t new TextView this t setTypefa
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • Android,语言文件不起作用

    我现在正在创建一个 Android 应用程序 并尝试为我的母语添加语言文件 但在某种程度上 这对我不起作用 我尝试在两部不同的手机中加载该应用程序 但结果相同 之前创建过语言文件 效果良好 但这次不行 手机设置为瑞典语 语言文件适用于我创建
  • 明文 HTTP 流量...不允许

    我的程序从用户那里获取一个 URL 因此它可以向互联网上的任何网站发出请求 我试图让这成为可能 我查找了有关 Android HTTP Cleartext 错误的所有答案 并做了这个 但它仍然不允许我连接我的测试本地 PHP 服务器 我在这
  • Twitter 集成期间获取访问令牌函数行为不当

    我只是想使用 twitter4j 从我的 Android 应用程序向 Twitter 分享文本 首先 我尝试的是我创建了一个新项目 并且这个特定的代码运行成功 然后我在我的应用程序中混合了该特定代码 登录 Twitter 成功完成 之后我发
  • 用于代码生成的 ANTLR 工具版本 4.7.1 与当前运行时版本 4.5.3 不匹配

    我正在开发一个 Android 应用程序 当前使用 DSL 和一些库 突然构建给了我这个错误 任务 app kaptDebugKotlin 失败 用于代码生成的 ANTLR 工具版本 4 7 1 与当前运行时版本 4 5 3 不匹配 用于解
  • NullPointerException org.chromium.android_webview.AwContents$AwViewMethodsImpl.onDragEvent

    大约 10 天前 我的应用程序开始记录此异常 在开发控制台上看到 java lang NullPointerException at org chromium android webview AwContents AwViewMethods
  • NoClassDefFoundError:com.google.firebase.FirebaseOptions

    我继续得到NoClassDefFoundError在我正在使用的其他测试设备 4 4 2 上 但在我的测试设备 Android 5 1 上运行良好 我尝试了用谷歌搜索的解决方案 但似乎没有任何效果 我正在使用 Firebase 实时数据库
  • 如何在Android中隐藏应用程序标题? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想隐藏应用程序标题栏 您可以通过编程来完成 import android app Activity import android os
  • 改造Android基本且简单的问题

    我的服务器返回简单的 Json 结果 如下所示 message Upload Success 我正在尝试将结果放入改造模型类中 public class MyResponse SerializedName message String me
  • Android 将菜单项在操作栏中向左对齐

    我的应用程序中有一个操作栏 它显示我定义的菜单项res menu activity main xml 我的菜单项在操作栏上向右对齐 我希望它们左对齐 我为此找到的唯一解决方案使用了自定义操作栏 如下所示 将菜单项放置在 Honeycomb
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • Admob - 没有广告可显示

    你好 我尝试制作一些在 Android 手机上显示广告的示例程序 并尝试在 v2 2 的模拟器上测试它 代码中的一切似乎都很好 但调试器中的 AdListener 表示 响应消息为零或空 onFailedToReceiveAd 没有广告可显
  • 将数据放入短信发送意图中?

    我想发送短信 如果文字太长 我会将其分成多条消息 我试图将一些额外的信息放入 已发送 意图中 以了解哪个部分已发送 以及所有部分何时完成 ArrayList

随机推荐

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

    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