|
|
@@ -1,12 +1,22 @@
|
|
|
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;
|
|
|
@@ -16,11 +26,13 @@ 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;
|
|
|
@@ -31,41 +43,90 @@ import java.util.List;
|
|
|
|
|
|
public class MainMusicActivity extends AppCompatActivity {
|
|
|
private MediaPlayer mPlayer;
|
|
|
- /** 控制播放的SeekBar***/
|
|
|
-
|
|
|
private SeekBar mPlayerSeekBar;
|
|
|
- /**控制歌词字体大小的SeekBar***/
|
|
|
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();
|
|
|
+ onBackPressed();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
private void initViews() {
|
|
|
mLrcView = (com.lg.lrcview_master.LrcView) findViewById(R.id.lrcView);
|
|
|
mLrcView.setOnSeekToListener(onSeekToListener);
|
|
|
@@ -77,13 +138,6 @@ public class MainMusicActivity extends AppCompatActivity {
|
|
|
mLrcSeekBar.setMax(100);
|
|
|
//为seekbar设置当前的progress
|
|
|
mLrcSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
|
|
|
- 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;
|
|
|
- mLrcView.setLrcScalingFactor(scalingFactor);
|
|
|
- }
|
|
|
- },1000);
|
|
|
mPlayBtn = (Button) findViewById(R.id.btnPlay);
|
|
|
mPlayerSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
|
|
|
mPlayBtn.setOnClickListener(onClickListener);
|
|
|
@@ -91,27 +145,30 @@ public class MainMusicActivity extends AppCompatActivity {
|
|
|
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- protected void onResume() {
|
|
|
- super.onResume();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+
|
|
|
private void initPlayer() {
|
|
|
- mPlayer = MediaPlayer.create(this, R.raw.yingtang);
|
|
|
- mPlayer.setOnCompletionListener(onCompletionListener);
|
|
|
+// 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);
|
|
|
+ //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
|
|
|
@@ -123,14 +180,14 @@ public class MainMusicActivity extends AppCompatActivity {
|
|
|
|
|
|
@Override
|
|
|
public void onSeekTo(int progress) {
|
|
|
- mPlayer.seekTo(progress);
|
|
|
+ musicService.mediaPlayer.seekTo(progress);
|
|
|
|
|
|
}
|
|
|
};
|
|
|
Handler handler = new Handler(){
|
|
|
public void handleMessage(android.os.Message msg) {
|
|
|
- mPlayerSeekBar.setMax(mPlayer.getDuration());
|
|
|
- mPlayerSeekBar.setProgress(mPlayer.getCurrentPosition());
|
|
|
+ mPlayerSeekBar.setMax(musicService.mediaPlayer.getDuration());
|
|
|
+ mPlayerSeekBar.setProgress(musicService.mediaPlayer.getCurrentPosition());
|
|
|
handler.sendEmptyMessageDelayed(0, 100);
|
|
|
};
|
|
|
};
|
|
|
@@ -140,20 +197,19 @@ public class MainMusicActivity extends AppCompatActivity {
|
|
|
public void onClick(View v) {
|
|
|
if(v == mPlayBtn){
|
|
|
if("play".equals(mPlayBtn.getText())){
|
|
|
- mPlayer.start();
|
|
|
+ musicService.playOrPause();
|
|
|
mLrcView.setLrcRows(getLrcRows());
|
|
|
handler.sendEmptyMessage(0);
|
|
|
mPlayBtn.setText("暂停");
|
|
|
mPlayBtn.setSelected(true);
|
|
|
}else{
|
|
|
-
|
|
|
- if(mPlayer.isPlaying()){
|
|
|
- mPlayer.pause();
|
|
|
+ if(musicService.mediaPlayer.isPlaying()){
|
|
|
+ musicService.playOrPause();
|
|
|
mPlayBtn.setText("播放");
|
|
|
mPlayBtn.setSelected(false);
|
|
|
}else{
|
|
|
mPlayBtn.setSelected(true);
|
|
|
- mPlayer.start();
|
|
|
+ musicService.playOrPause();
|
|
|
mPlayBtn.setText("暂停");
|
|
|
}
|
|
|
}
|
|
|
@@ -166,7 +222,7 @@ public class MainMusicActivity extends AppCompatActivity {
|
|
|
@Override
|
|
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
|
if(seekBar == mPlayerSeekBar){
|
|
|
- mPlayer.seekTo(seekBar.getProgress());
|
|
|
+ musicService.mediaPlayer.seekTo(seekBar.getProgress());
|
|
|
handler.sendEmptyMessageDelayed(0, 100);
|
|
|
}
|
|
|
}
|
|
|
@@ -186,7 +242,7 @@ public class MainMusicActivity extends AppCompatActivity {
|
|
|
// Log.d("timeStr",mLrcView.getmLrcRows().get(0).getTime()+"");
|
|
|
Log.d("timeStrA",progress+"");
|
|
|
tv_timeStart.setText(formatTimeFromProgress(progress));
|
|
|
- tv_timeTotal.setText(formatTimeFromProgress(mPlayer.getDuration()));
|
|
|
+ tv_timeTotal.setText(formatTimeFromProgress(musicService.mediaPlayer.getDuration()));
|
|
|
if(fromUser){
|
|
|
|
|
|
showPlayerToast(formatTimeFromProgress(progress));
|
|
|
@@ -258,14 +314,57 @@ public class MainMusicActivity extends AppCompatActivity {
|
|
|
mLrcToastTv.setText(text);
|
|
|
mLrcToast.show();
|
|
|
}
|
|
|
+
|
|
|
|
|
|
- @Override
|
|
|
+ @Override
|
|
|
protected void onDestroy() {
|
|
|
super.onDestroy();
|
|
|
handler.removeMessages(0);
|
|
|
- mPlayer.stop();
|
|
|
- mPlayer.release();
|
|
|
- mPlayer = null;
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|