Medoly ver.1.2.0

Medoly – Google Play の Android アプリ

Medoly Ver.1.2.0をリリースしました。
個人的な感覚では1.5.0ぐらいまでバージョンをすっ飛ばしたいところですが、表面上は大して変わり映えしないので1.2.0で。

内部処理の大幅な見直し

今回のバージョンで再生キューの内部的な処理を大幅に見直しました。というか、ほぼ別物です。別物ですが、表面上は特に変わってないと思います。そういう風に作ったので。
今までは再生キューの内容をファイルパスで保持し、アプリ起動時にファイルパスから読み込んでいました。アプリ起動時に進捗ダイアログが表示されるのはそのためでした。ところが、当然読み込みに時間はかかります。
これが問題になるのは、リモートコントローラやウィジェットを利用する場合です。再生ボタンを押すと、その時にアプリが起動して読込処理が走るため、再生キューに多くの曲が登録されているとボタンを押しても反応しない等の問題があったり、よく分からないエラーが発生することがしばしばでした。
そんなわけで、再生キューの内容をSQLiteのテーブルで定義し、そこからCursorLoaderを利用して逐次読み込みすることにしました。アプリの根幹部分をゴッソリ入替えたので、この改造でほぼ1ヶ月ぐらい費やしてます。
そのため、起動時の再生キュー読込処理は無くなりました。その代わり、 端末の性能が低いと再生キューのスクロールが多少もたつく事があるかもしれません。それを気にするほど大量に再生キューを登録する利用をしているかどうかは分かりませんが。

また、編集モードのキュー入替え時に再生キューリストが一瞬だけちらつくのはコレに伴う影響です。従来メモリに保持してたものをテーブルに保持させた結果、書き換え&画面更新で処理が遅れてしまうためです。…もしかしたら何かの解決策があるかもしれませんが、現状はそこまで調べ切れてないため、仕様とさせてください。
あと、再生キュー登録時の進捗バーが無くなったのもとりあえず仕様です。処理が変わったことで以前のような進捗バーを出すことが出来なくなってしまったため、表示をやめました。そもそも、100曲登録する程度なら大した時間はかからないので。1000曲ぐらい登録するとやや時間はかかりますが。頑張れば表示出来ないことは無いですが、それによって登録処理が遅くなっても本末転倒なので…。

ウィジェット追加

表面的に一番大きな変更点は、ついにウィジェットが追加されたこと。とりあえずレイアウト別に2種類あります。サイズが可変(最小サイズは2×1)なので、好みに応じて適当に拡大・縮小してご利用ください。Androidのバージョンによっては変なレイアウトになる可能性もありますが…。

 

ソートの降順対応

 内部処理の大幅な見直しに伴う副作用というか、元々これも視野に入れてたのですが、従来ソートが昇順だけだったのに加え、降順にも対応しました。これは、SQLite テーブルを使用した事によって、その辺の処理が簡単に実装できるようになったので追加しました。

ホームパスの省略表記

ホームパスを設定していた場合、ディレクトリパスの表示を半角チルダ「~」で表示するようにしました。省略しないと文字が長くなりすぎるためです。ホームパス以下でない場合や、上位のディレクトリは省略せずそのまま表示します。

その他

ラベル・メッセージの微調整、表記変更、アルバムアート解像度の修正、歌詞の初期表示で先頭にスクロールしない問題の修正等、細かいのはいくつかあります。
内部処理の大幅な見直しで処理が大きく見直されたので、修正が無意味になったりしたものがあったりして、把握できてない物が多いです。

Medoly ver.1.1.5

Medoly – Google Play の Android アプリ

Medoly Ver.1.1.5をリリースしました。
オマケ機能を追加したので、バージョンを0.0.5飛ばしました。(オマケなので…)

LOOPSTART / LOOPLENGTHによる疑似ループ処理追加(Android 4.1以降)

