私のアプリでは、音楽ファイルを再生するためにサービスでメディアプレーヤーを使用しています。TelephonyManager
着信と発信をチェックし、それに応じて音楽を再生および一時停止するために使用しました。
着信と発信の場合、アプリは正常に動作し、通話が発生するたびに音楽が一時停止し、通話が切断された後に再開します。しかし、通話が切断された後に手動で一時停止しようとすると、一時停止しません。
以下は私のコードです:
public class ChalisaService extends Service
{
static MediaPlayer mediaPlayer;
static int playerFlag = 0;
TelephonyManager tm;
ActivityManager actManager;
Context mContext = getApplicationContext();
/**
* 0 for stop
* 1 for play
* 2 for pause*/
@Override
public IBinder onBind(Intent intent)
{
return null;
}//onBind
@Override
public void onCreate()
{
super.onCreate();
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.chalisa);
mediaPlayer.setVolume(100, 100);
tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
tm.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}//onCreate
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
if(mediaPlayer.isPlaying())
{
mediaPlayer.pause();
/*HanuAlarm.txtPlay.setText("Play");
HanuAlarm.btn_Play.setBackgroundResource(R.drawable.btnplay);*/
playerFlag = 2;
}//if
else
{
mediaPlayer.start();
/*HanuAlarm.txtPlay.setText("Pause");
HanuAlarm.btn_Play.setBackgroundResource(R.drawable.btnpause);*/
playerFlag = 1;
}//else
startForeground(0, null);
return playerFlag;
}//onStartCommand
@Override
public void onDestroy()
{
mediaPlayer.stop();
mediaPlayer.release();
playerFlag = 0;
}//onDestroy
private PhoneStateListener mPhoneListener = new PhoneStateListener() {
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
mContext.sendBroadcast(i);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Intent in = new Intent("com.android.music.musicservicecommand");
in.putExtra("command", "pause");
mContext.sendBroadcast(in);
break;
case TelephonyManager.CALL_STATE_IDLE:
if(!mediaPlayer.isPlaying())
{
mediaPlayer.start();
playerFlag = 1;
}//if
else
{
Intent in1 = new Intent("com.android.music.musicservicecommand");
in1.putExtra("command", "pause");
mContext.sendBroadcast(in1);
}//else
tm.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
default:
Log.d("Chalisa Service", "Unknown phone state=" + state);
}
}
};
}//ChalisaService
メディアプレーヤーを再生または一時停止しているボタンコード:
btn_Play.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
if(ChalisaService.playerFlag == 0 || ChalisaService.playerFlag == 2)
{
startService(in);
ChalisaService.playerFlag = 1;
Log.i("HanuAlarm play button if", ""+chalisaPlaying);
txtPlay.setText("Pause");
txtPlay.setTextColor(getResources().getColor(R.color.redwine));
btn_Play.setBackgroundResource(R.drawable.btnpause);
}//if
else if(ChalisaService.playerFlag == 1)
{
ChalisaService.mediaPlayer.pause();
ChalisaService.playerFlag = 2;
Log.i("HanuAlarm play button else", ""+chalisaPlaying);
txtPlay.setText("Play");
txtPlay.setTextColor(getResources().getColor(R.color.white));
btn_Play.setBackgroundResource(R.drawable.btnplay_a);
}//else if
}//onClick
});