android服务绑定音乐播放器,Android开发【04-21求助贴】使用后台服务的音乐播放器...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener {
TextView name=null;
TextView time=null;
ListView list=null;
ImageButton bef=null;
ImageButton las=null;
ImageButton stop=null;
SeekBar lev=null;
MyListAdapter listAdapter;
private List allList_= null;
MediaPlayer mediaPlayer=new MediaPlayer();
int p;MP3 mp3;long kk;
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.reset();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name=(TextView) findViewById(R.id.textView_MusicName);
time=(TextView) findViewById(R.id.time);
list=(ListView)findViewById(R.id.Music_List);
bef=(ImageButton) findViewById(R.id.bef);
las=(ImageButton) findViewById(R.id.las);
stop=(ImageButton) findViewById(R.id.stop);
lev=(SeekBar) findViewById(R.id.seekBar);
time=(TextView) findViewById(R.id.time);
bef.setOnClickListener(this);
las.setOnClickListener(this);
stop.setOnClickListener(this);
lev.setOnSeekBarChangeListener(this);
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}else {
allList_ = DateUtils.getAllList(MainActivity.this);
listAdapter = new MyListAdapter(this, allList_);
list.setAdapter(listAdapter);
}
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
p = position;
mp3 = allList_.get(p);
playSong();
}
});
mediaPlayer.setOnCompletionListener(new CompletionListener());
}
private void updateSeekBar(){
runOnUiThread(new Runnable() {
@Override
public void run() {
kk=mediaPlayer.getCurrentPosition();
lev.setProgress((int)kk);
lev.postDelayed(this,1000);
}
});
}
public static String formatTime(long time) {
String min = time / (1000 * 60) + "";
String sec = time % (1000 * 60) + "";
if (min.length() < 2) {
min = "0" + time / (1000 * 60) + "";
} else {
min = time / (1000 * 60) + "";
}
if (sec.length() == 4) {
sec = "0" + (time % (1000 * 60)) + "";
} else if (sec.length() == 3) {
sec = "00" + (time % (1000 * 60)) + "";
} else if (sec.length() == 2) {
sec = "000" + (time % (1000 * 60)) + "";
} else if (sec.length() == 1) {
sec = "0000" + (time % (1000 * 60)) + "";
}
return min + ":" + sec.trim().substring(0, 2);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
time.setText(formatTime(kk));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mediaPlayer.seekTo(lev.getProgress());
}
private final class CompletionListener implements MediaPlayer.OnCompletionListener {
@Override
public void onCompletion(MediaPlayer mp) {
if(!mediaPlayer.isPlaying()) {
nextsong();
}
}
}
private void playSong() {
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(mp3.getUrl());
mediaPlayer.prepare();
mediaPlayer.start();
lev.setMax(mediaPlayer.getDuration());
updateSeekBar();
} catch (IOException e) {
e.printStackTrace();
}
}
private void nextsong() {
if(p!=list.getCount()-1) {
p++;
mp3 = allList_.get(p);
playSong();
}else{
p=0;
mp3 = allList_.get(p);
playSong();
}
}
public void onClick(View v){
switch(v.getId()){
case R.id.bef:
if(p!=0) {
p--;
mp3 = allList_.get(p);
playSong();
}else {
int d=list.getCount()-1;
mp3 = allList_.get(d);
playSong();
}
break;
case R.id.las:
int l=list.getCount()-1;
if(p!=l) {
nextsong();
}else {
p=0;
mp3 = allList_.get(p);
playSong();
}
break;
case R.id.stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else{
mediaPlayer.start();
}
break;
default:break;
}
}
public void onRequestPermissionsResult(int requestCode,String[] permissions ,int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
allList_ = DateUtils.getAllList(MainActivity.this);
listAdapter = new MyListAdapter(this, allList_);
list.setAdapter(listAdapter);
} else {
Toast.makeText(this, "!!!!!", Toast.LENGTH_SHORT).show();
finish();
}
}
}
}
android服务绑定音乐播放器,Android开发【04-21求助贴】使用后台服务的音乐播放器...相关推荐
- Android 音乐播放器的开发教程(六)service的运用及音乐列表点击播放 ----- 小达
service的运用及音乐列表点击播放 按照前几篇博客的步骤,应该能看到自己手机里的音乐列表了,但是现在还只能看,不能点,还需要再给ListView添加点击事件的监听,接着启动一个Service来播放 ...
- 开发版速达 移动App后台服务部署指南
客户要使用移动App端进行单据录入和审批:资料和报表查看,则必须在速达服务器上部署一个后台服务应用,以便于数据与App进行交互,目前系统提供了2种部署方式:. 一.通过开发版服务端应用程序一键部署: ...
- java定义语法解析器,java开发工具intellij idea使用教程:定义语法和解析器.pdf
java开发工具intellij idea使用教程:定义语法和解析器.pdf 还剩 3页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 慧都 科技 -- ...
- 微信公众服务号接口接入,实现开发回复功能,而非后台设置
参考文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 接入概述 接入微信公众平台开发,开发者需要按照 ...
- 【车载开发系列】UDS诊断---链接控制服务($0x87)
[车载开发系列]UDS诊断-链接控制服务($0x87) 诊断---链接控制服务($0x87) [车载开发系列]UDS诊断---链接控制服务($0x87) 一.概念定义 二.应用场景 三.报文格式 1) ...
- Flask从0到1快速后台服务开发
Flask从0到1快速后台服务开发 版本说明: Python:3.7 Flask:1.0.2 前言 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Wer ...
- Notification使用详解之四:由后台服务向Activity发送进度信息
上次讲到了如何在Activity中监听后台服务的进度信息,实现的方式是让Activity与后台服务绑定,通过中间对象Binder的实例操作后台服务.从效果上来讲,这种方式是可行的,不过这种实现有个缺点 ...
- 基于腾讯云服务器部署微信小程序后台服务(Python+Django)
一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近Native App性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服 ...
- android服务绑定音乐播放器,Android基于Service的音乐播放器
本文开发一个基于Service的音乐播放器,音乐由后台运行的Service负责播放,当后台的播放状态发生变化时,程序将会通过发送广播通知前台Activity更新界面:当点击Activity的界面按钮时 ...
最新文章
- selenium 状态码521_sqlmap对状态码404处理的bug
- jvm 性能_JVM性能魔术
- 弱口令扫描工具mysql ftp_基于端口的弱口令检测工具--iscan
- 【BZOJ4653】[Noi2016]区间 双指针法+线段树
- 离人愁有用计算机怎么写歌词,离人愁歌词是什么意思 今两股痒痒什么意思
- Android 编辑中的快捷键
- 【CCCC】L2-025 分而治之 (25分),图的度数,使节点独立的方案
- c语言综合性程序设计,《C语言程序设计》综合性实验报告撰写格式
- matlab 流星雨,dijkstra算法及其matlab实现
- Python continue 语句
- Java从零开始学十五(继承)
- 关于HyperLink的NavigateUrl属性的链接地址带参数出错的问题【整理】
- 话单分析账单分析行踪分析综合数据研判软件
- 研究生生存指南之论文
- 使用Python绘制词云图(自定义形状)
- 计算机网络课后习题概略
- Jrebel JetBrains License Server! 免费 Jrebel 激活服务器(自建)
- Android 12.0 锁屏页面禁止下拉状态栏
- Django 快速搭建博客 第十一节(文章阅读量统计,自动生成文章摘要)
- java se 14 虚拟机规范
热门文章
- Activiti之 Exclusive Gateway
- ARM公布“物联网”嵌入式mbed OS系统软件平台
- 效能改进之项目例会导入实践
- HTML5/CSS3实现图片倒影效果
- 用Jmeter进行接口测试及乱码问题
- lambda Kappa iota比较
- 1.11. java 脚本引擎
- [JBoss] - 环境搭建
- Oracle Compile 编译 无效对象(ORA-04063: package body SYS.DBMS_XPLAN 有错误)
- 遥远的,理想与现实的完美统一——听完华大基因的宣讲,有点小激动···