0

私は音楽プレーヤーを実装しています。通知により、ユーザーは曲を一時停止またはスキップできます。私が使う

Intent i = new Intent("com.package.app");
mExpandedView.setOnClickPendingIntent(R.id.next_song, PendingIntent.getBroadcast(this, 0, i, 0));

このクリックを、MediaPlayer および関連するすべてのメソッドをホストする MusicService に送信するため。このサービスのメソッド部分 (playNextSong() など) を直接呼び出したいのですがgetService()、新しいサービスを起動することしかできないようで、サービス内のメソッドを呼び出したり、データを取得したりすることはできません。音楽が再生され、既に実行されているため、サービスを起動する必要さえありません。

だから、私が気付いていないこれを行う方法はありますか?または、
通知はBroadcastReceiverにブロードキャストされ、BroadcastReceiverは推奨される方法でサービスにブロードキャストされ、このアクションを実行しますか? シンプルなことをするのは複雑な方法のように見えます...

4

2 に答える 2

0

通知からアクティビティを開始できます。そのアクティビティは「bindService」を実行し、サービス内の適切なメソッドを呼び出してから、finish() を実行します。アクティビティには UI が必要ないため、ユーザーには表示されません。しかし、これは Broadcastreceiver よりもさらに多くのコードです。

于 2012-10-03T09:47:11.103 に答える
0

カスタム ブロードキャスト メッセージとして通知するための PendingIntent を作成します (com.my.custom.broadcast.message.action のような独自の文字列を使用します)。このカスタム アクションによって起動される新しいブロードキャスト レシーバーを AndroidManifest に作成して登録します。ブロードキャスト レシーバーの OnReceive メソッドで、サービスのクラスと onReceive メソッドに渡されたコンテキスト引数に基づいて、カスタム引数/アクションなどでサービスを開始します。

そのための PendingIntent を作成することで、直接サービスを開始しようとすることもできますが、中間ステップ: BroadcastReceiver を介して実行する方がよいと思います。

于 2012-10-03T00:42:10.063 に答える