6

私がやりたいことは、サービスを介してアプリのバックグラウンド ミュージックを制御するだけで、あらゆるアクティビティからアプリを開始および停止できるようになります。

サービスが開始されて破棄されたときに Toast に通知すると、すべてが完全にセットアップされますが、代わりにメディアをそこに再生するとすぐに、正常に開始され、音楽の再生が開始されますが、ボタンをクリックして停止するとすぐにservice エラーが発生し、強制終了します。

誰かが私が間違っていることを理解するのを手伝ってください..私はアンドロイド開発にかなり慣れていないので、簡単なものになると思います。

これが私のコードです:

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

4 に答える 4

6

player.stop();----- この行はあなたに与えているに違いありませんnullPointerException

private MediaPlayer player;ここでは参照のみを作成していますが、作成しonCreate()ているオブジェクトにはローカルスコープしかありません。クラスレベルのスコープを持つオブジェクトを作成してください。そうすれば機能します。

于 2012-09-03T08:32:04.970 に答える
0

onBindメソッドは、「ローカル サービス」の場合にのみ null を返します。私の理解が正しければ、あなたはリモート サービスを作成したいと考えています。

この参照サイトのリモート サービス セクションを表示します。

于 2011-10-11T02:28:00.137 に答える