• 简单带进度条的音乐播放器


      1 import java.text.SimpleDateFormat;
      2 import java.util.Date;
      3 import android.app.Activity;
      4 import android.app.LoaderManager.LoaderCallbacks;
      5 import android.content.BroadcastReceiver;
      6 import android.content.Context;
      7 import android.content.CursorLoader;
      8 import android.content.Intent;
      9 import android.content.IntentFilter;
     10 import android.content.Loader;
     11 import android.database.Cursor;
     12 import android.net.Uri;
     13 import android.os.Bundle;
     14 import android.provider.MediaStore;
     15 import android.support.v4.content.LocalBroadcastManager;
     16 import android.util.Log;
     17 import android.view.View;
     18 import android.widget.AdapterView;
     19 import android.widget.AdapterView.OnItemClickListener;
     20 import android.widget.Button;
     21 import android.widget.ListView;
     22 import android.widget.SeekBar;
     23 import android.widget.SimpleCursorAdapter;
     24 import android.widget.TextView;
     25 
     26 public class MainActivity extends Activity {
     27 
     28     private Button stopBtn, playBtn;
     29     private boolean isPlaying=false;
     30     
     31     private Intent playerIntent; //播放服务组件的意图对象
     32     
     33     private SeekBar seekBar; //可拖动的进度控件,用于显示播放的进度
     34     
     35     private PrgReceiver prgReceiver;
     36     
     37     private LocalBroadcastManager lbMgr;
     38     
     39     private TextView msgTv; //格式化显示当前播放的时间与总时间
     40     
     41     private Uri mp3Uri=MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; //获取扩展卡下的所有的音频文件接口
     42     private String[] columns={MediaStore.Audio.Media._ID,
     43                                     MediaStore.Audio.Media.DISPLAY_NAME, //文件名
     44                                     MediaStore.Audio.Media.DATA,//文件路径
     45                                     MediaStore.Audio.Media.DURATION};  //总时长
     46     private ListView listView;
     47     private SimpleCursorAdapter adapter;
     48     
     49     @Override
     50     protected void onCreate(Bundle savedInstanceState) {
     51         super.onCreate(savedInstanceState);
     52         setContentView(R.layout.activity_main);
     53 
     54         playBtn = (Button) findViewById(R.id.btn1Id);
     55         stopBtn = (Button) findViewById(R.id.btn2Id);
     56         
     57         seekBar=(SeekBar) findViewById(R.id.seekBarId);
     58         msgTv=(TextView) findViewById(R.id.msgId);
     59         
     60         playerIntent=new Intent(getApplicationContext(),PlayerService.class);
     61         
     62         lbMgr=LocalBroadcastManager.getInstance(getApplicationContext());
     63         
     64         prgReceiver=new PrgReceiver();
     65         lbMgr.registerReceiver(prgReceiver, new IntentFilter(Config.ACTION_PROGRESS));
     66         
     67         event();
     68         
     69         initMp3List(); //初始显示mp3列表相关的控件
     70     }
     71 
     72     
     73     private SimpleDateFormat sdf=new SimpleDateFormat("mm:ss");
     74     private void initMp3List() {
     75         // TODO Auto-generated method stub
     76         listView=(ListView) findViewById(R.id.listViewId);
     77         adapter=new SimpleCursorAdapter(getApplicationContext()
     78                 ,R.layout.item_audio,null,
     79                 new String[]{columns[1],columns[3],columns[2]},
     80                 new int[]{R.id.nameId,R.id.timeId,R.id.pathId},
     81                 SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER){
     82             
     83             @Override
     84             public void setViewText(TextView v, String text) {//设置文本控件内容的方法
     85                 super.setViewText(v, text);
     86                 
     87                 Log.i("info", "text:"+text);
     88                 if(v.getId()==R.id.timeId){
     89                     long time=Long.parseLong(text);
     90                     v.setText(sdf.format(new Date(time)));
     91                 }
     92             }
     93         };
     94         
     95         
     96         
     97         listView.setAdapter(adapter);
     98         
     99         //初始化启动Loader,加载扩展卡下所有音频文件
    100         getLoaderManager().initLoader(1, null, new LoaderCallbacks<Cursor>() {
    101             
    102             @Override
    103             public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    104         
    105                 return new CursorLoader(getApplicationContext(),mp3Uri,columns,null,null,null);
    106             }
    107             
    108             @Override
    109             public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    110                 adapter.swapCursor(data);//适配器切换数据源
    111             }
    112             
    113             @Override
    114             public void onLoaderReset(Loader<Cursor> loader) {
    115                 // TODO Auto-generated method stub
    116             
    117             }
    118         });
    119         
    120         //设置ListView中item的点击事件
    121         listView.setOnItemClickListener(new OnItemClickListener() {
    122             @Override
    123             public void onItemClick(AdapterView<?> parent, View view,
    124                     int position, long id) {
    125                 // TODO 点击某一文件的item事件,获取文件名和文件的路径
    126                 Cursor cursor=adapter.getCursor();
    127                 cursor.moveToPosition(position);
    128                 
    129                 String name=cursor.getString(1);//获取第2列的信息,即文件名
    130                 String path=cursor.getString(2);//获取第3列的信息,即文件路径
    131                 
    132                 Log.i("info", name+","+path);
    133                 
    134                 playerIntent.putExtra(Config.EXTRA_CHANGE, true);
    135                 playerIntent.putExtra(Config.EXTRA_PATH, path);
    136                 
    137                 startService(playerIntent);
    138                 
    139                 playBtn.setText("暂停");
    140                 
    141             }
    142         });
    143         
    144     }
    145 
    146     private void event() {
    147         // TODO Auto-generated method stub
    148         seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    149             
    150             @Override
    151             public void onStopTrackingTouch(SeekBar seekBar) {
    152                 // TODO 拖动结束时的方法
    153                 //获取当前拖动的位置
    154                 int seekPosition=seekBar.getProgress();
    155                 
    156                 //向播放组件组件发送广播
    157                 Intent intent=new Intent(Config.ACTION_SEEKTO);
    158                 intent.putExtra(Config.EXTRA_PROGREES_CUR, seekPosition);
    159                 
    160                 lbMgr.sendBroadcast(intent);//发送广播(在Service组件内接收)
    161             }
    162             
    163             @Override
    164             public void onStartTrackingTouch(SeekBar seekBar) {
    165                 // TODO Auto-generated method stub
    166                 
    167             }
    168             
    169             @Override
    170             public void onProgressChanged(SeekBar seekBar, int progress,
    171                     boolean fromUser) {
    172                 // TODO Auto-generated method stub
    173                 
    174             }
    175         });
    176     }
    177 
    178     public void play(View v) { //播放或暂停
    179         
    180         playerIntent.putExtra(Config.EXTRA_CHANGE, false);
    181         startService(playerIntent);
    182         
    183         isPlaying=!isPlaying;
    184         
    185         if(isPlaying){
    186             playBtn.setText("暂停");
    187         }else{
    188             playBtn.setText("播放");
    189         }
    190     }
    191 
    192     public void stop(View v) { //停止
    193         stopService(playerIntent);
    194         seekBar.setProgress(0);
    195         msgTv.setText("00:00/00:00");//=------------------------
    196         
    197         playBtn.setText("播放");
    198         
    199     }
    200 
    201     @Override
    202     protected void onDestroy() {
    203         super.onDestroy();
    204         
    205         lbMgr.unregisterReceiver(prgReceiver);//取消注册本地广播接收器
    206     }
    207     
    208     private String formatTime(int s){
    209         StringBuilder builder=new StringBuilder();
    210         
    211         int m=s/60; //获取分钟
    212         s=s%60; //获取秒数
    213         
    214         builder.append(m/10).append(m%10)
    215                .append(":")
    216                .append(s/10).append(s%10);
    217         
    218         return builder.toString();
    219     }
    220     
    221     class PrgReceiver extends BroadcastReceiver{
    222         @Override
    223         public void onReceive(Context context, Intent intent) {
    224             // TODO 接收播放服务组件中发送的进度广播
    225             int max=intent.getIntExtra(Config.EXTRA_PROGREES_MAX,0);
    226             int cur=intent.getIntExtra(Config.EXTRA_PROGREES_CUR,0);
    227             
    228             seekBar.setMax(max);
    229             seekBar.setProgress(cur);
    230             
    231             msgTv.setText(formatTime(cur/1000)+"/"+formatTime(max/1000));
    232         }
    233     }
    234     
    235 }
    MainActivity.java
      1 import java.text.SimpleDateFormat;
      2 import java.util.Date;
      3 import android.app.Activity;
      4 import android.app.LoaderManager.LoaderCallbacks;
      5 import android.content.BroadcastReceiver;
      6 import android.content.Context;
      7 import android.content.CursorLoader;
      8 import android.content.Intent;
      9 import android.content.IntentFilter;
     10 import android.content.Loader;
     11 import android.database.Cursor;
     12 import android.net.Uri;
     13 import android.os.Bundle;
     14 import android.provider.MediaStore;
     15 import android.support.v4.content.LocalBroadcastManager;
     16 import android.util.Log;
     17 import android.view.View;
     18 import android.widget.AdapterView;
     19 import android.widget.AdapterView.OnItemClickListener;
     20 import android.widget.Button;
     21 import android.widget.ListView;
     22 import android.widget.SeekBar;
     23 import android.widget.SimpleCursorAdapter;
     24 import android.widget.TextView;
     25 
     26 public class MainActivity extends Activity {
     27 
     28     private Button stopBtn, playBtn;
     29     private boolean isPlaying=false;
     30     
     31     private Intent playerIntent; //播放服务组件的意图对象
     32     
     33     private SeekBar seekBar; //可拖动的进度控件,用于显示播放的进度
     34     
     35     private PrgReceiver prgReceiver;
     36     
     37     private LocalBroadcastManager lbMgr;
     38     
     39     private TextView msgTv; //格式化显示当前播放的时间与总时间
     40     
     41     private Uri mp3Uri=MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; //获取扩展卡下的所有的音频文件接口
     42     private String[] columns={MediaStore.Audio.Media._ID,
     43                                     MediaStore.Audio.Media.DISPLAY_NAME, //文件名
     44                                     MediaStore.Audio.Media.DATA,//文件路径
     45                                     MediaStore.Audio.Media.DURATION};  //总时长
     46     private ListView listView;
     47     private SimpleCursorAdapter adapter;
     48     
     49     @Override
     50     protected void onCreate(Bundle savedInstanceState) {
     51         super.onCreate(savedInstanceState);
     52         setContentView(R.layout.activity_main);
     53 
     54         playBtn = (Button) findViewById(R.id.btn1Id);
     55         stopBtn = (Button) findViewById(R.id.btn2Id);
     56         
     57         seekBar=(SeekBar) findViewById(R.id.seekBarId);
     58         msgTv=(TextView) findViewById(R.id.msgId);
     59         
     60         playerIntent=new Intent(getApplicationContext(),PlayerService.class);
     61         
     62         lbMgr=LocalBroadcastManager.getInstance(getApplicationContext());
     63         
     64         prgReceiver=new PrgReceiver();
     65         lbMgr.registerReceiver(prgReceiver, new IntentFilter(Config.ACTION_PROGRESS));
     66         
     67         event();
     68         
     69         initMp3List(); //初始显示mp3列表相关的控件
     70     }
     71 
     72     
     73     private SimpleDateFormat sdf=new SimpleDateFormat("mm:ss");
     74     private void initMp3List() {
     75         // TODO Auto-generated method stub
     76         listView=(ListView) findViewById(R.id.listViewId);
     77         adapter=new SimpleCursorAdapter(getApplicationContext()
     78                 ,R.layout.item_audio,null,
     79                 new String[]{columns[1],columns[3],columns[2]},
     80                 new int[]{R.id.nameId,R.id.timeId,R.id.pathId},
     81                 SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER){
     82             
     83             @Override
     84             public void setViewText(TextView v, String text) {//设置文本控件内容的方法
     85                 super.setViewText(v, text);
     86                 
     87                 Log.i("info", "text:"+text);
     88                 if(v.getId()==R.id.timeId){
     89                     long time=Long.parseLong(text);
     90                     v.setText(sdf.format(new Date(time)));
     91                 }
     92             }
     93         };
     94         
     95         
     96         
     97         listView.setAdapter(adapter);
     98         
     99         //初始化启动Loader,加载扩展卡下所有音频文件
    100         getLoaderManager().initLoader(1, null, new LoaderCallbacks<Cursor>() {
    101             
    102             @Override
    103             public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    104         
    105                 return new CursorLoader(getApplicationContext(),mp3Uri,columns,null,null,null);
    106             }
    107             
    108             @Override
    109             public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    110                 adapter.swapCursor(data);//适配器切换数据源
    111             }
    112             
    113             @Override
    114             public void onLoaderReset(Loader<Cursor> loader) {
    115                 // TODO Auto-generated method stub
    116             
    117             }
    118         });
    119         
    120         //设置ListView中item的点击事件
    121         listView.setOnItemClickListener(new OnItemClickListener() {
    122             @Override
    123             public void onItemClick(AdapterView<?> parent, View view,
    124                     int position, long id) {
    125                 // TODO 点击某一文件的item事件,获取文件名和文件的路径
    126                 Cursor cursor=adapter.getCursor();
    127                 cursor.moveToPosition(position);
    128                 
    129                 String name=cursor.getString(1);//获取第2列的信息,即文件名
    130                 String path=cursor.getString(2);//获取第3列的信息,即文件路径
    131                 
    132                 Log.i("info", name+","+path);
    133                 
    134                 playerIntent.putExtra(Config.EXTRA_CHANGE, true);
    135                 playerIntent.putExtra(Config.EXTRA_PATH, path);
    136                 
    137                 startService(playerIntent);
    138                 
    139                 playBtn.setText("暂停");
    140                 
    141             }
    142         });
    143         
    144     }
    145 
    146     private void event() {
    147         // TODO Auto-generated method stub
    148         seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    149             
    150             @Override
    151             public void onStopTrackingTouch(SeekBar seekBar) {
    152                 // TODO 拖动结束时的方法
    153                 //获取当前拖动的位置
    154                 int seekPosition=seekBar.getProgress();
    155                 
    156                 //向播放组件组件发送广播
    157                 Intent intent=new Intent(Config.ACTION_SEEKTO);
    158                 intent.putExtra(Config.EXTRA_PROGREES_CUR, seekPosition);
    159                 
    160                 lbMgr.sendBroadcast(intent);//发送广播(在Service组件内接收)
    161             }
    162             
    163             @Override
    164             public void onStartTrackingTouch(SeekBar seekBar) {
    165                 // TODO Auto-generated method stub
    166                 
    167             }
    168             
    169             @Override
    170             public void onProgressChanged(SeekBar seekBar, int progress,
    171                     boolean fromUser) {
    172                 // TODO Auto-generated method stub
    173                 
    174             }
    175         });
    176     }
    177 
    178     public void play(View v) { //播放或暂停
    179         
    180         playerIntent.putExtra(Config.EXTRA_CHANGE, false);
    181         startService(playerIntent);
    182         
    183         isPlaying=!isPlaying;
    184         
    185         if(isPlaying){
    186             playBtn.setText("暂停");
    187         }else{
    188             playBtn.setText("播放");
    189         }
    190     }
    191 
    192     public void stop(View v) { //停止
    193         stopService(playerIntent);
    194         seekBar.setProgress(0);
    195         msgTv.setText("00:00/00:00");//=------------------------
    196         
    197         playBtn.setText("播放");
    198         
    199     }
    200 
    201     @Override
    202     protected void onDestroy() {
    203         super.onDestroy();
    204         
    205         lbMgr.unregisterReceiver(prgReceiver);//取消注册本地广播接收器
    206     }
    207     
    208     private String formatTime(int s){
    209         StringBuilder builder=new StringBuilder();
    210         
    211         int m=s/60; //获取分钟
    212         s=s%60; //获取秒数
    213         
    214         builder.append(m/10).append(m%10)
    215                .append(":")
    216                .append(s/10).append(s%10);
    217         
    218         return builder.toString();
    219     }
    220     
    221     class PrgReceiver extends BroadcastReceiver{
    222         @Override
    223         public void onReceive(Context context, Intent intent) {
    224             // TODO 接收播放服务组件中发送的进度广播
    225             int max=intent.getIntExtra(Config.EXTRA_PROGREES_MAX,0);
    226             int cur=intent.getIntExtra(Config.EXTRA_PROGREES_CUR,0);
    227             
    228             seekBar.setMax(max);
    229             seekBar.setProgress(cur);
    230             
    231             msgTv.setText(formatTime(cur/1000)+"/"+formatTime(max/1000));
    232         }
    233     }
    234     
    235 }
    PlayerService.java
  • 相关阅读:
    SVN如何新建用户并分配权限
    Android性能测试工具Emmagee介绍
    Jquery 中的$(this) 和javascript中的this
    Django 的开始之路
    Python 100道题深入理解
    怎么使用jquery判断一个元素是否含有一个指定的类(class)
    windows下面安装Python和pip
    Waves:类Material Design 的圆形波浪(涟漪)点击特效插件
    Python 基础语法(三)
    Python 基础语法(四)
  • 原文地址:https://www.cnblogs.com/bimingcong/p/4822186.html
Copyright © 2020-2023  润新知