I create a musicplayer service class in android and press the play pause button in the fragment. I am running a radio stream in the musicplayer service. The service is running in the background. When the application is open, it can be controlled using the play pause button. but when the application is in the background, if I close the service pause button, it has not changed once. how can i decide that
public class RadioStreamFragment extends Fragment {
private static final String TAG = "RadioStreamFragment";
private String mTitle = "";
private Bitmap mBitmap;
private boolean mIsPlaying = false;
private int mMaxVolume;
private int mVolume;
private OnSeekBarChangeListener mListener;
private AudioManager mAudioManager;
private TextView mTVTitle;
public static Button mButton;
private SeekBar mSeekBar;
private AutoScrollViewPager pager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAudioManager = (AudioManager) getActivity()
.getSystemService(Context.AUDIO_SERVICE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_radio, null);
initView(view);
return view;
}
@Override
public void onResume() {
super.onResume();
if (mTitle != null)
setTitleText(mTitle);
if (mBitmap != null)
setImageCover(mBitmap);
MainActivity activity = (MainActivity) getActivity();
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mSeekBar.setMax(mMaxVolume);
mSeekBar.setProgress(mVolume);
if (mListener != null)
mSeekBar.setOnSeekBarChangeListener(mListener);
else {
mSeekBar.setOnSeekBarChangeListener(activity.mSeekBarListener);
}
Log.d(TAG, "Volume : " + mVolume + "/" + mMaxVolume);
setButtonState(mIsPlaying);
Log.d(TAG, "Resumed");
}
public void setTitleText(String title) {
mTitle = MainActivity.Songtitle;
mTVTitle.setText(MainActivity.Songtitle);
}
public void setImageCover(Bitmap bitmap) {
mBitmap = bitmap;
}
public void setButtonState(boolean isPlaying) {
mIsPlaying = isPlaying;
final int sdk = android.os.Build.VERSION.SDK_INT;
if (isPlaying) {
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
mButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_pause_radio));
} else {
mButton.setBackground(getResources()
.getDrawable(R.drawable.btn_pause_radio));
}
} else {
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
mButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_play_radio));
} else {
mButton.setBackground(getResources()
.getDrawable(R.drawable.btn_play_radio));
}
}
}
public void setMaxVolume(int value) {
mMaxVolume = value;
}
public void setVolume(int value) {
mVolume = value;
}
public void setOnSeekBarChangeListener(OnSeekBarChangeListener listener) {
mListener = listener;
}
public int getMaxVolume() {
return mMaxVolume;
}
public int getVolume() {
return mVolume;
}
public SeekBar getVolumeSeekBar() {
return mSeekBar;
}
public String getTitleText() {
return mTitle;
}
Button hbir;
Button lb;
private Handler handler;
private void initView(View view) {
final int sdk = android.os.Build.VERSION.SDK_INT;
mTVTitle = (TextView) view.findViewById(R.id.tv_title);
mButton = (Button) view.findViewById(R.id.btn_play);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.tryagain=false;
doPlay(v);
}
});
hbir = (Button) view.findViewById(R.id.hbit);
hbir.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
hbir.setEnabled(false);
lb.setEnabled(false);
mButton.setEnabled(false);
Data.Initialize();
Data.Initializehbit();
MainActivity.tryagain=false;
try{MainActivity.stopRadio();
MainActivity.playRadio();
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
mButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_pause_radio));
} else {
mButton.setBackground(getResources()
.getDrawable(R.drawable.btn_pause_radio));
}
as=false;
}
catch(Exception e){}
hbir.setEnabled(false);
lb.setEnabled(true);
mButton.setEnabled(true);
}
});
lb = (Button) view.findViewById(R.id.lbit);
lb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
hbir.setEnabled(false);
lb.setEnabled(false);
mButton.setEnabled(false);
Data.Initialize();
final int sdk = android.os.Build.VERSION.SDK_INT;
MainActivity.tryagain=false;
try{MainActivity.stopRadio();
MainActivity.playRadio();
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
mButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_pause_radio));
} else {
mButton.setBackground(getResources()
.getDrawable(R.drawable.btn_pause_radio));
}
as=false;
}
catch(Exception e){}
hbir.setEnabled(true);
lb.setEnabled(false);
mButton.setEnabled(true);
}
});
mSeekBar = (SeekBar) view.findViewById(R.id.sb_volume);
mTVTitle.setText(MainActivity.Songtitle);
}
public static boolean as=false;
public void doPlay(View view) {
final int sdk = android.os.Build.VERSION.SDK_INT;
if (!mIsPlaying && view.getId() == R.id.btn_play) {
MainActivity.playRadio();
if(as){
try{
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_play_radio));
} else {
view.setBackground(getResources()
.getDrawable(R.drawable.btn_play_radio));
}
}catch(Exception e)
{}
as=false;
}
else
{as=true;
try{
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_pause_radio));
} else {
view.setBackground(getResources()
.getDrawable(R.drawable.btn_pause_radio));
}
}catch(Exception e)
{}
}
} else {
MainActivity.stopRadio();
if(as){
try{
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_play_radio));
} else {
view.setBackground(getResources()
.getDrawable(R.drawable.btn_play_radio));
}
}catch(Exception e)
{}
as=false;
}
else
{as=true;
try{
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_pause_radio));
} else {
view.setBackground(getResources()
.getDrawable(R.drawable.btn_pause_radio));
}
}catch(Exception e)
{}
}
}
}
}
musicplayer class of service
import java.io.IOException;
import com.spoledge.aacdecoder.MultiPlayer;
import com.spoledge.aacdecoder.PlayerCallback;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class MusicPlayerService extends Service {
public static final String NOTIFICATION = "com.vg.intent.notification.musicplayer";
public static final String STATUS = "STATUS";
public static final String STATUS_PLAYING = "Playing";
public static final String STATUS_STOPPED = "Stopped";
public static final String STATUS_BUFFERING = "Buffering";
public static final String STATUS_SERVICE_STARTED = "ServiceStarted";
public static final String PLAY_THIS_ONE = "PlayThisOne";
private static final String TAG = "MusicPlayerSevices";
private StreamBinder mBinder;
private MediaPlayer mMediaPlayer;
private MultiPlayer mPlayer;
private PlayerCallback mPlayerCallback;
private Handler mHandler;
private boolean mIsMP3Pause = false;
private String mRadioTitle;
private boolean mIsPlaying = false;
@Override
public void onCreate() {
mBinder = new StreamBinder();
initMusicPlayer();
super.onCreate();
sendNotification(STATUS, STATUS_SERVICE_STARTED);
mHandler = new Handler();
Log.d(TAG, "onCreate complete");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (mBinder == null)
mBinder = new StreamBinder();
if (mPlayer == null)
initMusicPlayer();
if (mMediaPlayer == null)
mMediaPlayer = new MediaPlayer();
handlingRequest(intent);
Log.d(TAG, "onStartCommand complete");
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public void playRadio(final String url) {
if (mIsMP3Pause) {
mMediaPlayer.start();
mIsMP3Pause = false;
} else {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo == null || networkInfo.getState() != NetworkInfo.State.CONNECTED) {
return;
}
String newUrl = "";
if (url.contains(".m3u")) {
newUrl = ParserM3UToURL.parse(url);
} else {
newUrl = url;
}
final String finalUrl = newUrl;
mHandler.post(new Runnable() {
@Override
public void run() {
mIsPlaying = true;
if (finalUrl.endsWith(".mp3")) {
Log.d(TAG, "Start media player");
mPlayer.stop();
try {
mMediaPlayer.setDataSource(finalUrl);
mMediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.start();
mIsMP3Pause = false;
} else {
Log.d(TAG, "Start multi player");
mPlayer.playAsync(finalUrl);
}
}
});
}
});
thread.start();
}
}
public void stopRadio() {
mIsPlaying = false;
if (mMediaPlayer.isPlaying()) {
Log.d(TAG, "Stop media player");
mMediaPlayer.stop();
} else {
Log.d(TAG, "Stop multi player");
mPlayer.stop();
}
}
public void pauseRadio() {
mIsPlaying = false;
if (mMediaPlayer.isPlaying()) {
Log.d(TAG, "Pause media player");
mIsMP3Pause = true;
mMediaPlayer.pause();
} else {
Log.d(TAG, "Stop multi player");
mPlayer.stop();
}
}
public String getRadioTitle() {
return mRadioTitle;
}
public boolean isPlaying() {
return mIsPlaying;
}
private void initMusicPlayer() {
if (mPlayer == null) {
mPlayerCallback = new PlayerCallback() {
@Override
public void playerStopped(int perf) {
sendNotification(STATUS, STATUS_STOPPED);
}
@Override
public void playerStarted() {
sendNotification(STATUS, STATUS_PLAYING);
}
@Override
public void playerPCMFeedBuffer(boolean isPlaying, int bufSizeMs, int bufCapacityMs) {
if (!isPlaying) {
sendNotification(STATUS, STATUS_BUFFERING);
}
}
@Override
public void playerMetadata(String key, String value) {
if (key != null && key.equals("StreamTitle")) {
mRadioTitle = Utils.stripHtml(value);
sendNotification(STATUS, mRadioTitle);
}
}
@Override
public void playerException(Throwable throwable) {
final Throwable finalThrow = throwable;
mHandler.post(new Runnable() {
@Override
public void run() {
stopRadio();
Toast.makeText(getApplicationContext(), finalThrow.getMessage()
, Toast.LENGTH_LONG).show();
sendNotification(STATUS, STATUS_STOPPED);
}
});
}
@Override
public void playerAudioTrackCreated(AudioTrack arg0) {}
};
try {
java.net.URL.setURLStreamHandlerFactory( new java.net.URLStreamHandlerFactory(){
public java.net.URLStreamHandler createURLStreamHandler( String protocol ) {
Log.d( TAG, "Asking for stream handler for protocol: '" + protocol + "'" );
if ("icy".equals( protocol )) return new com.spoledge.aacdecoder.IcyURLStreamHandler();
return null;
}
});
}
catch (Throwable t) {
Log.w( TAG, "Cannot set the ICY URLStreamHandler - maybe already set ? - " + t );
}
mPlayer = new MultiPlayer(mPlayerCallback);
}
}
private void handlingRequest(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
String url = bundle.getString(PLAY_THIS_ONE);
if (url != null) {
playRadio(url);
Log.d(TAG, "Receive playing request : " + url);
}
else {
stopRadio();
Log.d(TAG, "Receive stop request");
}
}
}
private void sendNotification(String key, String value) {
Intent intent = new Intent(NOTIFICATION);
intent.putExtra(key, value);
sendBroadcast(intent);
}
public class StreamBinder extends Binder {
public MusicPlayerService getService() {
return MusicPlayerService.this;
}
}
}