音楽ファイルにLOOPSTART / LOOPLENGTHというタグが含まれていた場合、ループを行う処理を追加しました。特殊な音楽ファイルなので、普通の人がお目にかかる機会はあまり無いと思います。分かる人にだけ分かっていただければ…。
使い方としては、設定から「タグによるループ制御」をONにして、曲の再生順を単体再生に切り替えると有効になります。ループ可能な曲の場合、メイン画面の「プロパティ」タブにループという項目が表示されます。
なお、この機能は擬似的なもので、ループ時に正しく曲が繋がりません。というのも、単純にシークさせてループさせているためです。シークの指定はミリ秒単位です。正しく曲を繋げるためには、波形データをきちんと繋げて、再生ストリームに流し込んでやる必要があると思いますが、現在のところそれを実現させる上手い方法が思いつきません。音楽ファイルを展開して処理するライブラリをファイル種別毎に用意して、色々やると出来るような気がしますが、面倒臭いし、現状のアプリと互換性がとれるかどうかも分からないので保留。
というわけでその辺は置いておいて、これはオマケ機能として割り切って、ループが多少不格好でも構わないという人(主に私)向けです。その代わり、ループの位置を調整する設定を儲けてありますので、これで多少の差異は吸収できるような気がします、多分。あと、LOOPSTART/LOOPLENGTHタグ以外に、コメントに「LOOPSTART=***」「LOOPLENGTH=***」という内容が含まれていた場合、勝手に読み取ってループ可能なファイルと判定します。なので、Vorbisファイル以外に、MP3やAAC等でも使えます、一応。
なお、ループの開始にはAndroid4.1以降でMediaPlayerクラス追加された、字幕トラック関連のメソッド(addTimedTextSourceや、selectTrack等) を利用しています。字幕の出現イベントで、ループを実行している感じです。この処理、一旦SRT形式の字幕テキスト(ループ情報を書いたテキスト)をファイルとして書き出す必要があります。そんなわけで、一時的(一瞬だけ)テンポラリファイルが外部に書き出されますので、ご了承ください。
そのうちその辺のコード解説とかも書きたいけど、とりあえず後で。

設定画面にループ関連の設定を追加

上記に関連した、ループ関連の設定を設定画面に追加しています。ループのON/OFF切換と、ループ開始位置、ループ終了位置の微調整ができます。

再生キューのメニューを「選択中の曲へ移動」から「自動スクロール」のチェックボックスに変更

元々、設定画面に「キューの自動スクロール」というものがありましたが、これをタブのメニューに移動させました。これは、再生曲に合わせてスクロールさせる/させないを切り替えるものです。再生キューを自分でスクロールさせている時に曲が切り替わると、強制的に曲まで勝手に移動するのが鬱陶しいので、ON/OFFできるように設けてあります。設定画面にあっても使いにくいので、メニューまで移動させました。

メイン画面のタイトルをタップした際の挙動を、再生キューの選択中の曲に移動するように変更

上記変更に合わせ、元々あった「選択中の曲へ移動」という機能は、メイン画面のタイトルをタップさせた際に実行するようにしました。元々、 タイトルをタップさせた際は表示タブへの切り替えでしたが、それはタブをタップすれば済む話なので、少々持て余していました。そんなわけで、機能の置換えです。


画像読み込み処理の変更

サイズの大きな画像を読み込むとアプリが落ちる問題があったので、その対処です。

ソート時に再生位置が追従しない問題を修正

再生キューの先頭の曲を再生している際にソートをかけると、再生中の曲の表示が追従しない問題があったため、修正しました。「<」と「<=」の間違いです…。

プレイリストで重複データが含まれていた場合に、内容とカウントが一致しない問題を修正

プレイリストに重複した曲が存在した場合、検索画面の曲数カウントに齟齬が生じる問題があったので、修正しました。ContentResolver の projectionに「distinct」を追加しただけです。
今回の変更は以上のような感じになります。
いい加減、ウィジェット機能付けないとなぁ…。

Medoly ver.1.1.0 & 1.1.1

Medoly – Google Play の Android アプリ

Medoly Ver.1.1.0及び1.1.1をリリースしました。
バージョンを1.1.10にしようとも思いましたが、機能が追加されたのでバージョンを 0.1あげました。
主な変更点は以下の通り。

