Android之简易音乐播发器
来源:互联网 发布:蝴蝶标本价格淘宝 编辑:程序博客网 时间:2024/05/21 09:42
布局主要代码之ListView:
<span style="font-size:14px;"> <ListView android:id="@+id/music_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/handle_btnlayout" android:cacheColorHint="#00000000" /*设置为透明,防止滑动时背景变成白色*/ android:dividerHeight="1dip" android:divider="#88888888" /*设置分割线的颜色和透明度*/ android:listSelector="#00000000" android:layout_marginBottom="50dp" > </ListView></span>
Android之UI界面代码:
<span style="font-size:14px;">public class Music extends BaseActivity{ //BaseActivity继承Activity作为所有活动的父类public static final String ACTION_UPDATEUI = "action.updateUI";private ListView ls = null;private Button play_music = null;private Button previous_music =null;private Button next_music =null;private Button repeat_music = null;private Button shuffle_music =null;private TextView music_title = null;private TextView music_duration =null;public static List<Map<String, String>> list ;private Boolean start = false;private Boolean isrepeat = MusicService.repeat;UpdateUIBroadcastReceiver broadcastReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.home_activity_layout);play_music = (Button) findViewById(R.id.play_music);previous_music = (Button) findViewById(R.id.previous_music);next_music = (Button) findViewById(R.id.next_music);repeat_music = (Button) findViewById(R.id.repeat_music);shuffle_music = (Button) findViewById(R.id.shuffle_music);music_title = (TextView) findViewById(R.id.music_title);music_duration = (TextView) findViewById(R.id.music_duration);music_title.setText(MusicService.music_title);music_duration.setText(MusicService.music_time);play_music.setOnClickListener(new ButtonsetOnClickListener());previous_music.setOnClickListener(new ButtonsetOnClickListener());next_music.setOnClickListener(new ButtonsetOnClickListener());repeat_music.setOnClickListener(new ButtonsetOnClickListener());shuffle_music.setOnClickListener(new ButtonsetOnClickListener());if(MusicService.isplay){play_music.setBackgroundResource(R.drawable.pause_selector);}else{play_music.setBackgroundResource(R.drawable.play_selector);}if(isrepeat){repeat_music.setBackgroundResource(R.drawable.repeat_all_selector);}else{shuffle_music.setBackgroundResource(R.drawable.shuffle_selector);}//动态注册广播接收器IntentFilter filter = new IntentFilter();filter.addAction(ACTION_UPDATEUI);broadcastReceiver = new UpdateUIBroadcastReceiver();registerReceiver(broadcastReceiver, filter);ls = (ListView) findViewById(R.id.music_list);//接下来要将这些数据封装成ArrayAdapter对象SimpleAdapter adapter = this.getAdapter();ls.setAdapter(adapter);ls.setOnItemClickListener(new ItemClick()); //点击ls.setOnItemLongClickListener(null); //长按ls.setOnItemSelectedListener(null); //勾选}private class ButtonsetOnClickListener implements OnClickListener{Intent intent =new Intent(Music.this, MusicService.class); //记得注册ServiceBundle bundle = new Bundle();@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.play_music:if(start){play_music.setBackgroundResource(R.drawable.play_selector);bundle.putBoolean("start", false);start = false;}else{play_music.setBackgroundResource(R.drawable.pause_selector);bundle.putBoolean("start", true);start = true;}break;case R.id.previous_music:bundle.putBoolean("previous", true);break;case R.id.next_music:bundle.putBoolean("next", true);break;case R.id.repeat_music:bundle.putBoolean("repeat", true);repeat_music.setBackgroundResource(R.drawable.repeat_all_selector);shuffle_music.setBackgroundResource(R.drawable.shuffle_none_selector);break;case R.id.shuffle_music:bundle.putBoolean("shuffle", true);shuffle_music.setBackgroundResource(R.drawable.shuffle_selector);repeat_music.setBackgroundResource(R.drawable.repeat_none_selector);break;default:break;}intent.putExtras(bundle); //Intent传递参数Music.this.startService(intent); //启动服务}}//定义广播接收器(内部类)private class UpdateUIBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {music_title.setText(String.valueOf(intent.getExtras().getString("music_title")));music_duration.setText(String.valueOf(intent.getExtras().getString("music_time")));}}@SuppressLint("SimpleDateFormat")private SimpleAdapter getAdapter(){// 使用SimpleAdapter来封装数据时必需要把每个显示的数据封装成Maplist=new ArrayList<Map<String, String>>();SimpleDateFormat format = new SimpleDateFormat("mm:ss");//取得所有在外部存储卡上的音乐文件的信息 ps : MediaStore.Audio.Media.INTERNAL_CONTENT_URI 获得内置存储 Cursor cursor = Music.this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);cursor.moveToFirst();for(int i=0;i<cursor.getCount();i++){String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)); //歌曲的名称String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); //歌曲文件的路径int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)); //歌曲的总播放时长String hmsString = format.format(duration);Map<String, String>map =new HashMap<String, String>(); map.put("title", title); map.put("time", hmsString);map.put("url", url);list.add(map);cursor.moveToNext();}SimpleAdapter adapter =new SimpleAdapter(this, //上下文,显示对象list, // 要显示的数据,一定要上面的格式进行封装R.layout.music_list, // 列表中要显示的单项信息的布局new String[]{"title","time"}, // map中的keynew int[]{R.id.music_title_my,R.id.music_time_my}); // 显示到组件return adapter;}//点击事件private class ItemClick implements OnItemClickListener{@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {Intent intent =new Intent(Music.this, MusicService.class); //记得注册ActivityBundle bundle = new Bundle();bundle.putBoolean("playing", true);bundle.putInt("position", position);intent.putExtras(bundle); //Intent传递参数Music.this.startService(intent); //启动服务play_music.setBackgroundResource(R.drawable.pause_selector);}}}</span>
<span style="font-size:14px;">public class MusicService extends Service{public static String music_title ="";public static String music_time ="";private MediaPlayer mp ;private List<Map<String, String>> list = Music.list;private int position ;private boolean playing = false;private boolean start = true;private boolean previous = false;private boolean next =false;public static boolean repeat = true;private boolean shuffle = false;public static boolean isplay = false;Random random = new Random();@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate(){super.onCreate();/*final Intent intent = new Intent();intent.setAction(Music.ACTION_UPDATEUI);timer = new Timer();task = new TimerTask() {@Overridepublic void run() {intent.putExtra("count", ++count);sendBroadcast(intent);}};timer.schedule(task, 1000,1000);*/}@SuppressLint("NewApi")@Overridepublic int onStartCommand(Intent intent, int flags, int startId){start = intent.getBooleanExtra("start", true); //取不到值,默认falseplaying = intent.getBooleanExtra("playing", false);previous = intent.getBooleanExtra("previous", false);next = intent.getBooleanExtra("next", false);if(repeat){shuffle = intent.getBooleanExtra("shuffle", false);if(shuffle){repeat = false;}}else if(shuffle){repeat = intent.getBooleanExtra("repeat", false);if(repeat){shuffle = false;}}if(playing){position = intent.getIntExtra("position",1);Uri uri = Uri.parse(list.get(position).get("url"));playsong(uri);}else if(previous){previoussong();}else if(next){nextsong();}if(mp!=null){if(start){mp.start();isplay = true;}else{mp.pause(); //暂停播放isplay = false;}}return super.onStartCommand(intent, flags, startId);}private void playsong(Uri uri){if(mp!=null&&mp.isPlaying()){mp.stop(); //停止播放}mp = MediaPlayer.create(this, uri);mp.start();mp.setOnCompletionListener(new CompletionListener());music_title = list.get(position).get("title");music_time = list.get(position).get("time");//发送广播,改变界面Intent intent = new Intent();intent.setAction(Music.ACTION_UPDATEUI);Bundle bundle = new Bundle();bundle.putString("music_title",music_title) ;bundle.putString("music_time", music_time);intent.putExtras(bundle);sendBroadcast(intent);}//获取随机数private int randomInt(){int num = random.nextInt(list.size());if(num>=1&&num<=list.size()-1){return num;}else{return randomInt();}}private void previoussong(){if(repeat){position--;if(position<=1){position = list.size()-1;}}else{position = randomInt();}String urlstr = list.get(position).get("url");Uri uri = Uri.parse(urlstr);playsong(uri);}private void nextsong(){if(repeat){position++;if(position>=list.size()){position = 1;}}else{position = randomInt();}String urlstr = list.get(position).get("url");Uri uri = Uri.parse(urlstr);playsong(uri);}private class CompletionListener implements OnCompletionListener{@Overridepublic void onCompletion(MediaPlayer mp) {nextsong();}}@Overridepublic void onDestroy(){super.onDestroy();if(mp!=null) mp.release(); //释放资源stopSelf();//timer.cancel();}}</span>
0 0
- Android之简易音乐播发器
- 学习Android中音乐播发器
- Android 调用系统播发器播放音乐或视频
- 页面音乐和视频播发器代码
- android简易音乐播放器
- android之service音乐简易版播放器
- Android开发笔记之简易音乐播放器
- Android小项目之音乐播放器简易版
- 最简单、简易的android音乐播放器,android开发应用之(音乐播放)
- Qt学习之-简易音乐播放器
- Android的简易音乐播放器
- Android——简易音乐播放器
- Android简易的音乐播放器实现
- Android 简易的音乐播放器
- Android 简易的音乐播放器
- android 简易音乐播放器的实现
- Android简易音乐播放器实现代码
- Android简易音乐播放器之界面实现(第一篇)
- com.android.dex.DexIndexOverflowException: Cannot merge new index 66299 into a non-jumbo instruction
- SQL基础知识1
- 数据结构—图
- python 编码方式总结
- RGW中的请求的认证过程
- Android之简易音乐播发器
- 对图片进行压缩
- 用两个栈实现队列
- JPA学习笔记
- Ubuntu 14.04 安装wine QQ方法
- MFC编程入门(MFC消息映射机制概述)
- 【LabVIEW之小技巧】用LabVIEW设置系统时间
- 旋转数组的最小数字
- 结构体、函数指针