1

アプリケーション (音楽プレーヤー) 用の音楽サービスを作成しました。いくつかのテストを行った後、解決方法がわからないため、頭痛の種となる動作を観察しています。

テスト目的で、サービスを変更して、サービスが開始されるとすぐに、SD カードから特定の mp3 ファイルを再生するようにしました。また、最初のアクティビティが開始され、サービスが開始されてから「finish()」が呼び出されるように、アプリケーションを変更しました。

わかりました... アプリケーションを起動すると、最初のアクティビティが開始され、サービスが起動して音楽が再生され、アクティビティが終了してアプリケーションが閉じられ、... 音楽が停止し、数秒後にサービスが再開されます (私は START_STICKY フラグを使用しているので、それは正常だと思います)。

アプリケーションを閉じたときに音楽が停止したくない、つまり、アプリケーションを閉じたときにサービスが停止されたくない (停止されたためにサービスが再開されたくない) ということです。

現在、音楽サービスを制御するために、サービスを開始してバインドし、インターフェイスで定義したサービス関数を呼び出せるようにします。

何か案は?

ありがとう!

編集:

これは、私のアプリケーションとサービスが (私が行っているテストで) 行うことの例です。

アクティビティ:

public class FirstActivity extends SherlockFragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        startService(new Intent(this, MyService.class));

        ...
        // Here is a postDelayed that will run after 2 seconds and call finish()
    }
}

サービス:

public class MyService extends Service {
    private MediaPlayer mPlayer;

    @Override
    public void onCreate() {
        mPlayer = new MusicPlayer(this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Here is the code that plays the music using MediaPlayer

        return START_STICKY;
    }
}
4

1 に答える 1

2

サービスがリモートであることをマニフェスト アプリケーション タグに忘れずに記載してください。

<service
  android:name="somepackage.PlayerService"
  android:label="Player Service"
  android:process=":remote"/>

remote名前は別の名前にすることができるので、メインのアプリケーション プロセスにバインドされていない複数のサービスを使用できることに注意してください。

于 2012-05-06T14:49:12.440 に答える