该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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求助贴】使用后台服务的音乐播放器...相关推荐

  1. Android 音乐播放器的开发教程(六)service的运用及音乐列表点击播放 ----- 小达

    service的运用及音乐列表点击播放 按照前几篇博客的步骤,应该能看到自己手机里的音乐列表了,但是现在还只能看,不能点,还需要再给ListView添加点击事件的监听,接着启动一个Service来播放 ...

  2. 开发版速达 移动App后台服务部署指南

    客户要使用移动App端进行单据录入和审批:资料和报表查看,则必须在速达服务器上部署一个后台服务应用,以便于数据与App进行交互,目前系统提供了2种部署方式:. 一.通过开发版服务端应用程序一键部署: ...

  3. java定义语法解析器,java开发工具intellij idea使用教程:定义语法和解析器.pdf

    java开发工具intellij idea使用教程:定义语法和解析器.pdf 还剩 3页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 慧都 科技 -- ...

  4. 微信公众服务号接口接入,实现开发回复功能,而非后台设置

    参考文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 接入概述 接入微信公众平台开发,开发者需要按照 ...

  5. 【车载开发系列】UDS诊断---链接控制服务($0x87)

    [车载开发系列]UDS诊断-链接控制服务($0x87) 诊断---链接控制服务($0x87) [车载开发系列]UDS诊断---链接控制服务($0x87) 一.概念定义 二.应用场景 三.报文格式 1) ...

  6. Flask从0到1快速后台服务开发

    Flask从0到1快速后台服务开发 版本说明: Python:3.7 Flask:1.0.2 前言 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Wer ...

  7. Notification使用详解之四:由后台服务向Activity发送进度信息

    上次讲到了如何在Activity中监听后台服务的进度信息,实现的方式是让Activity与后台服务绑定,通过中间对象Binder的实例操作后台服务.从效果上来讲,这种方式是可行的,不过这种实现有个缺点 ...

  8. 基于腾讯云服务器部署微信小程序后台服务(Python+Django)

    一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近Native App性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服 ...

  9. android服务绑定音乐播放器,Android基于Service的音乐播放器

    本文开发一个基于Service的音乐播放器,音乐由后台运行的Service负责播放,当后台的播放状态发生变化时,程序将会通过发送广播通知前台Activity更新界面:当点击Activity的界面按钮时 ...

最新文章

  1. selenium 状态码521_sqlmap对状态码404处理的bug
  2. jvm 性能_JVM性能魔术
  3. 弱口令扫描工具mysql ftp_基于端口的弱口令检测工具--iscan
  4. 【BZOJ4653】[Noi2016]区间 双指针法+线段树
  5. 离人愁有用计算机怎么写歌词,离人愁歌词是什么意思 今两股痒痒什么意思
  6. Android 编辑中的快捷键
  7. 【CCCC】L2-025 分而治之 (25分),图的度数,使节点独立的方案
  8. c语言综合性程序设计,《C语言程序设计》综合性实验报告撰写格式
  9. matlab 流星雨,dijkstra算法及其matlab实现
  10. Python continue 语句
  11. Java从零开始学十五(继承)
  12. 关于HyperLink的NavigateUrl属性的链接地址带参数出错的问题【整理】
  13. 话单分析账单分析行踪分析综合数据研判软件
  14. 研究生生存指南之论文
  15. 使用Python绘制词云图(自定义形状)
  16. 计算机网络课后习题概略
  17. Jrebel JetBrains License Server! 免费 Jrebel 激活服务器(自建)
  18. Android 12.0 锁屏页面禁止下拉状态栏
  19. Django 快速搭建博客 第十一节(文章阅读量统计,自动生成文章摘要)
  20. java se 14 虚拟机规范

热门文章

  1. Activiti之 Exclusive Gateway
  2. ARM公布“物联网”嵌入式mbed OS系统软件平台
  3. 效能改进之项目例会导入实践
  4. HTML5/CSS3实现图片倒影效果
  5. 用Jmeter进行接口测试及乱码问题
  6. lambda Kappa iota比较
  7. 1.11. java 脚本引擎
  8. [JBoss] - 环境搭建
  9. Oracle Compile 编译 无效对象(ORA-04063: package body SYS.DBMS_XPLAN 有错误)
  10. 遥远的,理想与现实的完美统一——听完华大基因的宣讲,有点小激动···