Skip to content

Instantly share code, notes, and snippets.

@yukpiz
Last active July 8, 2016 10:24
Show Gist options
  • Save yukpiz/6bc6f936913696f47026 to your computer and use it in GitHub Desktop.
Save yukpiz/6bc6f936913696f47026 to your computer and use it in GitHub Desktop.

Android Mediascan.

目的

Androidファイルシステム上に、アプリケーションでファイルを作成し、 MTP接続されたWindowsのエクスプローラで参照する。

問題

ファイルの作成をしても、Windowsエクスプローラに表示されない。
adb shellやAndroid端末上のエクスプローラでは正常に表示される。
Android端末の再起動を行うと表示される。
ファイルを上書きした際もWindowsエクスプローラでは上書きされていない。

原因

Androidファイルシステム上にファイルを作成・変更した場合、 手動でメディアスキャンを実行しファイル情報データベースの更新が必要。 ファイルを上書きした場合、メディアスキャンを実行しても その変更が反映されないので対策が必要。

解決策

既存ファイルを削除して、一度メディアスキャンを行い、 メディアスキャン完了時にコールバックされるonScanCompletedListener()メソッドで 新規ファイルの作成を行い、再度メディアスキャンを実行する。
  • Mediascan.java
package mediascan.sample;

import java.io.File;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.OnScanCompletedListener;

public class Mediascan {

   private String filePath = Environment.getExternalStorageDirectory().getPath() + "/sample.txt";
   private String[] targetFiles = { filePath };
   private String[] fileType = null;

   public void run() {

      File oldFile = null;

      try {

         //既存ファイルを取得
         oldFile = new File(filePath);
         oldFile.delete();

      } catch (Exception exception) {

         System.out.println(exception.getMessage());
         return;

      }

      //既存ファイルの削除をメディアスキャンにより反映
      MediaScannerConnection.scanFile(this, targetFiles, fileType, new OnScanCompletedListener() {

         @Override
         public void onScanCompleted(String path, Uri uri) {

            //メディアスキャン完了時に呼び出されるコールバックメソッド
            //新規ファイルの生成
            - (省略)

            //新規ファイルの生成をメディアスキャンにより反映
            MediaScannerConnection.scanFile(this, targetFiles, fileType, new OnScanCompletedListener() {

               @Override
               public void onScanCompleted(String path, Uri uri) {

                  //メディアスキャン完了時に呼び出されるコールバックメソッド
                  //完了時の処理
                  - (省略)

               }
            });

         }
      });

   }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment