Мой сервис не вызывается - PullRequest
2 голосов
/ 26 ноября 2011

У меня есть служба, которая берет аудиофайл и воспроизводит его с помощью медиаплеера. Так я называю свою службу

private void playAudio(String url) throws Exception{
Intent music = new Intent(this,MusicService.class);
music.putExtra("paths", path);
 startService(music);

 }

и это мой сервис

          class MusicService extends Service implements OnCompletionListener {
              MediaPlayer mediaPlayer;
               String musicFile;


   @Override
       public void onCreate() {
  mediaPlayer = new MediaPlayer();
  mediaPlayer.setOnCompletionListener(this);
  Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_LONG).show();
   }

   @Override
       public int onStartCommand(Intent intent, int flags, int startId) {
   Bundle e = intent.getExtras();
    musicFile= e.getString("paths"); 
    try {
         mediaPlayer.prepare(); 
         mediaPlayer.setDataSource(musicFile);
        } catch (IllegalArgumentException i) {
         // TODO Auto-generated catch block
          i.printStackTrace();
       } catch (IllegalStateException i) {
            // TODO Auto-generated catch block
            i.printStackTrace();
        } catch (IOException i) {
            // TODO Auto-generated catch block
            i.printStackTrace();
        }
     if (!mediaPlayer.isPlaying()) 
       {             
        mediaPlayer.start();             
        } 
      return START_STICKY; 
     }

  @Override
  public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub

   }

   @Override
     public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
   }


   }

Служба никогда не выполняется, тост никогда не создается, и медиаплеер не воспроизводит путь. Спасибо, я заранее за помощь

Если я объявлю это в своем манифесте, как это

<service android:name=".MusicService" android:enabled="true"></service>

Я получаю ошибку принудительного закрытия

Ответы [ 2 ]

8 голосов
/ 26 ноября 2011

Исключение вы получаете, потому что система не может инициировать вашу службу (вызвать ее конструктор), потому что она недоступна.

Как говорится здесь :

... Убедитесь, что класс объявлен публичным ...

Опубликованный вами класс не является общедоступным, поэтому сделайте его общедоступным.

2 голосов
/ 26 ноября 2011

Вы должны сделать свой класс публичным. т.е.

 public class MusicService extends Service implements OnCompletionListener {
          MediaPlayer mediaPlayer;
           String musicFile;
...