先日作成したAndroidにてServiceを用いてMP3をBGMとして再生するプログラムをMP3タグの表示に対応しました。
実はAndroidでMP3タグを取得するのは非常に簡単です。
それはMP3タグが取得できるContentProviderが標準で用意されているからです。
このことを公式のコミュニティで知ってからずっと作りたかったのでした。
使い方:
- sdcardを用意する
- emulator -sdcard イメージファイル名
- adb push mp3ファイル /sdcard
- エミュレータのホーム画面からDev Toolsを起動
- Dev Tools一覧からMedia Scannerを起動
- MP3Playerを起動
これだけです。
種明かし
Androidは起動時に、またはMediaScannerを明に起動するとSDカードの中にあるメディアファイルをスキャンしてsqliteのデータベースに登録してくれます。
/sdcard/androidの中にmedia.dbがあることを確認してください。
このためAndroidアプリ側ではContentProviderを用いてMP3ファイルに直接アクセスすることができます。
これはMP3だけでなく、ビデオファイルもまた別に行なわれます。
このためAndroidはiTunesのような、ファイルパスに依存せずアルバム名やアーティスト名にて管理するアプリケーションを非常に簡単に作ることが可能です。
MP3タグはVer2でないとトラック番号が取れないことが多いです。
また日本語はUTF-8で記述したタグでなければ文字化けします。
iTunesを通常使われているかたですと問題ないですが、Winamp等を使われている方は注意が必要です。
Serviceは謎が多くて疲れました。
ActivityにはあるけれどServiceにはないものが多いので設計も苦労しました。
Serviceにはremoteとlocalがあるのですが、この違いがなんなのかわからずにおりました。
manifestのServiceにprocess属性を書くことが違いであることを先日の勉強会にて始めて知りました。
それまではintentが直接componentを指定するのか、actionを用いるのかで理解しておりました。
アイコンはadamrockerさんのThrowLifeにて知ったhttp://www.iconarchive.com/よりお借りしました。
今回は主に以下のサイトのものを使わせて頂いております。linkwareです。
http://www.rubysoftware.nl/free-toolbar-icon-collection/old.php?lang=en
画面があまりにも寂しいので画像を意味もなく添付しました。
4u様にて拾ったものです。
手抜きのため、ボタンを押しても画面が反応しませんが、ボタンは効いているはずです。
ソースとバイナリはいつものこちらに置いておきます。