Medoly Ver. 3.1.0, 3.1.1, 3.1.2, 3.1.3

2017-12-10 Ver. 3.1.0**

  • Android 8.0 (Oreo) 対応
  • 再生ボタン長押しによる停止予約機能追加
  • いくつかの問題修正 (再生履歴の登録、ウィジェットレイアウト、標準サムネイル読込み、等)

Android 8.0 (Oreo) 対応

本バージョンより、Android 8.0 (Oreo) に対応しました。この前のバージョンでは、通知が正しく動作しなかったり、再生時に変な音が入り込んだり、挙動がおかしくなっていたはずです。
Android 8.0ではアプリのバックグラウンド動作に変更が入り、基本的にバックグラウンドで画面を出さずに動くアプリの動作を抑制する方針になっています。これはバッテリーの抑制や、セキュリティ対策といった面があるようです。アプリを動かす際は基本的に、画面を出すか(これはウィジェット等も含むようです)、通知欄にアイコンを出すか、という選択になります(開発SDKの’バージョンを上げなければ旧来の動作のままになりますが、私はウッカリ上げてしまったもので…。)。

バックグラウンド実行制限 | Android Developers
Android 8.0のNotification Badgesの仕組み – Qiita

音楽再生アプリは、バックグラウンドで動く動作が普通です。そのため、このAndoroid 8.0の仕様にかなり密接に関わります。そのため、通知表示周りをだいぶ色々弄っており、通知の出し方を一通り見直してみました。
その副作用として、前バージョンまで存在していた再生・停止時の通知アイコンのちらつきが解消されています。(これは、コードを作り直してたらそういうやり方が分かった、という話です。)

余談ですが、私が現在メインで使用している端末はAndroid 6.0です。別途タブレットに7.1の物があります。ところが、現状でAndroid 8を手に入れるアテが無いため、Andorid 8の対応は後手にまわる可能性があります。とりあえず、Android 8のエミュレータで動作は確認していますが、もし何かありましたらご連絡いただければ助かります。

再生ボタン長押しによる停止予約機能追加

これはちょっとした新機能です。

メディアの再生中に再生停止ボタンを長押しすると、停止ボタンアイコンが青くなります。この状態の場合、現在再生中のメディアの再生が完了した時に、再生が停止します。停止予約機能と思ってください。メディアを切り替えたり、再生が停止した場合に解除されます。
「今の曲が終わったらちょっと曲を止めたいな」ぐらいの感覚で使うイメージです。

いくつかの問題修正 (再生履歴の登録、ウィジェットレイアウト、標準サムネイル読込み、等)

今回の変更で多数のバグを修正しています。
* コンテンツプロバイダに未登録の曲も再生履歴から再生キューに追加できるようになりました。
* ウィジェットレイアウトが一部崩れていたので修正しました。
* アルバムアートが無い場合に再生キューのサムネイル画像がちらついていた問題を修正しました。
* 出力デバイスダイアログの内容を一部見直しました。

2017-12-12 Ver. 3.1.1

  • 再生終了時の不具合を修正

再生終了時の不具合を修正

再生停止時にアプリが落ちる問題があったので修正しました。

2017-12-17 Ver. 3.1.2

  • 共有向けURIを変更
  • 不具合を修正

共有向けURIを変更

Android 7.0以降では、ストレージのパスを外部のアプリに送る際に制限がつくようになりました。具体的にはfile://のURLは外部アプリに送ることができなくなり、代わりにconotent://を使用するようになります。このcontent://を取得するにはいくつかの方法があるのですが、基本的には「アプリ自身の管理可能なストレージパス」に限定されてしまいます。
ところが、Medoly内部はどうしてもfile://で扱うパスでないと各種操作を行うことができません。そこで、外部アプリにURIを送る際にfile://とcontent://の変換を行うのですが、この時にSDカードのパスを取得できず、SDカードのファイルを扱うためには「一旦自身の管理するパスにファイルをコピーした上で、そのURIをcontent://に変換する」という方法を取らざるを得ませんでした。以前この辺りの対応を行ったのですが、対応が曖昧になっていたところがあります。
ところが、最近色々調べていくうちに、file://のパスをそのままcontent://のパスに変換するという方法があることが分かり、実装してみた次第です。
具体的には、アプリのパスを定義するXMLファイルにfiles-path、cache-path。external-path等があるのですが、そこにroot-pathを設定する、というものです。

fileProvider – Any specific reason to use “root-path”? · Issue #129 · spacecowboy/NoNonsense-FilePicker

この辺はドキュメントに書かれていないので隠し技みたいな感じなのですが、とりあえずAndroid 8でも動いているようなので、一応有効なようです。ただあまり推奨されるやり方ではなさそうなので、いつ使えなくなるかは知りません。

不具合を修正

プロパティ情報に歌詞が含まれていなかったため、修正しました。

2017-12-21 Ver. 3.1.3 (2017-12-21 追記)

  • サムネイルのエラーを修正

サムネイルのエラーを修正

サムネイルを表示する際にエラーで落ちる場合がある問題を修正しました。