| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- package com.usoftchina.pay;
- import android.app.Service;
- import android.content.BroadcastReceiver;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.ServiceConnection;
- import android.media.MediaPlayer;
- import android.media.MediaPlayer.OnCompletionListener;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.IBinder;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.Toolbar;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.SeekBar;
- import android.widget.SeekBar.OnSeekBarChangeListener;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.common.LogUtil;
- import com.core.utils.StatusBarUtil;
- import com.lg.lrcview_master.DefaultLrcParser;
- import com.lg.lrcview_master.LrcRow;
- import com.lg.lrcview_master.LrcView.OnLrcClickListener;
- import com.lg.lrcview_master.LrcView.OnSeekToListener;
- import com.usoftchina.music.MusicService;
- import com.usoftchina.music.R;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.util.List;
- public class MainMusicActivity extends AppCompatActivity {
- private MediaPlayer mPlayer;
- private SeekBar mPlayerSeekBar;
- private SeekBar mLrcSeekBar;
- private Button mPlayBtn;
- private com.lg.lrcview_master.LrcView mLrcView;
- private TextView tv_timeStart;
- private TextView tv_timeTotal;
- PhoneBroadcastReceiver phoneBroadcastReceiver;
- private Toast mPlayerToast;
- private Toast mLrcToast;
- private Toolbar toolbar;
- private MusicService musicService;
- private static final String TAG = "MainMusicActivity";
- // 在Activity中调用 bindService 保持与 Service 的通信
- private void bindServiceConnection() {
- LogUtil.d(TAG,"bindServiceConnection()");
- Intent intent = new Intent(MainMusicActivity.this, MusicService.class);
- // startService(intent);
- bindService(intent, serviceConnection, this.BIND_AUTO_CREATE);
- }
-
- // 回调onServiceConnected 函数,通过IBinder 获取 Service对象,实现Activity与 Service的绑定
- private ServiceConnection serviceConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- LogUtil.d(TAG,"onServiceConnected()");
- musicService = ((MusicService.MyBinder) (service)).getService();
- LogUtil.d(TAG,"musicService"+musicService.mediaPlayer);
- musicService.mediaPlayer.setOnCompletionListener(onCompletionListener);
- if (!musicService.mediaPlayer.isPlaying()){
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + 0*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
- LogUtil.d("MusicApp","scalingFactor:"+scalingFactor+"");
- mLrcView.setLrcScalingFactor(scalingFactor);
- musicService.playOrPause();
- mLrcView.setLrcRows(getLrcRows());
- handler.sendEmptyMessage(0);
- mPlayBtn.setText("暂停");
- mPlayBtn.setSelected(true);
- }
- },1000);
- }
- //musicTotal.setText(time.format(musicService.mediaPlayer.getDuration()));
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {
- musicService = null;
- }
- };
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- LogUtil.d(TAG,"OnCreate()");
- setContentView(R.layout.activity_main_music);
- initViews();
- initPlayer();
-
- phoneBroadcastReceiver=new PhoneBroadcastReceiver();
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
- filter.addAction("android.intent.action.PHONE_STATE");
- registerReceiver(phoneBroadcastReceiver, filter);
- toolbar=findViewById(R.id.commonToolBar);
- StatusBarUtil.immersive(this, 0x00000000, 0.0f);
- setSupportActionBar(toolbar);
- getSupportActionBar().setDisplayShowTitleEnabled(false);
- StatusBarUtil.setPaddingSmart(this, toolbar);
- toolbar.setNavigationIcon(R.drawable.back_black);
- toolbar.setNavigationOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- // onBackPressed();
- moveTaskToBack(true);
- }
- });
- }
- @Override
- protected void onResume() {
- super.onResume();
- Log.d(TAG,"musicService:"+musicService);
- if (musicService!=null){
- Log.d(TAG,"musicService mediaPlayer:"+musicService.mediaPlayer);
- }
- }
- private void initViews() {
- mLrcView = (com.lg.lrcview_master.LrcView) findViewById(R.id.lrcView);
- mLrcView.setOnSeekToListener(onSeekToListener);
- mLrcView.setOnLrcClickListener(onLrcClickListener);
- tv_timeStart = findViewById(R.id.tv_timeStart);
- tv_timeTotal=findViewById(R.id.tv_timeTotal);
- mPlayerSeekBar = (SeekBar) findViewById(R.id.include_player_seekbar);
- mLrcSeekBar = (SeekBar) findViewById(R.id.include_lrc_seekbar);
- mLrcSeekBar.setMax(100);
- //为seekbar设置当前的progress
- mLrcSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
- mPlayBtn = (Button) findViewById(R.id.btnPlay);
- mPlayerSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
- mPlayBtn.setOnClickListener(onClickListener);
- //getCommonToolBar().setBackgroundResource(R.color.transparent);
-
- }
-
- private void initPlayer() {
- // mPlayer = MediaPlayer.create(this, R.raw.yingtang);
- // mPlayer.setOnCompletionListener(onCompletionListener);
- bindServiceConnection();
- }
- OnCompletionListener onCompletionListener = new OnCompletionListener() {
-
- @Override
- public void onCompletion(MediaPlayer mp) {
- mPlayBtn.setText("play");
- //mPlayBtn.setSelected(false);
- mLrcView.reset();
- handler.removeMessages(0);
- mPlayerSeekBar.setProgress(0);
- musicService.mediaPlayer.start();
- mLrcView.setLrcRows(getLrcRows());
- handler.sendEmptyMessage(0);
- mPlayBtn.setText("暂停");
- mPlayBtn.setSelected(true);
- }
- };
-
- OnLrcClickListener onLrcClickListener = new OnLrcClickListener() {
- @Override
- public void onClick() {
- //Toast.makeText(getApplicationContext(), "歌词被点击啦", Toast.LENGTH_SHORT).show();
- }
- };
- OnSeekToListener onSeekToListener = new OnSeekToListener() {
- @Override
- public void onSeekTo(int progress) {
- musicService.mediaPlayer.seekTo(progress);
-
- }
- };
- Handler handler = new Handler(){
- public void handleMessage(android.os.Message msg) {
- mPlayerSeekBar.setMax(musicService.mediaPlayer.getDuration());
- mPlayerSeekBar.setProgress(musicService.mediaPlayer.getCurrentPosition());
- handler.sendEmptyMessageDelayed(0, 100);
- };
- };
- OnClickListener onClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- if(v == mPlayBtn){
- if("play".equals(mPlayBtn.getText())){
- musicService.playOrPause();
- mLrcView.setLrcRows(getLrcRows());
- handler.sendEmptyMessage(0);
- mPlayBtn.setText("暂停");
- mPlayBtn.setSelected(true);
- }else{
- if(musicService.mediaPlayer.isPlaying()){
- musicService.playOrPause();
- mPlayBtn.setText("播放");
- mPlayBtn.setSelected(false);
- }else{
- mPlayBtn.setSelected(true);
- musicService.playOrPause();
- mPlayBtn.setText("暂停");
- }
- }
- }
- }
- };
- OnSeekBarChangeListener onSeekBarChangeListener = new OnSeekBarChangeListener() {
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- if(seekBar == mPlayerSeekBar){
- musicService.mediaPlayer.seekTo(seekBar.getProgress());
- handler.sendEmptyMessageDelayed(0, 100);
- }
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- if(seekBar == mPlayerSeekBar){
- handler.removeMessages(0);
- }
- }
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromUser) {
- try {
- if(seekBar == mPlayerSeekBar){
- mLrcView.seekTo(progress, true,fromUser);
- // Log.d("timeStr",mLrcView.getmLrcRows().get(0).getTime()+"");
- Log.d("timeStrA",progress+"");
- tv_timeStart.setText(formatTimeFromProgress(progress));
- tv_timeTotal.setText(formatTimeFromProgress(musicService.mediaPlayer.getDuration()));
- if(fromUser){
-
- showPlayerToast(formatTimeFromProgress(progress));
- }
- }else if(seekBar == mLrcSeekBar){
- float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + progress*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
- mLrcView.setLrcScalingFactor(scalingFactor);
- showLrcToast((int)(scalingFactor*100)+"%");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- };
- /**
- * 将播放进度的毫米数转换成时间格式
- * 如 3000 --> 00:03
- * @param progress
- * @return
- */
- private String formatTimeFromProgress(int progress){
- //总的秒数
- int msecTotal = progress/1000;
- int min = msecTotal/60;
- int msec = msecTotal%60;
- String minStr = min < 10 ? "0"+min:""+min;
- String msecStr = msec < 10 ? "0"+msec:""+msec;
- return minStr+":"+msecStr;
- }
- /**
- * 获取歌词List集合
- * @return
- */
- private List<LrcRow> getLrcRows(){
- List<LrcRow> rows = null;
- InputStream is = getResources().openRawResource(R.raw.yingtanglrc);
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String line ;
- StringBuffer sb = new StringBuffer();
- try {
- while((line = br.readLine()) != null){
- sb.append(line+"\n");
- }
- System.out.println(sb.toString());
- rows = DefaultLrcParser.getIstance().getLrcRows(sb.toString());
- } catch (IOException e) {
- e.printStackTrace();
- }
- return rows;
- }
- private TextView mPlayerToastTv;
- private void showPlayerToast(String text){
- if(mPlayerToast == null){
- mPlayerToast = new Toast(this);
- mPlayerToastTv = (TextView) LayoutInflater.from(this).inflate(R.layout.toast, null);
- mPlayerToast.setView(mPlayerToastTv);
- mPlayerToast.setDuration(Toast.LENGTH_SHORT);
- }
- mPlayerToastTv.setText(text);
- mPlayerToast.show();
- }
- private TextView mLrcToastTv;
- private void showLrcToast(String text){
- if(mLrcToast == null){
- mLrcToast = new Toast(this);
- mLrcToastTv = (TextView) LayoutInflater.from(this).inflate(R.layout.toast, null);
- mLrcToast.setView(mLrcToastTv);
- mLrcToast.setDuration(Toast.LENGTH_SHORT);
- }
- mLrcToastTv.setText(text);
- mLrcToast.show();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- handler.removeMessages(0);
- musicService.mediaPlayer.stop();
- musicService.mediaPlayer.release();
- musicService.mediaPlayer = null;
- mLrcView.reset();
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- moveTaskToBack(true);
- return false;
- }
- return super.onKeyDown(keyCode, event);
- }
- class PhoneBroadcastReceiver extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- // 如果是拨打电话
- if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
- musicService.playOrPause();
- //拨打电话会优先,收到此广播. 再收到 android.intent.action.PHONE_STATE 的 TelephonyManager.CALL_STATE_OFFHOOK 状态广播;();
- } else {
-
- // 如果是来电
- TelephonyManager tManager = (TelephonyManager) context
- .getSystemService(Service.TELEPHONY_SERVICE);
- //电话的状态
- switch (tManager.getCallState()) {
- case TelephonyManager.CALL_STATE_RINGING:
- //等待接听状态
- musicService.playOrPause();
- break;
- case TelephonyManager.CALL_STATE_OFFHOOK:
- //接听状态
-
- break;
- case TelephonyManager.CALL_STATE_IDLE:
- //挂断状态
- musicService.playOrPause();
- break;
- }
- }
- }
- }
- }
|