終了タイマーの追加

終了タイマーを追加しました。画面右上のメニュー→「終了」を選択するとダイアログが表示されます。
このダイアログで終了時のタイミングを決定します。
任意の項目をチェックし、値を入力した後に「タイマー設定」でタイマーを実行します。再度ダイアログを開き「タイマー解除」を選択すると、設定したタイマーを解除します。再度タイマーを設定すると、以前のタイマーは上書きされます。
また、「すぐに終了」でアプリをそのまま終了します。
終了タイミングは以下の物があります。
  • 再生キュー完了時
    再生キューの再生が最後まで終わった時点で終了します。最後の判定は再生キューの再生済状態と、再生順の設定によります。タイミング最終曲で「先頭に戻る」と設定していた場合も、先頭に戻らず終了します。「1曲のみ」の場合は終了まで到達しませんので、必然的に無効となります。
  • 残り曲数
    設定した残り曲数を再生毎にカウントダウンし、0になった時点で終了します。カウントダウンは曲が再生し終わった段階で行われますので、曲をスキップしたり、再生キューで選択した場合はカウントダウンされません。先に再生キュー完了時の条件に達した場合も終了となります。「1曲のみ」でループする場合もカウントダウンします。
  • 残り時間・終了時刻
    終了時間になった時点で終了します。設定する方法が違うだけで、何れも同じものです。途中で再生が停止しても、タイマーが切れたり終了したりはしません。

大体機能としては以上のような感じです。
ちなみに、1.1.1は1.1.0のバグフィックスです。非常に初歩的なミスにより、時間のタイマーを解除しても終了時間に達した時点でアプリが終了するという問題があったためで…。

Medoly ver.1.0.9

Medoly – Google Play の Android アプリ

Medoly Ver.1.0.9をリリースしました。今回は割と色々。

修正内容

メディア読込み時に進捗ダイアログを表示

メディアの読み込み時に進捗ダイアログを表示するようにしました。具体的には、検索画面からメディアの登録時、起動時の再読込時、プレイリスト読込み時の3点です。起動時以外は進捗バーが出ます。なお、ダイアログ表示中にキャンセルを押すとキャンセル可能です。
今までは、全てのメディアを読み込むまで一切の操作ができなかったため、曲数が多いとアプリが固まってしまう事象への対策です。 ちなみに、再生キューに一気に数百曲とか放り込むような無茶な使い方をするような自分のための機能です。
画面の表示更新とメディアの読込でマルチスレッドで動かす必要があり、これに対応させるために読み込み処理部分を大幅に組み直しました。正直、1.0.8から大分組み直してます。感覚的には1.2か1.3ぐらいでも良いような気がしますが、表面的に目だって異なるのはこのダイアログぐらいなので、1.0.9です。個人的に、バージョンの付け方はユーザーが感じる機能向上に合わせて付けるものと思ってますので…。
恐らく、これに伴って再生キューに2重に登録される 不具合が解消されたと思います。多分そんな気がします。…されてるといいなぁ。
また、この変更によって何かしらの不具合が発生する可能性がありますが、その場合は、ご報告いただけると幸いです。
なお、何となく想像はつくかと思いますが、現在は再生キューの中身を丸ごとアプリで保持してます(サムネイル除く)。本当はSQLiteデータベースを用いて、逐次読み込みで対応させるところだと思いますが、最初に作った時にそこまで考えていなかったので…。この方法なら恐らく、今の起動時の読み込み処理は無くなり、キュー追加も早くなるかもしれません。ただ一方で、再生キューのスクロールが引っかかるような動きになるかもしれません…が、そこまでキューにたくさん曲を入れる人はそんなにいないような気がするので、その辺の影響はあまり考えなくても良いような。
とりあえず、その辺りはまた組み直すつもりですが、今はこのままで。

プレイリストやジャンルを含む検索のエラー対応

検索条件にプレイリストやジャンルが含まれていた場合、検索に失敗してアプリが落ちる場合があった問題を修正。これは、プレイリストやジャンルのキーの列名が「_id」となっており、さらに曲のキーも「_id」となっていたため、これらを組み合わせると列が重複してしまいSQLがエラーを吐くというものです。
これに対し、曲の検索条件に「title_key」キーを使用したり、名前にテーブル名を含めたりして、問題が起きないように修正しました。

