Android Media Scannerのスキャンパスを修正します.
http://my.unix-center.net/~シモンガイfu/?p=549
Androidに詳しい人は知っていますが、Android Media ScannerはSDカードのメディアファイルだけをスキャンします.そのスキャンのポリシーは、「Android Media Scaner Process」を参照してください.もし私達のハードウエアのプラットフォームの上でSDカードの溝を提供していないならば、まさかAndroidはメディアのファイルに対して放送することができませんでしたか?もちろんそうではないです.そうでないとAndroidシステムは完全なFrame ebookにならないです.この文章は本人の経験と合わせて紹介します.マルチメディアファイルのスキャンパスをどうやって修正しますか?
「Android Media Scanner Process」の紹介によると、Android scannerはメディアをスキャンして完成した後、メディアファイルをデータベースに保存し、MediaProviderによって上位のアプリケーションにサービスを提供することが分かります.
Media scannerのコードを調べたところ、彼のスキャン経路はandroid.os.Evironment.EXTERNAL_であることが分かりました.STORAGE_DIRECTORY.この変数ファイルの位置を指定します.
次はこのファイルが必ず存在することを保証します.私達はinit.rcファイルを修正したいです.以下の定義を追加します.
また、どうやってMedia Scannerを触発しますか?『Android Media Scanner Process』の紹介によると、ACT ION_BOOT_COMPLETED、ACTION_MEDIA_MOUNTED、ACTION_MEDIA_SCANNER_SCAN_FILEメッセージはスキャンが行われます.以前はSDカードをスキャンしていましたが、SDカードmountの場合はAndroidシステムにACT ION_uがあります.MEDIA_MOUNTEDメッセージは、メディアファイルのスキャンを開始することをお知らせします.しかし、私たちの/externalディレクトリが修正されたら、Android media scannerにスキャンするように通知しますか?一つの方法は再起動です.喜んでする人はいません.もう一つの方法は、menu->dev tools->Media Scanを実行してスキャンすることです.まだカタログを修正してから自動スキャンする方法がありません.いいアイデアがあれば、メッセージをください.
以上のステップにより、Androidの/externalディレクトリにメディアファイルを格納し、musicアプリケーションによって再生することができる.もちろん完璧ではないところもあります.皆様のご叱正を歓迎します.
補充(2010-9-20)
なぜAndroidシステムが自動的にMediaScannerを起動してファイルをスキャンしますか?Media Scanner Receiverのソースコードの発見を研究します.
システムにSDカードがあると、システム起動時にACTION_uが受信できます.MEDIA_MOUNTEDメッセージとACTION_BOOT_COMPLETEDメッセージの場合、システムは起動時にメディアファイルをスキャンします.SDカードファイルが修正された場合(例えば、データ線を使ってPCに接続する)も、ACT ION_uが一般的です.MEDIA_MOUNTEDニュースが掲載されました.このようにしてメディアデータをリアルタイムで更新することもできる.
しかし、上には本当のSDカードがありません.メモリのディレクトリを拡張メモリに設定します.私たちは永遠にACT IONを受けません.MEDIA_MOUNTEDメッセージは、外部メモリのメディアファイルを自動的にスキャンしません.なぜMenu->dev tools->Media Scanを実行すれば、外部メモリのデータをスキャンできますか?このコードの実現は、ファイルDevelopment\src\com\android\development\Media Scanner Activity.javaにあります.
Androidに詳しい人は知っていますが、Android Media ScannerはSDカードのメディアファイルだけをスキャンします.そのスキャンのポリシーは、「Android Media Scaner Process」を参照してください.もし私達のハードウエアのプラットフォームの上でSDカードの溝を提供していないならば、まさかAndroidはメディアのファイルに対して放送することができませんでしたか?もちろんそうではないです.そうでないとAndroidシステムは完全なFrame ebookにならないです.この文章は本人の経験と合わせて紹介します.マルチメディアファイルのスキャンパスをどうやって修正しますか?
「Android Media Scanner Process」の紹介によると、Android scannerはメディアをスキャンして完成した後、メディアファイルをデータベースに保存し、MediaProviderによって上位のアプリケーションにサービスを提供することが分かります.
Media scannerのコードを調べたところ、彼のスキャン経路はandroid.os.Evironment.EXTERNAL_であることが分かりました.STORAGE_DIRECTORY.この変数ファイルの位置を指定します.
frameworks/base/core/java/android/os/Environment.java
デフォルトでは、Androidは/sddiskディレクトリを検索します. private static final File EXTERNAL_STORAGE_DIRECTORY
= getDirectory("EXTERNAL_STORAGE", "/sddisk");
独自の経路を検索するために、変数の定義を変更し、スキャン/externalディレクトリに追加します.コードの修正は以下の通りです. private static final File EXTERNAL_STORAGE_DIRECTORY
= getDirectory("EXTERNAL_STORAGE", "/external");
このようにAndroid Media Scannerはメディアファイルを検索するために/externalディレクトリを検索します.次はこのファイルが必ず存在することを保証します.私達はinit.rcファイルを修正したいです.以下の定義を追加します.
mkdir /external 0777 system system
このように起動時に、もし/externalディレクトリが存在しないなら、作成します.既に存在しているなら、何のアクションもありません.また、どうやってMedia Scannerを触発しますか?『Android Media Scanner Process』の紹介によると、ACT ION_BOOT_COMPLETED、ACTION_MEDIA_MOUNTED、ACTION_MEDIA_SCANNER_SCAN_FILEメッセージはスキャンが行われます.以前はSDカードをスキャンしていましたが、SDカードmountの場合はAndroidシステムにACT ION_uがあります.MEDIA_MOUNTEDメッセージは、メディアファイルのスキャンを開始することをお知らせします.しかし、私たちの/externalディレクトリが修正されたら、Android media scannerにスキャンするように通知しますか?一つの方法は再起動です.喜んでする人はいません.もう一つの方法は、menu->dev tools->Media Scanを実行してスキャンすることです.まだカタログを修正してから自動スキャンする方法がありません.いいアイデアがあれば、メッセージをください.
以上のステップにより、Androidの/externalディレクトリにメディアファイルを格納し、musicアプリケーションによって再生することができる.もちろん完璧ではないところもあります.皆様のご叱正を歓迎します.
補充(2010-9-20)
なぜAndroidシステムが自動的にMediaScannerを起動してファイルをスキャンしますか?Media Scanner Receiverのソースコードの発見を研究します.
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Uri uri = intent.getData();
String externalStoragePath = Environment.getExternalStorageDirectory().getPath();
if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
// scan internal storage
scan(context, MediaProvider.INTERNAL_VOLUME);
} else {
if (uri.getScheme().equals("file")) {
// handle intents related to external storage
String path = uri.getPath();
if (action.equals(Intent.ACTION_MEDIA_MOUNTED) &&
externalStoragePath.equals(path)) {
scan(context, MediaProvider.EXTERNAL_VOLUME);
} else if (action.equals(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) &&
path != null && path.startsWith(externalStoragePath + "/")) {
scanFile(context, path);
}
}
}
}
ACTION_を受け取っていることに気づきました.BOOT_COMPLETEDメッセージの場合、Androidシステムはメモリ中のメディアファイルをスキャンします.システムがACTION_uを受信するとMEDIA_MOUNTEDはシステムの拡張メモリ(一般的にはSDカード)をスキャンします.システムにSDカードがあると、システム起動時にACTION_uが受信できます.MEDIA_MOUNTEDメッセージとACTION_BOOT_COMPLETEDメッセージの場合、システムは起動時にメディアファイルをスキャンします.SDカードファイルが修正された場合(例えば、データ線を使ってPCに接続する)も、ACT ION_uが一般的です.MEDIA_MOUNTEDニュースが掲載されました.このようにしてメディアデータをリアルタイムで更新することもできる.
しかし、上には本当のSDカードがありません.メモリのディレクトリを拡張メモリに設定します.私たちは永遠にACT IONを受けません.MEDIA_MOUNTEDメッセージは、外部メモリのメディアファイルを自動的にスキャンしません.なぜMenu->dev tools->Media Scanを実行すれば、外部メモリのデータをスキャンできますか?このコードの実現は、ファイルDevelopment\src\com\android\development\Media Scanner Activity.javaにあります.
@Override
public void onResume() {
super.onResume();
........
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
........
}
この中でACTION_uが放送されていることが分かります.MEDIA_MOUNTEDメッセージは、MediaScanner Receiverが外部メモリのメディアファイルをスキャンします.