Logo ja.androidermagazine.com
Logo ja.androidermagazine.com

リプレイ:Bluetoothを介した再生コントロールの増大する闘争

Anonim

仕事、家、ベッド、シャワー、そしてその間のあらゆる場所で私が正気で幸せな気持ちに保つために使うものです。 音楽は私をより良くし、音楽は私のAndroid体験の非常に大きな部分を占めているため、ここ数年、特にここ数か月間はゆっくりと衰退していることに気づきました。

時々、Bluetoothヘッドフォンをオンにして再生ボタンを押しても、何も起こりません。 そして、以前ほど多くのことは起こりません。

Androidの初期の頃、ソアリンをポケットに入れて(そう、Samsung Captivate Glideと名付けました)、Kinivo Bluetoothヘッドフォンの最初のペアを首にかけました。GooglePlayミュージックを開く必要はありませんでした。ヘッドフォンで再生します。 実際、Samsung Galaxy SIIを引き出しから取り出し、数か月ぶりに起動し、Bluetoothヘッドフォンをペアリングして、再生ボタンを押しました。 そして音楽が流れました。

私のstable舎の現在のデバイスではそれほどではありません。

HTC 10は、Bluetoothアプリをときどき従わないだけで、音楽アプリへの永続的な通知を行います。 むしろ、Moto 360でプレイするか、電話自体でプレイする方がいいでしょう。 HTC A9も同様に細心の注意を払っています。 Nexus 5Xでは、永続的な通知が表示されても音楽がバックアップされない場合がありますが、通知がなくても音楽が再生される場合があります。 Samsung S6エッジが再生されますが、最近アクティブになった音楽アプリを再生する代わりに、デフォルトでプリロードされた音楽アプリに戻ります。

ここで繰り返し続ける言葉があります:時々。 これは、これが多くの変数を持つ問題であるためです:使用しているAndroidデバイス、使用しているBluetoothデバイス、使用しているAndroidとBluetoothのバージョン、再生しようとしている音楽アプリ、これは、ボタンを押すたびにボタンが機能しないという一見単純な問題に寄与する多くのことです。

ここで実際に何が起きているのでしょうか? まあ、答えは少し-わかりました、 たくさん -技術的になります。

ボタンを押すと、Androidによって解釈され、KeyEventsを介してシステム全体にブロードキャストされます。 ヘッドセットの[次へ]ボタンは解釈され、KeyEventを介してKEYCODE_MEDIA_NEXTとして配信されます。 さまざまなボタン、または同じボタンに対してもプルアップできるさまざまな値があります。 ほとんどのヘッドセットの再生ボタンは一時停止ボタンでもあるため、キーはKEYCODE_MEDIA_PAUSE、KEYCODE_MEDIA_PLAY、またはデバイスとその現在の状態に応じてKEYCODE_MEDIA_PLAY_PAUSEを返す可能性があります。 ちなみに、一時停止したことがあり、視聴/一時停止中に音楽がどこか他の場所で開始された場合、これは2つのアプリによって受信され、実行されたため、責任を負うKeyEventです。

KeyEventsが解釈されると、BroadcastReceiverインテントを介してメディアボタンをリッスンしている音楽アプリでそれらを聞く必要があります。 結局のところ、アプリは表示できない場合、KeyEventで動作できません。 アプリのレシーバーがボタンの押下を受信できない場合は、上記で説明した断続的な問題を含め、いくつかの方法で再生コントロールを台無しにする可能性があります。 オーディオフォーカス(特定の時間にAndroidがオーディオを再生できるアプリを決定する方法)を失ったときにアプリのBroadcastReceiverの登録がすぐに解除された場合、音楽を一時停止すると、リスニングが停止し、ボタンを押すのが聞こえないことがあります再びプレイを開始します。 そのため、メディアアプリがAudio FocusとBroadcastReceiverの両方を適切に処理し、デバイスが前者を失っても、後者を失わないようにすることが重要です。

これの多くは、ヘッドセットのボタンを押したときに、音楽アプリがどれだけうまくプログラムされているか、デバイスによってどのメディアボタンがブロードキャストされているかによって決まります。 これは、デバイスを購入したときに再生コントロールが一貫していても、リスニングを停止する速さを変更するアプリの更新またはシステムの更新によって破損する可能性があることも意味します。

Google Playミュージックなどのアプリの場合、更新が頻繁に行われるようになっています。 ほとんどの休憩はすぐに修正されますが、他の休憩は修正に数か月かかる場合があります。 Bluetoothで音楽が正常に起動しないなどの断続的な問題は、ログに記録して適切に特定することが難しく、修正がさらに遅くなる可能性があります。

音楽アプリにオーディオフォーカスがなく、フォアグラウンドサービスとして実行されていない場合(メディアプレーヤーへの永続的な通知がない場合)、Androidシステム(具体的にはDoze)またはいわゆる「リソースアプリを保存すると、アプリが強制終了され、他のアクティビティのためにメモリが解放されます。 その場合、受信者が開いていてコマンドをリッスンしていないため、playをヒットしても何も実行されない場合があります。

さて、再生コントロールを壊す可能性のあるものがいくつかあるように、それを修正しようとするオプションもあります。

最初の解決策は少し極端ですが、ユーザーがソフトウェアのルートを変更せずに現在の携帯電話に実装できる数少ないものの1つです。 TaskerやAutoInputなどのアプリを使用して、ボタンが押されたことを検出し、元のKeyEventアクションを抑制してから、1つのアプリに直接向けられたより特殊な(より一貫した)コマンドを実行できます。 たとえば、再生ボタンは一般的な再生メディアコマンドであり、多数のメディアサービスで取得または無視できるのではなく、Google Playミュージックに固有の再生/一時停止切り替えコマンドとして再マップして、他のアプリが代わりに起動します。

これはプログラムを作成するのが面倒な場合があり、元のアクションを抑制して置き換えることにより、YouTubeやNetflixなどの他のアプリで使用する可能性のあるネイティブの一時停止ボタンを解除します。 要するに、技術に詳しくないユーザーや、さまざまなメディアアプリを使用するユーザー向けのソリューションではありません。

多くの携帯電話には、設定でオンまたはオフにできるジェスチャとボタンのアクションがたくさんあります。たとえば、ダブルタップで起動したり、カメラのホーム/電源をダブル押したりできます。 このリストにBluetoothコントロールを追加すると、リストが長くなり、複雑になる場合がありますが、Androidシステムが一般的な信号を受信側(または受信していない)にブロードキャストするのではなく、KeyEventを確認して特定のアプリに送信する場合、一貫性を確保できます。 これは、たとえば、Moto Assistを開いて、車のBluetoothに接続したときに指定された音楽アプリをオンにするなど、デバイスで行われたことがあります。

Androidがメディアボタンを処理する方法を変更し、Bluetoothコントローラーとキーボードが独自の問題に遭遇するため、ボタン入力を全体的に処理すると、解決できる限り多くの新しい問題が発生する可能性があります。現在のシステムでは間違っているので、卵を割って新しいオムレツを作る価値があるかもしれません。

結局のところ、日常のユーザーは、主要なコマンド、受信機、および現在どのアプリにオーディオフォーカスがあるのか​​を掘り下げたくありません。 私たちは音楽そのものとそれが私たちをどこに連れて行くかに焦点を合わせたいと思っ て います。 そして、最初の試みで私を大声で混雑した場所で正気に保つ音楽をオンにできない場合、私は幸せな女の子ではありません。 そして、私は私だけではないに違いない。

リンクを使用して、購入の手数料を獲得する場合があります。 もっと詳しく知る。