Android端末で書き込んだファイルをPCで読み出すには

2015年8月29日


Android端末でも、パソコンと同じように、端末内部にファイルを作って保存することができます。ところが、そのファイルをUSBケーブルでつないだパソコンから取り出そうとすると、かなりくせのある動作をする様子です。

PCからアクセス可能な場所にファイルを保存するとともに、MediaScannerという仕組みでファイルをスキャンして、MTPでアクセスできるようにして、さらに、USBケーブルを端末につなぎなおして、端末へのMTPのアクセスを最初からやり直す必要があります。

基本的な処理にもかかわらず、意外とこの方法が世間に知られていないようですので、紹介します。

ファイルの保存先は指定方法により異なる

Android端末では、アプリで作ったデータをファイルに保存できます。例えば、テキストエディタのようなアプリを作れば、作ったテキストファイルは、端末内のフラッシュメモリーに保存できます。

ファイルを保存する先のディレクトリは、アプリのプログラムでの指定により、以下に示すように、いくつかのデフォルトの場所から選べるようになっています。

PCからはMTPでアクセスするのが基本

外部ストレージがSDカードなどになっている端末では、端末からファイルを保存した後で、SDカードを取り出してパソコンにセットすれば、端末で保存したファイルをパソコンで利用できます。

外部ストレージが内蔵フラッシュメモリーになっているNexus 7のような端末では、端末をUSBケーブルでパソコンにつなぐと、保存したファイルをパソコンから読み出すことができます。

パソコンと端末を接続するときは、あらかじめ端末の設定で、USBをMTPモードにしておく必要があります。

MTPモードにすると、画像データだけでなく、テキストやPDF、音声データなど、さまざまなファイルをパソコンと端末の間でやりとりできるようになります。

メディアスキャンがPCからのアクセスに必要

Android端末で、後でPCからアクセスしたいファイルを保存するときは、単にFileWriter等でファイルを書き出すだけでは不十分です。

MediaScannerという仕組みを使い、作成したファイルを、システムに「メディア」として認識させる必要があります。

AndroidはWindowsやUbuntuとは違い、ファイルを保存すれば、自然にファイルリストに現れるのではなく、保存したファイルをさらに、システムからスキャンして、外部からアクセスした場合に参照できるように設定してはじめて、パソコンからアクセスできるようになっているのです。

なぜこんなに面倒な仕組みになっているかはよく分かりませんが、仕組みがそうなっている以上、その仕組みに乗せておかないと、意図したとおりに動くアプリは作成できません。困ったことではありますが、使い方は覚えておきたいものです。

Androidで作ったファイルをメディアスキャナでスキャンするときは、次のようにします。

実際に上記の処理でソースコードを書くときは、http://techbooster.org/android/multimedia/5341/などが参考になると思います。

この、メディアスキャンを実行してはじめて、端末を次回パソコンに接続したときから、ファイルをパソコンからアクセスできるようになります。

USBケーブルをつなぎ直さないと正しくアクセスできない

USBケーブルでパソコンとMTPで接続中の状態で、端末を操作して、端末内にファイルを作ると、作ったファイルは、Windows 10のパソコンからはすぐには見えない様子です。

例えば、端末内でテキストファイルを作って保存しても、保存したディレクトリやファイルは、パソコンの画面からは見えません。

USBケーブルをパソコンとつないだ状態で、端末でスクリーンショットを取ると、スクリーンショットのファイル名はすぐに、パソコン側に表示されますが、新しいファイルのサイズが0になってしまっており、開いても何も表示されません。

既にパソコンに認識されているファイルを端末内で書き換えると、USBケーブルをPCから外さないでそのファイルにPCからアクセスすると、ファイルの内容が化けて見える場合もあるようです。

いずれの場合も、いったんUSBケーブルをパソコンから外し、何秒か待ってもう一度接続すると、新しくできたファイルや端末で編集したファイルに、パソコンから正しくアクセスできるようになる様子です。

端末内部でのファイルの変更が、すぐにはPCに反映されないというのは、意外と不便です。

ちなみに、OSをLinux (Ubuntu 14.04)に変更して同じことを試したところ、端末でファイルを作るとすぐに、PCから参照できることが分かりました。

しかし、Linux (Ubuntu 14.04)のMTP接続の機能がやや不完全だったせいか、しばらくアクセスを続けているうちに、Nexus 7の端末がフリーズして、勝手に再起動してしまいました。

この再起動は、強制的に全てのアプリの最適化が実行され、数十分もかかるという凶悪なものでした。

まとめ

ちなみに

なんて、面倒なんでしょうね。

パソコンのアプリであれば、ファイルを保存したら、エクスプローラ等で編集したファイルをすぐに確認できることは、当たり前のことなのですが。

でも、知っていると役に立つことだと思います。


杉原俊雄のホームページAndroidアプリ開発メモ(もくじ)

(c) 2015 Toshio Sugihara. All rights reserved.