Не удалось проверить проблему с сервисом Android - PullRequest
2 голосов
/ 19 февраля 2010

Все, что я хочу сделать, - это просто управлять фоновой музыкой в ​​своем приложении через службу, чтобы я мог ее запустить и остановить от любой активности.

У меня все отлично настроено, когда я сообщаю сервису Toast, когда он запускается и уничтожается, но как только я вместо этого помещаю туда воспроизведение мультимедиа, он начинает нормально и начинает играть музыку, но как только щелчок При нажатии кнопки остановки службы появляется сообщение об ошибке и принудительное закрытие.

Может кто-нибудь подсказать, что я делаю не так?

Вот мой код:

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.widget.Toast;

public class MyService extends Service {

private MediaPlayer player;

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

@Override    
publicvoid onCreate() { 
super.onCreate(); 
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.oceanwavestest);
player.start();
player.setLooping(true);

}

   @Override    
   publicvoid onDestroy() {
   super.onDestroy();
   player.stop();
   Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show();
   } 
} 

1 Ответ

0 голосов
/ 20 февраля 2010

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

  • Вы пытаетесь вызвать «stop» для члена объекта MediaPlayer «player»«в вашем onDestroy, но в вашем onCreate вы создаете объект MediaPlayer« player »с вашей строкой кода

» MediaPlayer player = MediaPlayer.create (MyService.this, R.raw.oceanwavestest);"

, который, я считаю, создает объект проигрывателя, который вы потеряете за пределами функции.

Исправление в 1 строку для этого кода состоит в том, чтобы просто использовать" player = MediaPlayer.create (MyService.this, R.raw.oceanwavestest); ", таким образом, вместо локальной переменной используется переменная-член

Если бы это был мой код, я бы изменил переменную-член так, чтобы она называлась чем-то вроде m_player или mPlayer, такчто вы знаете, что это переменная-член в вашем коде.

  • (возможно, опечатка) "returnnull;"в onBind должно быть «return null»

  • , вы также можете попробовать позвонить

player.stop ();Toast.makeText (это, «Служба остановлена», Toast.LENGTH_SHORT) .show ();

перед вызовом super.onDestroy ()

Дайте мне знать, если это вообще поможет

...