タグ別アーカイブ: Android

Android端末とPCとのネットワーク越しのファイルのやりとりについて

最初にどういうお話かを書いておくと、Android側でhttpdやftpdをたてて、PC側からアクセスしてファイルをやりとりする方法についてのお話。

Android端末とPCとでファイルをやりとりするには、手っ取り早いのはUSBで接続してマウントしてやる方法だろう。
んだが、肝心のUSBケーブルが無い場合(つまり自分)、Android端末をWifi接続して、ローカルネットワーク経由でファイル転送をするという方法がほかに思い浮かぶ。
で、その方法をとる場合、スタンダードな手法はPC側で共有フォルダの設定をして、ESファイルエクスプローラで接続してファイルのやりとりをする、というもの。
なんだけど、うちの環境だとうまくいったりいかなかったりする。
理由はよくわからない。
つながるときはつながるんだけど、突然つながらなくなったりする。
それに、ネットワークをスキャンしても、フォルダ共有しているマシンが一部しか見えなかったりする。
というか一台しか見えてない。
うちにはSambaでファイル共有しているLinuxマシンが2台(うち1台は仮想マシン)、Windowsのファイル共有をしているマシンが2台あるんだけども、見えているのはWindowsの1台のみ。
で、見えてるマシンにはアクセスできるときとできないときがあると。

でまあ、PC側の設定は特に変えていないので、ESファイルエクスプローラのバグだろうと思って、ESファイルエクスプローラではないネットワークアクセスできるファイラがないか探して、File Expertってのを使ってみた。
Wifiルータをブリッジモードで使っていたり、仮想マシンが数台動いてたり、接続対象のマシンに仮想NICがあったり(VMWareのせいなんだけどそれは)で、なーんかどっかがばぐってるんだとおもったわけです。
でまあこのFile Expert、とりあえず日本語化されているんだけども、インストールするとアプリ名が「ファイル専門家」とかなって、初回起動時もなんかあまりよくわからないメッセージが出てくるんだけど、とにかくローカライズがひどい。
いや、こんなローカライズするなら英語のままにしてほしいんだが。
たぶん自動翻訳かけてそのままつっこんだ感じ。
直感だと、最初のメッセージが使用情報を提供してくれってやつで、二つ目が寄付してってやつだと思うんだけど、とりあえず両方Noっていうか右側の選択肢選んだらとりあえず起動した。
で、File Expertだと、ESファイルエクスプローラでは見えていなかったLinuxマシンなんかの共有フォルダなんかもちゃんと見えて、目的のフォルダにもアクセスできた。
が、コピペができない。
いや、もしかしたら操作の仕方が間違っているだけで、本当はできるのかもしれないけど、とりあえずやり方がわからない。
たぶんコピーはできてるんだけど、ペーストができない。
さて、困った、別のファイラを試してみるか、と思い始めつつ、ちょこちょこいじっていたら、変なのを見つけた。

File Expertを起動してローカルタブを開くと、下のところに「共有」って項目がある。
それをタップすると、「FTPのサービスを開く」っていうのがある。
試しにたたいてみた。
すると。

FTP共有を準備しました
FTPアドレス:192.168.1.xxx
FTPユーザー名:fe
FTPパスワード:filexpert
FTPポート:2211

というメッセージが。
うお、これ、もしかしてめっちゃ素敵なアプリなんじゃね!?とか感じちゃったわけなんですが、いや、まだ試してみないとわからない、と思いつつ、PC側からFTPクライアントを起動して、指定のアドレス、ポート、ユーザ名、パスワードでアクセスしてみた。
ちょっ、つながったんだけど!!!!

つまり、どういうことかというと、Android端末からPCの共有フォルダにアクセスするのではなく、Android端末側でFTPdをたてて、そこにPCからアクセスするということができてしまったということ。
その発想はなかった。
いや、あったけど、手間がかかりそうだなと思ってあえて探してなかった。
けどこんなに簡単にできちゃうとか。
試しに数百ファイル1Gほどファイル転送したけど、問題なくできてしまった。
ちなみにSDカードでchrootされているようだ。
Windowsからのアクセスだけじゃなくて一応Linuxからアクセスもしてみたけど、当たり前にちゃんとつながった。

~$ ftp
ftp> open 192.168.1.xxx 2211
Connected to 192.168.1.xxx.
220 File Expert FTP Server for Android Froyo Ready
Name (192.168.1.xxx:yyy): fe
331 Send password
Password:
230 Access granted
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT OK
150 Opening ASCII mode data connection for file list
....

出てきたIPアドレス的にローカルネットワーク向けなのは一目瞭然だったので、Wifi接続を切って、3G接続で試してみた。
すると、10.0.0.0/8系なアドレスが出てきた。
あくまでもプライベートアドレス空間に対してFTPdをたてるようだ。
うん、正しい。
まあ、3G接続だとFTPd開けないっていう方がもっといいと思うけど、満足なので求めないよ、うん。

で、共有のところに「Webのサービスを開く」っていうのもある。
そっちもたたいてみる。

