3

ブロードキャスト レシーバーを使用して音楽再生の開始を検出し、ジェスチャー コントロールを提供してスキップ トラック インテントの送信をトリガーする Android アプリを構築しようとしています。

まず、オーディオの再生が開始されたときに通知をトリガーするように受信機を設定して、この概念が機能することを確認できるようにします。マニフェスト ファイルでサービスとレシーバーを宣言し、(できれば) onCreate() を介して通知を作成するサービス クラスを作成しました。

私は大量のドキュメントをクロールしましたが、受信機でリッスンする正しい意図を見つけることができないようです. 確かにこれには何かがありますか?

よろしく。

4

2 に答える 2

3

Android 3.1 以降には、ユーザーが手動でアプリを少なくとも 1 回開くまで、ブロードキャスト レシーバーが登録されない新しいセキュリティ機能があることが判明しました。UI を開く必要のないサービスのみのアプリを構築しようとしていたため、インテント リスナーの試みがすべて機能しなくなりました。

スプラッシュ スクリーン アクティビティを修正したところ、すべてが期待どおりに機能するようになりました。私は現在、プレーヤー固有のインテントのリストを照合する作業を行っていますが、似たようなものを構築しようとしている人にとっては、com.android.music.playstatechanged が最良のスタートと思われます。これは、音楽が開始、一時停止、または再開されたときにデフォルト プレーヤー (Google Play ミュージック) によってトリガーされ、再生状態と一時停止状態を区別するためのブール値の「再生中」プロパティを含む追加データがバンドルされます。

基本的に、これは私が現在使用しているコア レシーバーです。楽しむ!

public class MainReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        // Start the service when music plays, stop the service when music ends.
        if(intent.hasExtra("playing")) {
            if(intent.getBooleanExtra("playing", false)) {
                Intent service = new Intent(context, MainService.class);
                context.startService(service);
            } else {
                Intent service = new Intent(context, MainService.class);
                context.stopService(service);
            }
        }
    }
}
于 2013-08-26T13:17:59.720 に答える
0

確かにこれには何かがありますか?

何千もの音楽プレーヤーがあります。トラックに関する情報は言うまでもなく、何もブロードキャストする義務はありません。また、いかなる手段によっても「トラックをスキップ」することを許可する義務はありません。

この種の API が文書化され、サポートされている特定の音楽プレーヤーを検索してみてください。

于 2013-08-11T23:21:54.090 に答える