– 再生キュー登録処理を統一化
– 再生キュー登録オプション設定を追加
– Bluetooth AVRCP 1.3 による曲名表示対応 (Android 4.3以降)
– リモートコントロールを初期状態で有効化
– Lollipopのプライベートロック画面に表示されない問題修正
– その他、各種修正
– BROADCAST_STICKY 権限要求追加
2015-05-26 Ver. 2.0.6
– 再生終了後に落ちる問題修正
– プレイリストの削除時にダイアログが閉じない問題修正
Ver. 2.0.5
再生キュー登録処理を統一化
いくつかある再生キュー登録方法について、登録処理の共通化を行いました。(今までバラバラに実装していたものを統合した感じです)。
登録処理は大まかに分類して、
– 検索画面から登録
– プレイリストを開いて登録
– 再生履歴から登録
– 他アプリから渡された共有メディアを登録
が実装されており、これらを統一した処理で登録されるようにしました。
それに伴い、登録処理の際は全てメッセージが表示されるようになっています(設定でOFFに出来ます)。
再生キュー登録オプション設定を追加
再生キュー登録処理の統一化に伴い、設定画面より各登録処理にオプション設定ができるようにしました。オプションとして登録できるのは
– 追加、更新の選択、または確認表示
– 再生キュー登録済みの内容と重複しているメディアの除外
– 追加されるメディアを対象としたソート(再生キュー登録済みのメディアはソートされません)
– 追加されるメディアを再生(複数追加の場合は、追加されたメディアの先頭が再生)
– メイン画面に戻る(検索画面のみ)
となっています。 また、これらのオプション選択ダイアログを表示させることもできます。ちなみにこのオプション選択、ずいぶん前から検索結果の長押しで表示させる事ができていたのですが、存在が中途半端だったので放置していました。今回改めて実装し直した次第です。
また、検索画面からの登録方法を細かく分類すると、
– 検索メニュー
– 検索結果タップ
– 検索結果長押し
の3種類があり、さらにメニューは3つまで登録できます。 初期状態では、「再生キュー追加」、「再生キュー更新」の2種類で、3つめのメニューは非表示にしてあります。必要に応じて変更・増減させてください。
Bluetooth AVRCP 1.3 による曲名表示対応 (Android 4.3以降)
Bluetoothには、リモート操作を行うためのAVRCPというプロファイルが規定されています。また、このAVRCPにはいくつかバージョンがあり、Ver.1.3よりリモート操作側にメディアの情報を送信できるようになっています。Bluetoothのリモコンに曲名が表示されたりするアレです。
Android 4.3より、このAVRCP1.3による曲名表示に標準対応しています。最近、Bluetoothヘッドセットアダプタ Sony SBH50 を購入したので、正式に対応させてみた次第です。
今までもロック画面の表示設定をONにすると表示されていたと思いますが、きちんと検証したという事で。また、Android 5.0のLollipop以降は実装方法が異なるため、そこは新たに作り直しています。現状、Android 4.3以降であれば表示されるはずです。
ちなみに、Android 4.2以前ではAVRCP 1.3に未対応ですが、端末メーカーが独自に実装している場合があります。自分の所持するXperia UL(Android 4.2.2)で色々試してみたところ、Android標準の音楽プレイヤーや、Walkmanアプリ、Rocket Playerといったいくつかのアプリならリモコン側に曲名が表示されるのは確認しましたが、多くのプレイヤーでは非表示のままでした。自分でもこれを表示させる方法を色々調べてみたのですが、結局よく分かりませんでした。上記で実装した方法はAndroid 4.3以降が対象であるため、Xperiaは何らかの独自実装を行っているものと思われます。
Android標準の音楽プレイヤーのソースコードを弄って確認したのは、MediaPlayerのインスタンスが再生を開始すると曲名が表示されるという事です。それ以外の、外部に曲情報を送信しているものと思しき箇所を片っ端から削除してみましたが、表示に対してはまったく影響を与えませんでした。とにかく、再生を開始した時点で何らかの方法で再生している曲の情報を取得しているものと推測しますが、Medolyで再生している曲を取得させる方法が分かりませんでした。Rokect Playerというアプリで表示できているので、特定のアプリ以外では無理というわけではないと思っているのですが…。
どなたか、これについて情報をお持ちの場合は教えていただけると嬉しいです。また、Xperia以外で、Android 4.3以前にAVRCP 1.3に対応している端末で曲名表示させたいという要望があれば受け付けます。ただし、その実装方法が確実に分かっている場合のみですが。
なお、カスタムOSのCyanogenModをご利用頂いている場合、もしかしたらアーティスト情報の場所にアルバムアーティストが表示されるかもしれません。これは、CyanogenModの挙動なのでご了承ください。アルバムアーティストが存在しない場合は、アーティストが表示されるようにしています。
リモートコントロールを初期状態で有効化
今まで、リモートコントロール設定は初期状態でOFFにしていました。何故ならば、自分は「可能な限り相手の端末に影響を与えたくない」という考え方で作っているからです。
ただ、今回上記のBluetoothリモコンへの曲名表示対応を作っていくにあたり、「やっぱ普通の人には分かりにくいし、めんどいよね」という結論に至り、あっさり宗旨替えです。
というわけで、今回からインストールした時点でロック画面のプレイヤーも占有するし、ヘッドセットのボタンも占有するし、Bluetoothリモコンも占有します(ちなみに、これらの占有処理は一体的な物なので、どれか一つだけOFFにするといった動作は、複雑になりそうなのであまりやりたくないです)。邪魔な人のみOFFにしてください。
Lollipopのプライベートロック画面に表示されない問題修正
Lollipopはマルチユーザによる利用も想定しています。そのため、ロック画面の通知は非表示にしたり、またはプライベートモードで動作させて、通知がある事だけを表示し、内容は非表示にするといった事ができます。
今まで、Medolyの通知はプライベートモードでの動作となっていました(というか、何も設定しないとそうなります)。音楽再生なんてプライベートモードで動作する必要は全く無いので、パブリックモードで動作させ、ロック画面からコントロールが行えるように修正しました。
その他、各種修正
BROADCAST_STICKY 権限要求追加
BROADCAST_STICKYとは、他のアプリにメッセージを送信するための権限です。通常のBROADCASTとは異なり、配信が終了してもメモリ上に残ります。これは、外部のアプリケーションに曲名を通知するために追加しています。
Android の標準音楽アプリは 、再生している曲が変更される度に外部に対して曲名が通知されおり、その際に使用されるのがこの通知方法です。今回、それと同じ通知を外部に対して行うようにしています。比較的多数の音楽プレイヤーが、同様のメッセージを外に投げていると思われます。
世の中には、そのメッセージを受け取って動作するアプリも存在しますので、それが利用できるようになります。未使用の方にとって特にメリットはありませんが、今回ちょっと追加させていただきました。
Ver. 2.0.1
再生終了後に落ちる問題修正
ユーザ様からのエラーレポートから発覚しました。
区間ループを行っている場合、シークバー上のループ区間を示すアイコンの座標計算で0の除算が発生し、再生終了時に落ちる場合があることが分かりましたので、その修正です。
プレイリストの削除時にダイアログが閉じない問題修正
プレイリスト操作で、プレイリストの削除を行うっても、ダイアログが閉じなくなっていたので、その修正です。Ver. 2.0.5で行った再生キュー登録処理の統一化の際に、処理が漏れてしまいました。