热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android简易音乐播放器实现代码

这篇文章主要为大家详细介绍了Android简易音乐播放器的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android音乐播放器的具体代码,供大家参考,具体内容如下

1.播放项目内的音乐

package com.thm.g150820_android26_playmusic;
import Android.media.MediaPlayer; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.SeekBar;

public class MainActivity extends AppCompatActivity {

private MediaPlayer mediaPlayer; 
private SeekBar seekBar;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
seekBar = (SeekBar) findViewById(R.id.seekBar);

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
 @Override
 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

 }

 @Override
 public void onStartTrackingTouch(SeekBar seekBar) {

 }

 @Override
 public void onStopTrackingTouch(SeekBar seekBar) {
 //获取拖动结束之后的位置
 int progress = seekBar.getProgress();
 //跳转到某个位置播放
 mediaPlayer.seekTo(progress);
 }
});
}

public void isPlayOrPause(View view){ 
//把View强转为ImageButton 
ImageButton imageButton = (ImageButton) view;

if(mediaPlayer==null) {
 //实例化MediaPlayer
 mediaPlayer = MediaPlayer.create(this, R.raw.yao);
 //开始播放
 mediaPlayer.start();
 //图标修改为暂停的图标
 imageButton.setImageResource(android.R.drawable.ic_media_pause);
 //获取音乐的总时长
 int duration = mediaPlayer.getDuration();
 //设置进度条的最大值为音乐的总时长
 seekBar.setMax(duration);

 new MyThre().start();

}//判断如果音乐在播放
else if(mediaPlayer.isPlaying()){
 //就暂停音乐
 mediaPlayer.pause();
 //图标修改为播放的图标
 imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
 mediaPlayer.start();
 //图标修改为暂停的图标
 imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}

//写内部类 
class MyThre extends Thread{ 
@Override 
public void run() { 
super.run(); 
while(seekBar.getProgress()<=seekBar.getMax()){

 //获取当前音乐播放的位置
 int currentPosition = mediaPlayer.getCurrentPosition();

 //让进度条动起来
 seekBar.setProgress(currentPosition);
 }
 }
}
}

2.播放内存卡中的音乐

package com.thm.g150820_android26_playmusic;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

 private MediaPlayer mediaPlayer;
 private SeekBar seekBar;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 seekBar = (SeekBar) findViewById(R.id.seekBar);

 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
 @Override
 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

 }

 @Override
 public void onStartTrackingTouch(SeekBar seekBar) {

 }

 @Override
 public void onStopTrackingTouch(SeekBar seekBar) {
 //获取拖动结束之后的位置
 int progress = seekBar.getProgress();
 //跳转到某个位置播放
 mediaPlayer.seekTo(progress);
 }
 });
 }


 public void isPlayOrPause(View view){
 //把View强转为ImageButton
 ImageButton imageButton = (ImageButton) view;

 if(mediaPlayer==null) {
 //实例化MediaPlayer
 //播放应用内的音乐
 //mediaPlayer = MediaPlayer.create(this, R.raw.yao);

 //播放内存卡中的音乐
 mediaPlayer = new MediaPlayer();

 //设置类型
 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
 //设置音乐路径
 try {
 mediaPlayer.setDataSource(this, Uri.parse("storage/sdcard0/Music/a.mp3"));
 //播放之前准备一下
 mediaPlayer.prepare();
 } catch (IOException e) {
 e.printStackTrace();
 }


 //开始播放
 mediaPlayer.start();
 //图标修改为暂停的图标
 imageButton.setImageResource(android.R.drawable.ic_media_pause);
 //获取音乐的总时长
 int duration = mediaPlayer.getDuration();
 //设置进度条的最大值为音乐的总时长
 seekBar.setMax(duration);

 new MyThre().start();

 }//判断如果音乐在播放
 else if(mediaPlayer.isPlaying()){
 //就暂停音乐
 mediaPlayer.pause();
 //图标修改为播放的图标
 imageButton.setImageResource(android.R.drawable.ic_media_play);
 }else{
 mediaPlayer.start();
 //图标修改为暂停的图标
 imageButton.setImageResource(android.R.drawable.ic_media_pause);
 }
 }

 //写线程内部类
 class MyThre extends Thread{
 @Override
 public void run() {
 super.run();
 while(seekBar.getProgress()<=seekBar.getMax()){

 //获取当前音乐播放的位置
 int currentPosition = mediaPlayer.getCurrentPosition();

 //让进度条动起来
 seekBar.setProgress(currentPosition);
 }
 }
 }
}

3.添加读取内存的权限

更多关于播放器的内容请点击《java播放器功能》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 在执行 Vim/VM 命令时遇到错误提示:检测到名为
    在使用 Docker 时,通过 Vim 编辑 Dockerfile 文件时遇到了错误提示:“检测到名为 .dockerfile.swp 的交换文件”。这一问题通常是因为上次编辑该文件时意外中断,导致系统生成了临时的交换文件。为了解决这个问题,可以手动删除该交换文件或使用 Vim 的恢复功能来恢复未保存的更改。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 在使用关系型数据库时,通常需要通过用户名和密码进行身份验证才能访问数据。然而,MongoDB默认情况下并不强制要求这种身份验证机制,使得用户无需凭据即可访问并执行各种操作。虽然这一设计简化了初学者的上手过程,但也带来了显著的安全风险。为了提升MongoDB的连接安全性,本文将探讨多种策略与实践,包括启用身份验证、配置网络访问控制、加密通信以及定期审计安全设置,以确保数据库的安全性和数据的完整性。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 本文将详细介绍在Android应用中添加自定义返回按钮的方法,帮助开发者更好地理解和实现这一功能。通过具体的代码示例和步骤说明,本文旨在为初学者提供清晰的指导,确保他们在开发过程中能够顺利集成返回按钮,提升用户体验。 ... [详细]
  • C++ 进阶:类的内存布局与虚函数类的实现细节
    C++ 进阶:类的内存布局与虚函数类的实现细节 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 在处理分享功能时,以往通常会首先考虑使用第三方SDK,如友盟等。然而,通过实际项目经验发现,利用iOS原生的UIActivityViewController不仅可以实现高效、稳定的分享功能,还能更好地控制用户体验。本文将详细介绍如何利用iOS原生技术缓存HTML内容,并结合URL分享的最佳实践,帮助开发者在实际开发中提升应用性能和用户满意度。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 题目《UVa 11978 福岛核爆问题》涉及圆与多边形交集面积的计算及二分法的应用。该问题的核心在于通过精确的几何运算与高效的算法实现来解决复杂图形的面积计算。在实现过程中,特别需要注意的是对多边形顶点的平移处理,确保所有顶点包括最后一个顶点 \( p[n] \) 都经过正确的位移,以避免因细节疏忽导致的错误。此外,使用循环次数为50次的二分法能够有效提高算法的精度和稳定性。 ... [详细]
author-avatar
带上耳机全世界跟我8没关系
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有