ちなみにAndroidのデータベースは、一つの曲が複数のプレイリスト/ジャンルに所属でき、アーティストやアルバム等のプロパティとは処理が少し異なります。それらを上手く処理するために、一部でSQLを直接書いています(本来、プログラムの安全性の観点からあまり好ましくはないのでしょうが…)。その結果、内部ではなかなかに面倒なSQLが組み上がってます。

なお、下記サイトによると、テーブル名が一部異なる端末も世の中には存在するようで、そういった端末では確実にエラーが起きます。もしそのような端末があった場合は御一報ください。(下記の情報はAndroid 2.x端末の話なので、最初から本アプリは動作しません。)

Android携帯に登録されているプレイリストを取得する時の罠 – 理ろぐ

リピート再生時の次へ/前へボタンの挙動変更

リピート再生(単曲再生)している時に、次へ/前へボタンを押した際に、再度同じ曲を再生する動きだったのですが、よく考えたらその動きおかしい…というわけで、次へ/前へを押したら再生キューの次/前の曲を再生するよう変更。ちなみに、再生キューの動きは全部自前で制御してるので、わざわざそういう動きを作ってたということになります。
…あんまりきちんと考えてなかった。

プロパティタブメニューの対象に無い項目を非表示

プロパティのタブを押した際に出る検索メニュー。今までは全部の項目を表示していたのですが、検索対象のメタ情報が存在しない場合は、その項目を表示しないようにしました。そういえば、なんで今までそうしてなかったんだろう。

その他

一部メッセージ変更など。
色々弄ったので細かいの忘れた。

現在把握してる問題

  • Android 4.4 (KitKat)で、スクロールのつまみが表示されない。これはAndroid側の問題臭い。
  • ごく希に、何もしてない時にプロセスが暴走してる事がある模様。再現性がなくて確認できない。多分、上記の読込処理に関連した問題だと思ってる。バックグラウンドのサービスが起動した時に読込処理が走って、何かやってるのかなぁ、と推測。とりあえず、上記に書いた読み込み処理の変更した後で考えることにする。

Medoly ver.1.0.8

Medoly – Google Play の Android アプリ

すぐに直したい部分だったので、またバージョンアップ…。

修正内容

再生停止状態で電話かかってきた時に、再生が再開されてしまう不具合修正

