Пытаюсь использовать сервис для фоновой музыки.

package com.example.neotavraham;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;


public class PlayMusicService extends Service implements MediaPlayer.OnPreparedListener {
  public static final String ACTION_PLAY = "com.example.neotavraham.PLAY";
  MediaPlayer mMediaPlayer = null;

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent.getAction().equals(ACTION_PLAY)) {
      mMediaPlayer = MediaPlayer.create(this, R.raw.yedid_nefesh);
      mMediaPlayer.setOnPreparedListener(this);
      mMediaPlayer.prepareAsync(); // prepare async to not block main thread
    }
    return flags;
  }

  @Override
  public void onPrepared(MediaPlayer mp) {
    mp.start();
  }

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }
}

Я вызываю его из MainActivity строкой: startService(new Intent(PlayMusicService.ACTION_PLAY));

И, конечно, я добавил фильтр намерений

<intent-filter>
  <action android:name="com.example.neotavraham.PLAY"/>
</intent-filter>

Искал в интернете отличное решение, но не нашел ... что мне делать?

0
kitsuneFox 4 Мар 2015 в 12:06

2 ответа

Лучший ответ

В своей деятельности делайте следующее:

Intent i = new Intent(this,PlayMusicService.class);
i.putExtra("action","com.example.neotavraham.PLAY");
startService(i);

В вашем сервисе сделайте следующее:

package com.example.neotavraham;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;


public class PlayMusicService extends Service  {
  public static final String ACTION_PLAY = "com.example.neotavraham.PLAY";
  MediaPlayer mMediaPlayer = null;

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent.getStringExtra("action").equals(ACTION_PLAY)) {
      mMediaPlayer = MediaPlayer.create(this, R.raw.yedid_nefesh);
      mMediaPlayer = MediaPlayer.create(this, R.raw.idil);
        mMediaPlayer.setLooping(true); // Set looping
        mMediaPlayer.setVolume(100,100);
        mMediaPlayer.start();
    }
    return flags;
  }

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

    @Override
    public void onDestroy() {
        mMediaPlayer.stop();
        mMediaPlayer.release();
    }
}

В своем манифесте сделайте следующее:

<service
            android:name="com.example.neotavraham.PlayMusicService"
           />

Это идеальный код для вашего приложения. Надеюсь, это наконец сработает ....

1
Sulabh Jain 4 Мар 2015 в 12:04

Пожалуйста, вызовите службу из намерения и установите действие этого намерения следующим образом:

Intent i = new Intent(this,PlayMusicService.class);
i.setAction("com.example.neotavraham.PLAY");
startService(i);

Этот код будет работать.

Фоновая служба для запуска медиаплеера

package com.example.neotavraham;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;


public class PlayMusicService extends Service  {
  public static final String ACTION_PLAY = "com.example.neotavraham.PLAY";
  MediaPlayer mMediaPlayer = null;

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent.getAction().equals(ACTION_PLAY)) {

      mMediaPlayer = MediaPlayer.create(this, R.raw.idil);
        mMediaPlayer.setLooping(true); // Set looping
        mMediaPlayer.setVolume(100,100);
        mMediaPlayer.start();
    }
    return flags;
  }

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

    @Override
    public void onDestroy() {
        mMediaPlayer.stop();
        mMediaPlayer.release();
    }
}

Благодарность

2
Sulabh Jain 4 Мар 2015 в 10:06