package com.android.service;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.os.RemoteException;
import android.telecom.TelecomManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.aidl.IMediaplayInterface;
import com.android.entity.Constant;
import com.android.entity.MusicMessage;
import com.android.play.FullscreenActivity;
import com.android.receiver.MusicScreenOffShowReceiver;
import java.io.IOException;
import java.util.List;
public class IMediaplayService extends Service implements MediaPlayer.OnCompletionListener,MediaPlayer.OnPreparedListener{
private String TAG = Constant.TAG;
public MediaPlayer mMediaPlayer;
private boolean isRing=false;
private TelephonyManager tm;
private String mPath;
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
if(mMediaPlayer.isPlaying()) {
Intent mIntent = new Intent();
mIntent.setAction("com.android.keygard.activity");
mIntent.putExtra("path",mPath);
context.sendBroadcast(mIntent);
}
}
}
};
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG,"===onCreate==IMediaplayService=="+mMediaPlayer);
}
PhoneStateListener listener=new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Log.i(TAG, " 挂断 CALL STATE IDLE " + isRing);
if (isRing){
isRing = false;
mMediaPlayer.start();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(TAG, " 接听 CALL STATE OFFHOOK");
System.out.println("接听");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.i(TAG, "响铃:来电号码"+incomingNumber);
isRing = true;
mMediaPlayer.pause();
break;
}
}
};
private void addMediaplayListenser(){
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
Log.i(TAG,"IMediaplayService onBind ");
mMediaPlayer = new MediaPlayer();
tm = (TelephonyManager)getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
addMediaplayListenser();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(receiver,filter);
Log.i(TAG,"===onBind==IMediaplayService=="+mMediaPlayer);
return iBinder;
}
private IBinder iBinder = new IMediaplayInterface.Stub(){
@Override
public void preparePlay(String path) throws RemoteException {
if(mMediaPlayer == null){return;}
mPath = path;
mMediaPlayer.reset();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mMediaPlayer.setDataSource(path);
} catch (IOException e) {
e.printStackTrace();
}
try {
mMediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean isplay() throws RemoteException {
if(mMediaPlayer == null){
Log.i(TAG,"===isplay==mMediaPlayer="+mMediaPlayer);
return false;
}
return mMediaPlayer.isPlaying();
}
@Override
public void prepare() throws RemoteException {
if(mMediaPlayer == null){
return;
}
try {
mMediaPlayer.prepareAsync();
//mMediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void pause() throws RemoteException {
if(mMediaPlayer != null){
mMediaPlayer.pause();
}
}
@Override
public void start() throws RemoteException {
if (mMediaPlayer != null){
if(!mMediaPlayer.isPlaying()){
mMediaPlayer.start();
}
}
}
@Override
public void stop() throws RemoteException {
if (mMediaPlayer != null){
if (mMediaPlayer.isPlaying()){
Log.i(TAG," IMediaplayService isPlay ");
mMediaPlayer.pause();
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}else {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
}
}
@Override
public int getDuration() throws RemoteException {
return mMediaPlayer.getDuration();
}
@Override
public void seekTo(int position) throws RemoteException {
mMediaPlayer.seekTo(position);
}
@Override
public void looper() throws RemoteException {
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
try {
start();
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}
@Override
public int getCurrentPosition() throws RemoteException {
if(mMediaPlayer ==null){
return 0;
}
return mMediaPlayer.getCurrentPosition();
}
@Override
public int getMusciPostionAtList(String path) throws RemoteException {
int position = 0;
if (path == null){return 0;}
List<MusicMessage> musicList = Constant.musicList;
for(int i = 0 ;i < musicList.size() ;i++){
if(musicList.get(i).getPath().equals(path)){
position = i;
break;
}
}
return position;
}
};
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
Log.i(TAG,"'=======onCompletion==");
Intent intent = new Intent();
intent.setAction("com.android.media.completion");
sendBroadcast(intent);
}
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.i(TAG,"=====onPrepared===");
Intent intent = new Intent();
intent.setAction("com.android.media.prepare");
sendBroadcast(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}