MediaScannerConnection.scanFile(context,
new String[] { uri.getPath() },
new String[] { "image/*" },
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
// Notificationを表示する
notifyDownloadComplete(context, path, uri, sms);
}
});
ところが、MediaProviderのgetType()でIllegalStateExceptionが発生して、Activity Managerがクラッシュしてしまうことが多くて困った。

原因は、MediaScannerConnectionのscanFile()へmimeTypeを指定しているところ。
new String[] { "image/*" },
mimeType判断として、"image/*"と指定して、「何らかの画像」と加えたのが、逆にmimeType判断に時間をかけさせてしまい、IllegalStateException発生の温床にしてしまっていたらしい。
mimeTypeが特定できない場合にスキャンさせる時は、mimeTypeを指定せず、nullを与えて、拡張子から自動的に判断させるようにする方が好ましいようだ。
よって、mimeTypeの指定をnullへ変更。
MediaScannerConnection.scanFile(context,
new String[] { uri.getPath() },
null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
// Notificationを表示する
notifyDownloadComplete(context, path, uri, sms);
}
});
面積や、JPEG、PNGなど種類を変えて、様々な画像のダウンロードを試してみたが、変更後は、IllegalStateExceptionは全く発生しなくなった(^。^)


