【XMSO】メディアスキャンをホワイトリスト化してバッテリー消費を抑えるモジュール

「Xposed Media Scanner Optimizer」といいます。

このモジュールを使うと、Androidが行なうメディアスキャンを制御できるようになります。

メディアスキャンとは

Android端末のストレージに音楽ファイルを保存するとプレイヤーアプリで再生できるようになります。
でもたまにプレイヤー側のリストに出てこないことってありませんか?

もしくは、保存済みのファイルのファイル名などを変更したり、ファイラーアプリを使って場所を移動した時にプレイヤーアプリのリストから曲が消えてしまった経験はありませんか?

Androidは「音楽再生できるアプリ」が大量に存在します。
Google Play Musicなどの再生専用機だけを見てもPowerampといったサード製品が存在し、YouTubeなどの動画再生機、着信音再生機でも楽曲を再生することはできます。

楽曲ファイルを端末に追加した時、これら再生できるアプリが個別にその曲をリストに加えに行ったら大量の処理が発生しますよね。

そこでAndroidには「保存されたメディアファイルのプロパティと場所を記憶し、再生機に渡す」中継機能を持ったアプリ「メディアストレージ」が入っています。

画像ファイル、動画ファイルなどもこの「メディアストレージ」を中継して各種ビューワアプリなどに渡されます。

そんな「メディアストレージ」は、定期的に保存場所となるディレクトリやストレージをスキャンし、「更新(新ファイルの追加や既存ファイルの削除、場所移動、データ編集作業が行われたかどうか)」を確認しています。

この動きがいわゆる「メディアスキャン」です。
例えば「写真を消したのにギャラリーから消えていない」といった現象も、「写真を削除する操作」をした後から「ギャラリーアプリを起動」するまでの間に「メディアストレージ」がスキャンを行わなかったため、キャッシュされたデータが残っている場合などに発生するものです。
※ただし画像に限っていえばサムネイルが消されていない場合なども考えられそうです。
※また、クラウドに保存されたデータと同期している場合など、一概に「メディアストレージ」の不具合に起因するとはいえない現象もあります。

基本的には保存されたデータに変更が加わった時点で即時スキャンは行われるはずですが、それとは別に「メディアストレージ」は端末のブート時に全体スキャンを実行しています。

「Xposed Media Scanner Optimizer」を使うとこれを停止することも可能と説明されています。

Xposed Media Scanner Optimizer

このモジュールでは次のことが行えるようです(英文を機械翻訳して意図を読み取っています。間違ってたらごめんなさい)。

・メディアスキャンサービスをフォアグラウンドとして処理させることで、スキャンのタイミングや実行中であることを通知に表示させる
・スキャンにかかった時間なども通知できる?
・スキャン対象を特定のディレクトリに限定できる。これによってスキャン時間が減少し、結果的にバッテリードレインも削減できる
・メディアファイルの種類ごとにスキャンを実行できる
・メディアストレージが保有するデータをクリアできる
・メディアスキャンを手動で開始させる項目がある

以上です。

また該当のフォーラムにはモジュールに書かれた項目の説明も詳細に載っており、

Repetitive Scans … チェックを入れるとブート時のメディアスキャンを停止する。これが最もバッテリードレインが激しいとされ、(推奨)と書かれている

Service Importance … チェックを入れるとメディアスキャンがフォアグラウンドで処理され、経過が通知されるようになる。(推奨)と書かれている

Thread Priority … 処理の優先順位?「それがフォアグラウンドサービスとして実行されている場合でも、バックグラウンドスレッドの優先順位で実行するように強制された場合」にチェックすると良い、というような意味合いと思われる。(推奨)と書かれている

Directories … チェックすると「.scanMedia」ファイルの入っているディレクトリのみをスキャンする(※1で解説)

Media Types … スキャンするメディアの種類を定義できる。例として「.scanMusic」ファイルを置いた場合、音楽ファイルのスキャン時はこのディレクトリのみをスキャンし、全体スキャンは行わない(※2で解説)

Result Notifications … チェックするとスキャン完了後に結果を通知する

Trigger MediaScanner … この項目をタップするとメディアスキャンを開始する

Delete Media Store Contents … 現在メディアストレージが抱えているデータを削除する。保存されているコンテンツは削除されない。設定によってはこの後メディアストレージが全体スキャンを実行するから定義を先に決めてネってことかな?

※1:「.scanMedia」ファイル

メディアスキャン時に除外したいフォルダに置く「.nomedia」の逆バージョンです。
ファイラーアプリでスキャンの対象に含めたいフォルダを開き、「ファイル」を新規作成して名前を「.scanMedia」とするだけでokです。頭にドットを入れるのを忘れずに。

※2:Media Types

メディアの種類ごとにスキャンを実行させることで、(最終的な頻度は上がるかもしれませんが)効率的なメディア運用が可能になるものと思われます。
「.scanMedia」と同じように対象フォルダにファイルを作るだけでよく、

.scanMusic … 音楽ファイルスキャン実施時に対象としたいフォルダに作る
.scanPictures … 画像ファイル以下同文
.scanVideo … 動画ファイル以下同文

全て頭にドットがつきます。
またこれらのファイルについて、「.nomedia」と同じくサブフォルダ内に個別に作る必要はありません。
例として「music」フォルダの直下に1個置いておけば、その下の各アルバムフォルダとその中の音楽ファイルは全て対象に含まれます。

以上です。

ダウンロードおよびサポート

Xposed Media Scanner Optimizer | Xposed Module Repository

[XPOSED] Xposed Media Scanner Optimizer | Xposed General | XDA Forums

1 Comment

コメントを残す

メールアドレスが公開されることはありません。