Androidでは、全体的に情報がsqlite3のデータベースで管理されているらしく、sqlite3のデータベースファイルは通常、拡張子が.dbになっているため、findで簡単に探すことが出来ます。
そこで、Androidの着信音の設定がどのように行われているのかを調べてみました。
Android全体に関わる設定は以下のデータベースに保存されています。
/data/data/com.android.providers.settings/databases/settings.db
systemというテーブルで、"name"カラムの値がringtoneのものです。デフォルトでは、"content://media/internal/audio/media/21″となっています。
次に、MusicアプリでSDカードイメージ上のMP3ファイルを着信音に設定した場合では、"content://media/external/audio/media/2″となっています。
恐らく、Androidのメディア管理がマルチメディアファイルを管理しているのでしょうから、いかにもmediaっぽい管理用の.dbを探します。
すると以下のフォルダにそれっぽい.dbファイルが見つかります。
Android携帯電話の内蔵フラッシュメモリに記録されているものがinternal、SDカードに保存されているものがexternalという.dbファイルで管理されているようです。
/data/data/com.android.providers.media/databases/
external-df8091c.db
external-1501371c.db
internal.db
external-ef70f1c.db
internal.dbを覗くと、テーブル名がaudio_metaで、_idが21の_dataが、/system/media/audio/ringtones/Ring_Classic_02.oggになっています。
次に日付が一番新しいexternal-ef70f1c.dbを開きます。
やはり同じようにテーブル名がaudio_metaで、_idが2の_dataが、/sdcard/Music/haruhiOP.mp3になっています。ずばりあっています。
そこで、↓のsystemというテーブルで、"name"カラムの値がringtoneの値を、"content://media/external/audio/media/2″から、強制的に、"content://media/internal/audio/media/21″に書き換えます。
/data/data/com.android.providers.settings/databases/settings.db
DDMSからCallしてみます。すると、着信音が変わりません。そこで、エミュレータを再起動します。すると、Android標準のデフォルトの呼び出し音に戻りました。大正解のようです。
また、直接データベースファイルを更新しても反映されないようですね。
ここら辺の情報って公式のドキュメントには全くないっぽいんですよね。androidのクラスを使えば、簡単に変更できるんでしょうけど。
0 件のコメント:
コメントを投稿