共有できた!
ブラウザでやコンピュータでアクセスしてください:http://192.168.1.xxx:8080/
ユーザ名:fe
パスワード:filexpert

と出てきた。
日本語が少々怪しいが、まあ気にしない。
ブラウザでアクセスしてみると、アップローダ形式のウェブサイトが開けた。
SDカードを保存先としたアップローダだ。
少数のファイルを扱うときや、FTPとかようわからんっていう人はこれもいいかもしれない。
もしかしてWebDAV!?とかおもったけどさすがにそれはなかった。
けどFTPが使えるならそれで十分だ。

でまあ、注意事項としては、当たり前だけどこの機能を使うときはクローズドなネットワークに接続しているときに限ること。
あと、できるだけ必要なとき以外は使わないこと。
IDもパスワードもポートも固定だし、ぶっちゃけた話セキュリティ的にはざる。
家でWifi接続してて、共有したまま外に出かけちゃって、 どっかのWifiネットワークにひっかかっちゃったりしたら目も当てられない。
3G接続間のセキュリティもどこまで信用できたものかはわからないわけだし。
そういや昔どっかのプロバイダのユーザ間のネットワークがフラットなホームネットワーク的になってて、そのプロバイダのユーザ間の共有フォルダとか丸見えだったとかいう話を思い出した。
いや、まあ、仮にIDやパスワードなんかが自分で設定できたとしても、そんなサービスをオープンにして外をぶらつくものじゃないわけで。

まとめると、

  • File Expertを使えば、簡単にローカルネットワーク向けにhttpdやftpdをたてることができる
  • 家なんかのクローズドなネットワークにWifi接続してるときに、必要な時間のみの利用に限定すること

ローカライズがひどかったから駄目アプリかと思ったけど神アプリでした本当にありがとうございます。

T-01Cでwifi接続が切れる問題について

Android端末でwifi接続を利用する機会は結構多いと思う。
で、Androidはスリープモードに入ると、wifi接続を切断する仕様になってる。
理由は推測だけど、wifi接続の電力消費が激しいからだと思う。
んで、普通にウェブサイトをまわったりする分には、操作してるときだけwifi接続して、いじってないときは勝手にwifi切ってもらってもかまわないんだけど、時にはスリープモードに入ってもwifi接続を持続してもらいたい場合もある。
たとえば、wifiでローカルネットワークに接続して、ファイル転送を行うような場合。(要するに今回自分がぶちあたったケース)
このケースだと、ファイル転送中にスリープモードに入るとwifi接続が切断されるわけで、ローカルネットワークから切り離されてファイル転送が失敗してしまう。
んだけども、スリープモードに入ってもwifiの接続を持続するようにも設定できる。
本来なら。っていうか、普通のAndroid端末なら。
詳しい話はこちらに書いてあるんだけど、

本来であれば「WiFiのスリープ設定」という設定項目が「ワイヤレス設定>Wi-Fi設定>(MENUボタンから)詳細設定」に存在し、
WiFi接続時に本体がスリープした場合にWiFiを切るか否かをユーザーが設定できるのですが、
その設定がメーカーにより削除されてしまっているため、本体スリープ時にWiFiが強制的に切断されてしまいます。

ということでユーザには設定できないようになっている。

じゃあどうしたらいいのかっていうと、対応方法も同じところに書いてて、

REGPON wifi KeepAlive(マーケットへのリンク)をインストールし、常駐させておくことで、回避することができます。
Wi-Fi切断回避だけが目的であれば、こちらがおすすめです。
  1. AndroidMarketからREGPON wifi KeepAliveをインストールする
  2. アプリを起動し、REGPON wifi KeepAliveにチェックします
  3. REGPON wifi KeepAliveとwifi連動にチェックして常駐させます
  4. インストール直後は手動でサービスを起動する必要があるようですが、その後は連動して起動してくれるようです

とすればいいらしい。

ということでREGPON wifi KeepAliveを入れてみた。
ちょちょいと設定。
んで、 wifi接続してローカルネットワークの共有フォルダにアクセスしてファイル転送してみたところ、スリープモードに入ってもwifi接続が切断されずにうまくいった。
すばらしい。
自分みたいにwifi接続が持続していないと困るっていう人じゃなくても、自宅ではレグポンを充電しながらwifi接続で利用しているっていう人にはおすすめなアプリ。
というのも、wifi接続がスリープで切れるっていうことは、スリープから復帰したときはwifi接続をしなおしに行ってるわけで、その分オーバーヘッドが存在するから。
スリープからの復帰時の動作が快適になる。
ただし、携帯を充電しながら使っているわけじゃない人には、wifi接続を持続させておかなければならない特別な理由が無い限り、お勧めできない。
昔Android端末で、どのプロセスが電力消費量が大きいのか眺めたことがあるけど、wifi接続はかなり大きな割合を占めていたから。(確かスリープ時切断の設定で20%くらい)
ということで、使いどころをわきまえればとてもGJなアプリだと思うのです。