当前位置:操作系统 > 安卓/Android >>

android-简单音乐播放器的总结

[java] 

业务:android的程序,实现播放音乐的功能。

知识点:

1.使用了android的四大组件中的三个(Activity,Service,Broadcast)

activity与serivice之间的通信用广播Broadcast组件实现,程序中有10多个广播的发布和接收。

2.还使用了线程和Application类来保存全局性的数据。

在Service中启动一个线程是为了在activity需要的时候,不间断地给activity发布更新进度的广播,activity收到后再界面上展示出来。

难点:

个人感觉广播虽然多,但是逻辑上一般,不是很复杂,稍微比较难理解的是线程的启动和停止条件的判段和service中Destroy方法中的收尾清理工作。

1.在这几种条件下需要唤醒线程。

1)play()方法中,当开始播放音乐的时候,让它就开始干活。

2)seekto()方法中,当拖动seekBar需要重新定位并且播放音乐的时候,让它就开始干活。

3)当activity发布广播,请求service发布一个更新进度的广播的时候需要唤醒线程,让它就开始干活。

4)Service方法要退出销毁的时候需要唤醒线程,让其退出循环。

完整项目代码:

 

 


部分代码:

主Activity的全部代码


[java] package com.tarena.day1901; 
 
 
import com.tarena.entity.Music; 
import com.tarena.utils.Consts; 
import com.tarena.utils.FormatUtils; 
 
import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 
import android.widget.TextView; 
 
public class MainActivity extends Activity { 
     
    private ListView lvMusics; 
    private MenuInflater inflater; 
    private MusicAdapter adapter; 
    private Button btnPlayOrPause; 
    private MusicApplication app; 
    private TextView tvMusicName; 
    private TextView tvDuration; 
    private InnerBroadcastReceiver receiver; 
    private SeekBar sbProgress; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        inflater=getMenuInflater();  
        app=(MusicApplication)getApplication(); 
        //设置界面  
        setupView(); 
        addlistener(); 
        //启动service  
        Intent intent=new Intent(this, MusicService.class); 
        startService(intent); 
        //创建一个广播接收器  
        createReceiver(); 
    } 
     
 
    //activity启动,发送广播给service告知需要发送进度更新的广播  
    @Override 
    protected void onStart() { 
        super.onStart(); 
         
        Intent intent=new Intent(Consts.ACTION_NEED_UPDATE_PROGRESS); 
        intent.putExtra(Consts.EXTRA_NEED_UPDATE_PROGRESS, true); 
        sendBroadcast(intent); 
        Log.i("info", "onStart"); 
    } 
    @Override 
    protected void onResume() { 
        Log.i("info", "onREsume"); 
        super.onResume(); 
    } 
  //activity停止,发送广播给service告知可以停止发送进度更新的广播  
    @Override 
    protected void onStop() { 
        super.onStop(); 
        Intent intent=new Intent(Consts.ACTION_NEED_UPDATE_PROGRESS); 
        intent.putExtra(Consts.EXTRA_NEED_UPDATE_PROGRESS, false); 
        sendBroadcast(intent); 
    } 
    @Override 
    protected void onDestroy() { 
        super.onDestroy(); 
        unregisterReceiver(receiver);//MainActivity销毁的时候,对广播接收器,解除注册  
    } 
     
  
    //设置界面  
    public void setupView(){ 
        lvMusics=(ListView)findViewById(R.id.lvMusics); 
        adapter=new MusicAdapter(this); 
        lvMusics.setAdapter(adapter); 
         
        btnPlayOrPause=(Button)findViewById(R.id.btnPlayOrPause); 
        tvMusicName=(TextView)findViewById(R.id.tvMusicName); 
        tvDuration=(TextView)findViewById(R.id.tvDuration); 
        sbProgress=(SeekBar)findViewById(R.id.sbProgress); 
    } 
    //添加菜单  
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        inflater.inflate(R.menu.opts,menu); 
        return super.onCreateOptionsMenu(menu); 
    } 
    //选择系统菜单选项,发送广播  
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        Intent intent=null; 
        switch (item.getItemId()) { 
        case R.id.menu_sub_loop: 
            intent=new Intent(Consts.ACTION_PLAY_MODE); 
            intent.putExtra(Consts.EXTRA_PLAY_MODE, Consts.PLAY_MODE_LOOP); 
            sendBroadcast(intent

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,