質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2917閲覧

複数ファイルのメディアスキャンについて

Wind

総合スコア442

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/05/07 03:26

編集2018/05/08 04:46

#現象
メディアスキャン実行時、引数のpathsに複数のファイルを入れて実行すると、2個目のファイルでメディアスキャンに失敗してしまいす。
メディアスキャンのコールバックを下記の通り無くしても、やはり2個目のファイルで失敗します。
MediaScannerConnection.scanFile(getApplicationContext(), paths, mimeTypes, null);

とりあえずファイル毎にスキャンを行ってみたところ、メディアスキャンが出来る様になりました。

#知りたいこと
https://qiita.com/wasnot/items/ae1e6282d2c33626b604
>また、複数ファイルも登録できるので便利です。

引数がpathsで調べても複数ファイルも出来ると書いてありますが、
実際に複数ファイルに対してメディアスキャンを行う時は、
ファイル別にメディアスキャンを実行する必要があるのでしょうか?

##メディアスキャンに失敗するソースコード(全体)

Java

1public class MainActivity extends AppCompatActivity { 2 3 private static final int REQUEST_EXTERNAL_STORAGE = 1; 4 private static String[] PERMISSIONS_STORAGE = { 5 Manifest.permission.READ_EXTERNAL_STORAGE, 6 Manifest.permission.WRITE_EXTERNAL_STORAGE 7 }; 8 9 public static void verifyStoragePermissions(Activity activity) { 10 int writePermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 11 int readPermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE); 12 13 if (writePermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED) { 14 ActivityCompat.requestPermissions( 15 activity, 16 PERMISSIONS_STORAGE, 17 REQUEST_EXTERNAL_STORAGE 18 ); 19 } 20 } 21 22 private TextView textView; 23 public static final String TAG = "MainActivity"; 24 private String fileName1 = "test1.txt"; 25 private String fileName2 = "test2.txt"; 26 private String strFileName1 = Environment.getExternalStorageDirectory().getPath() + "/" + fileName1; // 内部ストレージ直下 27 private String strFileName2 = Environment.getExternalStorageDirectory().getPath() + "/" + fileName2; // 内部ストレージ直下 28 29 private int intRaw = 0; 30 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_main); 35 verifyStoragePermissions(this); 36 37 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 画面スリープさせない 38 39 textView = findViewById(R.id.text_view); 40 41 // 保存ボタン 42 Button buttonSave = findViewById(R.id.button_save); 43 buttonSave.setOnClickListener(new View.OnClickListener() { 44 @Override 45 public void onClick(View v) { 46 strFileName1 = Environment.getExternalStorageDirectory().getPath() + "/" + fileName1; // 内部ストレージ直下 47 strFileName2 = Environment.getExternalStorageDirectory().getPath() + "/" + fileName2; // 内部ストレージ直下 48 String text = "test" + intRaw + ","; // 保存する内容 49 50 StringBuilder sb = new StringBuilder(); 51 if(intRaw % 2 == 0) 52 { 53 saveFile(strFileName1, text); 54 sb.append("Saved:").append(intRaw).append("偶数"); 55 }else 56 { 57 saveFile(strFileName2, text); 58 sb.append("Saved:").append(intRaw).append("奇数"); 59 } 60 textView.setText(sb.toString()); 61 62 intRaw++; 63 } 64 }); 65 66 // メディアスキャンボタン 67 Button buttonScan = findViewById(R.id.button_MediaScan); 68 buttonScan.setOnClickListener(new View.OnClickListener(){ 69 @Override 70 public void onClick(View v){ 71 String[] paths = {strFileName1, strFileName2}; 72// String[] paths = {strFileName1}; 73 String[] mimeTypes = {"text/csv"}; 74 MediaScannerConnection.scanFile(getApplicationContext(), paths, mimeTypes, mScanCompletedListner); // メディアスキャン 75 76// paths = new String[] {strFileName2}; 77// MediaScannerConnection.scanFile(getApplicationContext(), paths, mimeTypes, mScanCompletedListner); // メディアスキャン 78 } 79 }); 80 } 81 82 // ファイルを保存 83 private synchronized void saveFile(final String file, final String str) { 84 new Thread(new Runnable() { 85 @Override 86 public void run() { 87 try { 88 FileOutputStream fos = new FileOutputStream(file,true); // 追記 89 OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); 90 BufferedWriter bw = new BufferedWriter(osw); 91 bw.write(str); 92 bw.write("\r\n"); // 改行(Windows用) 93 bw.flush(); 94 bw.close(); 95 Log.i(TAG,"Saved:" + str); 96 97 98 } catch (FileNotFoundException e) { 99 Log.d(TAG, "Error:" + e.toString()); 100 } catch (IOException e) { 101 Log.d(TAG, "Error:" + e.toString()); 102 } 103 } 104 }).start(); 105 } 106 107 // メディアスキャンの結果を通知(確認用) 108 private final MediaScannerConnection.OnScanCompletedListener mScanCompletedListner = new MediaScannerConnection.OnScanCompletedListener() 109 { 110 @Override 111 public void onScanCompleted(String path, Uri uri) 112 { 113 Log.i(TAG,"MediaScan:" + path); 114 } 115 }; 116}

##メディアスキャンに成功するソースコード(メディアスキャン部のみ)

Java

1 // メディアスキャンボタン 2 Button buttonScan = findViewById(R.id.button_MediaScan); 3 buttonScan.setOnClickListener(new View.OnClickListener(){ 4 @Override 5 public void onClick(View v){ 6// String[] paths = {strFileName1, strFileName2}; 7 String[] paths = {strFileName1}; 8 String[] mimeTypes = {"text/csv"}; 9 MediaScannerConnection.scanFile(getApplicationContext(), paths, mimeTypes, mScanCompletedListner); // メディアスキャン 10 11 paths = new String[] {strFileName2}; 12 MediaScannerConnection.scanFile(getApplicationContext(), paths, mimeTypes, mScanCompletedListner); // メディアスキャン 13 } 14 }); 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
mimeTypespathsと同じ数を用意する必要がありました。

Java

1 String[] paths = {strFileName1, strFileName2}; 2 String[] mimeTypes = {"text/csv","text/csv"}; 3 MediaScannerConnection.scanFile(getApplicationContext(), paths, mimeTypes, mScanCompletedListner); // メディアスキャン

投稿2018/05/08 07:07

Wind

総合スコア442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問