0

I got an issue with my service. The fact is that when it strat it crash all my application. The debug app told me that it crash after that the "onCreate" method end (see my code below). It seems that it don't even access to onHandedIntent but not sure of that! i put my code and the Log just below. I checked the manifest and it's no problem.

Thanks for all help

package com.example.pierr.puremusictest2;
import android.app.IntentService;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.util.Log;

import java.io.IOException;

public class MusicPlayerService extends IntentService{
static MediaPlayer mPlayer;
Intent gIntent;
String url = "http://lolilol.890m.com/Musique/CapitalKings/II/Capital_Kings_-_Satellites_Official_Audio_Video-r8.aac";

public MusicPlayerService() {
    super("mainThreadService");
    Log.i("blablabblablba","creation that's it2");
}

public void onCreate(){
    Log.i("blablabblablba","creation that's it2");
    mPlayer = new MediaPlayer();
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    Log.i("blablabblablba","musicPlayer created");
}

@Override
protected void onHandleIntent(Intent argo0) {
play();
}


public void play(){
    try {
        Log.i("voila c'est cool","play");
        mPlayer.setDataSource(url);
    } catch (IOException e) {
        e.printStackTrace();

    Log.i("test","destroy");       }
    mPlayer.start();

}

}

the Intent to start my service:

case R.id.play:
            Intent intent = new Intent(getActivity(), MusicPlayerService.class);
            getActivity().startService(intent);
            break;

and finally the LOG:

 java.lang.RuntimeException: Unable to start service com.example.pierr.puremusictest2.MusicPlayerService@419ed5d8 with Intent { cmp=com.example.pierr.puremusictest2/.MusicPlayerService }: java.lang.NullPointerException
                                                                                at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2719)
                                                                                at android.app.ActivityThread.access$2100(ActivityThread.java:135)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                at android.os.Looper.loop(Looper.java:136)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5027)
                                                                                at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                                                at dalvik.system.NativeStart.main(Native Method)
                                                                             Caused by: java.lang.NullPointerException
                                                                                at android.app.IntentService.onStart(IntentService.java:116)
                                                                                at android.app.IntentService.onStartCommand(IntentService.java:130)
                                                                                at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2702)
                                                                                at android.app.ActivityThread.access$2100(ActivityThread.java:135) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:136) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5027) 
                                                                                at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                                                at dalvik.system.NativeStart.main(Native Method) 

1 Answers1

1

In your service's onCreate() method, call super.onCreate() before doing anything else.

Note that using an IntentService for playing music is a rather strange choice:

  • There is nothing in your onHandleIntent() method that looks like it needs a background thread.

  • The IntentService will be destroyed once onHandleIntent() returns. I forget with MediaPlayer whether that will stop playback (once the lost MediaPlayer object is garbage-collected) or if you just lose control over the playback.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
  • but you're right, the IntentService close as soon as onHandleIntent return so what should i do? – pierre-charles Mangin Jun 05 '16 at 17:36
  • @pierre-charlesMangin: Do not use an `IntentService`. I do not know what your objectives are. Usually, if you want to play background music under user control (e.g., play/stop), you would use a regular `Service`, using `startService()` and `stopService()` to control the service and, by extension, control the music playback. – CommonsWare Jun 05 '16 at 18:00
  • oh i didn't knew that IntentService was so much more restrictive than service class! I'll try it thaks a lot for helping a new programmer like me :D – pierre-charles Mangin Jun 05 '16 at 18:07
  • 1
    @pierre-charlesMangin: It is designed for other use cases. An `IntentService` is great for a "transactional" bit of work: downloading a file, applying a bunch of database updates, generating a report in HTML or PDF, and so on. – CommonsWare Jun 05 '16 at 18:17