以前からたまに発生していた不具合。アプリを終了した状態でも、電話着信時に再生が開始されてしまうことがあるという恐怖の問題がありました。必ずしも発生するわけではなく(というか、確率は低い)、発生条件が分からず頭を悩ませていたのですが、ようやく大体の原因を特定。
問題のポイントとしては、電話がかかってきた時に再生を停止させる処理。停止してる状態でこの処理が走ると、エラーが発生することがある。このエラーが起きる条件もよく分かっていない(そもそもAndroidの状態がどうなっているのかきちんと分かってない)のですが、データを全て削除したり、プロセスを終了させた後の起動後等に発生しやすい模様。単純なスリープや終了状態ではなく、他の何かがトリガになってるような気がするのだけれど、これがよく分かってない。
で、このエラーが発生すると、MediaPlayerのonErrorイベントが走る。onErrorイベントが走ると、「次の曲を開く」(エラーの曲を読み飛ばす)という処理が走る。その結果、曲が再生されてしまうという感じの流れ。Ver.1.0.2で再生処理を組み替えたので、その際に発生するようになってしまった模様。
対策としては2つ。まず、イベント発生時に電話の状態をチェック(TelephonyManager#getCallState()) し、アイドル状態でなければ再生させないという処理を追加すること。もう一つは、そもそもこのエラーが起きないようにするように、処理を見直すこと。色々見直してみると、エラーのチェックが甘かった…。
これは、単純に自分の技量不足の問題です…。

開発用端末の調達

最近、開発用に1個端末を入手。

SC-02B – Wikipedia

docomo のGalaxy S。3年ぐらい前に発売された、 Android 2.2の頃のスマートフォンが流行り始めた頃の端末。中古で5000円ぐらい。ジャンクならもっと安いかも。

自分はdocomoの回線契約は無いし、そもそもこれは純粋にアップデートするとAndroid 2.3までしか入らない。ところがこの端末、ストレージ容量も多く、今でも色々弄られ続けてる端末なので、これにカスタマイズされたAndroidをインストールする事ができる。自分が入れたのは、CyanogenMod という有名なカスタムOS。現状最新の CyanogenMod 11をインストールし、Android 4.4の環境で動作させている。

これを開発用端末にしてる理由は、
第一に安上がりに最新(or 過去バージョン)のAndroid環境が手に入ること。
第二に、古めの端末で自アプリがサポートしてるAndroidのバージョンが動く中では下限に近いスペックと考えられるため、アプリのベンチマークに適任なこと。
第三にディスプレイが狭いため、画面のレイアウトを考える上で参考になること。
…といった辺りが挙げられる。まぁ正直、一番目の理由が8割ぐらいですが。 元々、ストア配信のバージョンと、開発バージョンでアプリが競合してしまって、開発バージョンを入れるための開発用端末が別途欲しくなったのが発端だったので、動けば何でも良く、安上がりであることが何よりも重要だった、という経緯もあります。

なお、CyanogenMod自体は問題なく動作し、3年前の端末とは思えないほど動作も快適です。重い処理を走らせるとちょっと厳しいかもしれませんが、実用的には問題ないレベル。
ちなみに、Cyanogen Mod自体はサポートも無いし、動作しなくても自分で何とかせざるを得なく、大変面倒なので、メインの端末で使うのはちょっとお勧めしません。

Galaxy SでAndroid 4.4

Medoly ver.1.0.7

Medoly – Google Play の Android アプリ

ちょっと微調整…。
あんまり頻繁にアップデートすると鬱陶しそうなので、今後はちょっと抑えめに。

修正内容

再生中に着信があった場合、着信終了後の再開をオプション化

以前から、停止状態でも電話着信時に再生が開始されてしまうことがあるという問題がありました。着信時に前回再生してた曲が流れ始めるので、うっかり受話ボタンを押そうものなら通話中にバックグラウンドで曲が流れるという、人によっては大変に恐ろしい不具合なのですが、事象の再現性がなく、今ひとつ要因に確信が持てないでいました。これは機種依存の可能性もあり、私の使用しているISW 13HTでしか発生しないかもしれません。
ただ、再生開始のメソッドを呼ぶ場所は限られているので、恐らくここだろう、というかここしかないだろう、という目星はついていました。「受話前に音楽が再生されていた場合は、通話終了後に再生を再開する」という処理を入れていたのですが、この辺のイベントやフラグの処理が想定外の順序で走っているのかもしれません。
少しコードを修正した上で、電話後に再生を再開する/しないの判断はユーザー側に委ねた方が良いという考えもあり、とりあえず受話後に再生を再開する処理をオプション扱いにしました。設定画面で切り替えられます。
これでしばらく様子見ということで。

歌詞の前後に空白を入れるように変更

歌詞を表示させた際、歌詞が画面端に詰まってしまう場合に1行間を開けるようにしました。単に個人的な見やすさの問題です。

Medoly ver.1.0.6 リリース

修正内容

歌詞のオフセット保存機能追加

これは要望が上がったので追加。
再生中に歌詞の表示タイミング(オフセット)を調整することができますが、これを曲毎に毎回リセットせず、保存できるようにしました。ただ、これはズレがある歌詞に対して微調整をするための機能だったので、オプション扱いとします。設定画面でリセットする/しないは切り替えられます。

再生キューのサムネイル作成処理を修正

サムネイルの作成処理を少し見直しました。エラーのサムネイルを読み飛ばすようにしたので、エラーとなるサムネイルが沢山存在する場合に、再生キューのスクロールが高速化されます。…されるはずです。

再生キューのアニメーションスクロールの廃止

Ver. 1.0.2で修正したアニメーションスクロールですが、再生キューに多量の登録があると、アニメーションスクロールがまともに追従しなくなる事がわかったので、中途半端に動くぐらいなら邪魔なのでやめます。スクロール量に応じて切り替える事も考えましたが、基準が分からない上に端末毎に異なる可能性もあるので…。
smoothScrollToPositionFromTopメソッドは、大量のスクロールには全く向かないものでした。もっと細かくクロールさせる用途向けの処理ですね。

メディアスキャン処理の変更

Android 4.4でメディアスキャンがエラーとなっていたので修正。Intent.ACTION_MEDIA_MOUNTEDをsendBroadcastさせていたのですが、これはあまりよろしくないようで…。処理を修正して、MediaScannerConnection#scanFileを実行するようにしました。
 

通知アイコンの表示タイミング変更

これは私の環境だけかもしれませんが、停止時の通知アイコンを表示させていると、アプリを終了させtも無関係なタイミングで通知アイコンが再表示されてしまう問題があったため、通知アイコンを表示させるタイミングを少し調整しました。

アニメーションONの状態で初回タブ切換時に、タブが一緒にアニメーションしてしまう問題修正

アプリ起動時に、初回タブ画面が再生キューの状態からタブを切り替えると、タブ画面ではなくタブウィジェットがタブ画面に引っ張られるようにアニメーションしてしまうという問題がありました。原因がさっぱり分からなかったのですが、tabhostのタブ変更イベント( TabHost.OnTabChangeListener )の設定タイミングを、タブ登録の前に持ってきたところ発生しなくなりました。
操作開始前にTabHost.OnTabChangeListener を1回以上発生させておく必要があるのかなぁ、という予測。

その他

メッセージ等修正。

その他現在認識している問題

 

以下の内容は、現在のところ自分で認識している問題です。原因調査中です。

  • 登録時に二重登録されてしまう場合がある。
  • 使ってないのにバッテリーを異常に消費することがある。
  • 停止状態でも受話時に再生が再開されてしまう。
  • Android 4.4でスクロールつまみが表示されない。Andoroid 4.4のバグっぽい。対応するか否かは考え中。

Medoly ver.1.0.5 リリース

昨日公開したバージョンに速攻でエラーレポートが上がってたので、その修正…。
レポート上げてくれた人、どなたかは存じませんがありがとうございます。

サムネイル生成時にエラーが発生する問題を修正

再生キューのサムネイル生成時に、エラーが発生する場合があったので修正しました。
こちらで再現することができないのですが、AndroidのDBにあるメディア情報と実際のファイル状態に齟齬があると発生するような感じです。とりあえずエラーの発生箇所は分かるので、問題が起きないようにプログラムを変更しました。

Medoly 1.0.2 リリース

Medolyのバージョン1.0.2をリリースしました。今回は以下のような変更があります。

メディアが再生できない問題を修正

音楽ファイルのタグ(メタ情報)の読込み失敗時に、再生その物がに失敗する問題がありました。失敗時は、メタデータの読込みをせずに再生を開始します。こんな所のエラー処理が杜撰だったのは、自分でも流石にどうかと思います。

再生に失敗したメディアが再生キューに存在する際の問題を修正

再生できないメディアが再生キューに登録されていた場合、再生キューの順序制御や停止に問題が発生するので、内部の処理を色々見直しました。 これに伴い、再生キューに関わる色々な問題が修正されています。
ただ、自分が再生キューの状態遷移をきちんと把握しきれてないため、まだちょっと怪しいかもしれません…。

再生失敗したメディアを再生キューから除外するオプションを追加

再生キューの問題に絡み、再生失敗時に再生に失敗したメディアを自動的に再生キューから削除します。
標準では削除しませんが、次に再生順が来た時は自動的に読み飛ばします(再生キューを直接タップすれば再度再生します)。なお、これは再生キューから外れると解除されます。また、アプリを起動した際に再生キューを再読込する場合にも解除されます。(要は、再生キューに保存されたフラグがクリアされた場合。)

再生済み状態が保存されない問題

再生キューの再生済み状態が保存されない場合があったので修正しました。これは、アプリを2回再起動すると発生します。
要因は、起動中の意図しないタイミングで再生済みがクリアされた状態で設定が保存されていたためです。対策としては、起動時に再生済み状態を保存するように修正しました。また、これに伴い全体的に設定の保存タイミングを調整しました。

再生位置を保存

再生位置を1秒毎に保存し、次回起動時に再生位置のリジュームを行うようにしました。今までも、画面を閉じた際や停止時に再生位置を保存していたのですが、これだとバックグラウンド再生時に全く保存されるタイミングが無いという…。適当に実装してたものですが、きちんとレジュームできるように作り直し。

再生キューのスクロールが中途半端に終わる問題修正

再生キューのスクロール量が多いと、最後まで完全にスクロールされない場合がありました。これは、AndroidでsmoothScrollToPositionFromTopを利用すると発生する場合があるそうです。なお、設定でアニメーションを無効にすると、setSelectionFromTopを使用するので、この影響はありません。

Issue 36062 – android – AbsListView.smoothScrollToPositionFromTop does not scroll correctly when position is the next visible item – Android Open Source Project – Issue Tracker – Google Project Hosting
listview – smoothScrollToPosition after notifyDataSetChanged not working in android – Stack Overflow
listview – Android smoothScrollTo not invoking onScrollStateChanged – Stack Overflow

原因はAndroid側の問題のようで、対応策としてはイベントで再スクロールさせています。ただ、これでも、スクロールに失敗したり、スクロールが連続して発生するために妙な動きをする場合があるので、少し様子を見てみます。これがダメなようならアニメーションを完全にカットしてsetSelectionFromTopのみに絞った方が良いかもししれません。個人的に、スクロールアニメーションは、上/下のスクロールが視覚的に認識しやすいので、あまり無くしたくはないのですが…。
これは、将来的なAndroidのバージョンで治る可能性もあります。

自動スクロール設定をONにしていると、項目削除時にスクロールしてしまう問題修正

再生キューを編集モードにした上で、キュー項目を削除すると、選択中メディアに自動的にスクロールする問題を修正しました。
再生キューの内容に変化があった場合に、全てスクロールする処理になっていたため、項目削除時にもスクロールが発生していました。これに対し、スクロールする場所を個別に指定して、発生タイミングを限定しました。

アクションバーのタイトルやアーティストが null になる問題修正

…単にnullチェックを怠っていただけです。タイトルがnullの場合はファイル名を表示、アーティストがnullの場合は何も表示しないように変更しました。

メール送信機能を無効化

元々、問題発生時にエラーをメールで送信してもらう機能をつけていたのですが、Androidアプリには標準でエラーレポート機能が備わっているため、不要なので削除しました。
…単純に標準のエラーレポート機能を知らなかっただけです。初めてアプリ作ったので、この辺の知識が足りてませんでした。すいません…。
ただ、開発用のデバックビルドでは動作するようにしています。開発用なので、普通の人の目に触れることはありません。
なお、実際にエラー発生時はエラーレポートを送信していただけると非常に助かります。

実装してたエラーレポート機能

検索条件の見直し

検索時に、タイトル項目から再検索すると検索結果が正しく反映されない問題を修正しました。

再生停止時に、通知アイコンを表示しないオプションを追加

個人的には、再生停止時に通知バーから再呼び出しが出来るので便利なのですが、鬱陶しいと感じる場合もあると思うので、切り替えられるようにオプションに追加しました。

その他、諸々の修正をしてますが、細かいので省略。というか、忘れました。


今回はそんな感じで。
設定項目を多少いじってるので、設定画面の設定項目も増え画面も間延びして不格好なのですが、余力があればもう少し整理します…。

追記

設定画面が開けない問題があることが分かったので、修正しました…。申し訳ありません。
現在、Ver. 1.0.3となります。

さらに追記

ファイル読込みがエラーとなる問題と、再生順ボタンを押すと落ちる問題を修正しました。
ハッキリ言うと、デバッグ用コードの消し忘れです…。 すいません。