I start my service when I press the play button to play the song and associate it with it and get it on onStartCommand. The problem is that when my activity that starts the service ends, my service calls onStartCommand again. When he goes to get this package, it does not exist, because this time it was not launched. Because of this, I get an invalid exception when preparing my media player. I do not tie my service.
Why is the onStartCommand call called when my activity ends?
Service Launch:
Intent i = new Intent(SongList.this,MyService.class); i.putExtra("songURL", user.songurlz); i.putExtra("songNAME", songplay_name); startService(i);
Class of service:
public class MyService extends Service { static MediaPlayer mediaPlayer; static int pauseplay; static NotificationManager notificationManagerPlay; static CharSequence tickerText; static Notification notification4;//Notification variable(for song playing) TelephonyManager telephonyManager; PhoneStateListener listener; static Notification notification; static NotificationManager mNotificationManager; String songurl; String songname; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); mediaPlayer = new MediaPlayer(); pauseplay = 1; MainMenu.serviceRunning = 1; telephonyManager = (TelephonyManager) getSystemService( Context.TELEPHONY_SERVICE); // Create a new PhoneStateListener listener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE: break; case TelephonyManager.CALL_STATE_OFFHOOK: break; case TelephonyManager.CALL_STATE_RINGING: if (mediaPlayer.isPlaying() == true && mediaPlayer != null){ pauseSong(); } break; } } }; // Register the listener wit the telephony manager telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); } public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); if (intent != null) { Bundle bundle = intent.getExtras(); //Retrieve your data using the name songurl = bundle.getString("songURL"); Bundle bundle2 = intent.getExtras(); //Retrieve your data using the name songname = bundle2.getString("songNAME"); } Toast toast = Toast.makeText(getApplicationContext(), "Now Playing: " + songname, Toast.LENGTH_LONG); toast.show(); // configure the intent Intent playIntent = new Intent(MyService.this, SongList.class); final PendingIntent pendingIntent = PendingIntent.getActivity( MyService.this, 0, playIntent, 0); notification = new Notification(R.drawable.playicon, "Buffering...", System.currentTimeMillis()); notification.contentView = new RemoteViews(getPackageName(), R.layout.custom_notification2); notification.contentIntent = pendingIntent; if (SongList.bitmap != null) { notification.contentView.setImageViewBitmap(R.id.notifimage, SongList.bitmap); } else { notification.contentView.setImageViewResource(R.id.notifimage, R.drawable.icon); } notification.contentView .setTextViewText(R.id.notiftitle, "Now Playing"); notification.contentView.setTextViewText(R.id.notiftext, songname); notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT; mNotificationManager = (NotificationManager) getApplicationContext() .getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(4, notification); mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataSource(songurl); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // register an error listener via MediaPlayer setOnErrorListener mediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { Log.e("MEDIAPLAYER ERRORS", "what: " + what + " extra: " + extra); mediaPlayer.reset(); mNotificationManager.cancel(4); return false; } }); mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); mediaPlayer .setOnCompletionListener(new MediaPlayer.OnCompletionListener(){ public void onCompletion(MediaPlayer mp) { stopSelf(); } }); return START_STICKY; } @Override public void onDestroy() { MainMenu.serviceRunning = 0; mNotificationManager.cancel(4); } public static void pauseSong() { if (mediaPlayer.isPlaying() == true) { mediaPlayer.pause(); mNotificationManager.cancel(4); pauseplay = 0; } } public static void playSong() { if (pauseplay == 0) { mNotificationManager.notify(4, notification); mediaPlayer.start(); pauseplay = 1; } } }
android
Nick Nelson Feb 22 '12 at 17:17 2012-02-22 17:17
source share