Сервис Android, управляющий MediaPlayer - PullRequest
6 голосов
/ 19 февраля 2010

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

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

ПОЖАЛУЙСТА, кто-нибудь, помогите мне понять, что я делаю неправильно ... Я довольно новичок в разработке для Android. Я предполагаю, что это будет что-то легкое.

Вот мой код:

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) {

        return null;

    }

    @Override
    public void onCreate() {

        super.onCreate();

        Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();

        MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.my_music);

        player.start();

        player.setLooping(true);

    }

    @Override
    public void onDestroy() {

        super.onDestroy();

        player.stop();

        Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show();

    }

}

Ответы [ 4 ]

6 голосов
/ 03 сентября 2012

player.stop(); ----- эта строка должна давать вам nullPointerException.

private MediaPlayer player; здесь вы создаете только ссылку. Но объект, который вы создаете в onCreate(), имеет только локальную область видимости. Пожалуйста, создайте объект, имеющий область уровня класса, тогда он будет работать.

0 голосов
/ 11 сентября 2017

Как написал ** Рик D ** проблема была объявлена ​​в Mediaplayer, который вы объявили игроком раньше, просто поставьте:

player = MediaPlayer.create(ForegroundService.this, R.raw.my_music);
0 голосов
/ 09 апреля 2016

У вас есть объект player, объявленный локальным для процедуры OnCreate, удалите локальное объявление, см. Ниже:

//MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.my_music);
player = MediaPlayer.create(MyService.this, R.raw.my_music);
0 голосов
/ 11 октября 2011

onBind метод возвращает ноль, только если это «Локальная служба». Если я вас правильно понимаю, вы хотите создать удаленный сервис.

показать раздел удаленного обслуживания в этом справочном сайте.

...