Android 既存のファイルシステムからプロジェクトを作る

Android

Android 既存のファイルシステムからプロジェクトを作る

  1. EclipseのPackage Explorerの何もないところを右クリックして、Importをクリックします。
  2. Android → Existing Android Code Into Workspace をクリック

General→File Systemだと 「Source is in the hierarchy of the destination.」となってエラーでインポートできません。

  1. Root Directoryと書いてあるところの右のBrowserをクリックし、インポートしたいディレクトリを選択します。
  2. Invalid project description.となってしまう場合は、すでにEclipseのWork spaceに同じ名前のプロジェクトがあるか、そもそも同じWork spaceからインポートしようとしているというケースです。work spaceとは違う場所からimportしましょう。

Android 改行について

Android

改行が無視される!?

WEBで入力された文字列を渡しAndroidで表示させる、という処理で、
Androidで表示しようとしたら改行が無視された(半角スペースが入っている?)。
以下のように、複数行OKの設定をしないとダメなようですね。

 txtView.setRawInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);

とりあえず、これで出来たので今回はこれで調査終わり。
また他にも出てきたら追記していきます。

Android 実機でデバッグ中偽の位置情報をテストする

Android

Android 実機でデバッグ中偽の位置情報をテストする

この記事を書いている時点の情報なのですが…

Androidで位置情報を利用するアプリを作っている時、悩ましいのがデバッグですよね。
エミュレーターであれば、DDMSからGPSの緯度・経度情報をエミュレーターで送れますが、実機に偽の緯度・経度を送ることはできないようです。

下記のサイトにあるように、ADBとかを利用すると、いかにもできそうですが、

http://stackoverflow.com/questions/2531317/android-mock-location-on-device

 $ telnet localhost 5554
 Android Console: type 'help' for a list of commands
 OK
 geo fix -82.411629 28.054553
 OK

これはエミュレーターの場合だけですから!!残念!
…本当に残念です。

なので、Fake GPS locationのような疑似ロケーションを作るアプリを使うのが手っ取り早いです。

https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=ja

ちなみに、私がやりたかったことは、スリープ時に移動したらどうなるかを試したかったんですね。なので、Fake GPS locationではそれが試せないので、結局うまく試せなかったところです。

何かいいやり方をご存じの方は、教えてください。

よろしくお願いいたします。

Android 外部ストレージのパスの違い

Android

Android 外部ストレージのパスの違い

Androidの外部ストレージのパスの取得方法が色々あるんですが、ちょっとずつ違い、そしてややこしいので、自分でまとめておきます。

初めに、外部ストレージと言っても、必ずやSDカードをさすわけではありません。リムーバブルなメディアをさすわけでもなく、まぁ歴史的な由来から、内部でInternal storageとExternal storageと分かれているようです。(紛らわしいので辞めてほしい(>_<)) じゃあ、違いってなんなの?とお思いでしょうから、下記のサイトの日本語訳ではありますが、載せておきます。 http://developer.android.com/training/basics/data-storage/files.html

  • 内部ストレージ(Internal storageとは)
  1. 常に使える
  2. そのファイルを作ったアプリしかそのファイルにアクセスできない
  3. アプリのアンインストール時にファイルも自動的に削除される
  • 外部ストレージ(Internal storageとは)
  1. 常に使えるとは限らない。ユーザーがUSB経由でストレージとしてパソコンなどからマウントしてたり、スマートフォンから取り外されているかもしれない
  2. ファイルを作ったアプリ以外からアクセスできる
  3. アプリをアンインストールの際は、getExternalFilesDir()で作ったファイル以外は自動的に消去されない

さて、肝心のメソッドの使いわけです。

下記を使うと、デフォルトの外部ストレージ内のアプリ個別のフォルダに入れてくれます。

例:Experia SO-04Dだと
/mnt/sdcard/Android/data/アプリのパッケージ名/files/Pictures/ 
になります。

 
 File file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
 

下記を使うと、デフォルトの外部ストレージのルートが指定されます。

例:Experia SO-04Dだと
/mnt/sdcard/Android/data/アプリのパッケージ名/files/Pictures/ 
になります。

 
 File file = new File(Environment.getExternalStorageDirectory().getPath());

デフォルトの外部ストレージのルートを指定すると、ここにごちゃごちゃファイルがたまってしまうので、避けたほうがよいでしょう…

すみません!時間の都合で使い訳とかいいながら、2つしか紹介できませんでした(つД`)

俺たちの戦いはまだ終わらない!
いつか更新します!!!

Android 位置情報の精度を決める

Android

Android 位置情報の精度を決める

Android SDK 20
APIターゲット 8
で開発しています

Androidの位置情報は色々な形で取得できますが、2012年8月現在、ほぼ下記の2つがメインで取得できます。

  1. GPS
  2. Network(無線LANなどの位置情報)
  1. GPSを取得するのはバッテリーの消費が早いけれども精度が高い、屋内でなかなか取得できない
  2. Networkはバッテリーの消費が遅いけれども精度が低い Networkさえあれば屋内でも取得できる

という特長があります。

位置情報を提供してくれるGPSやNetworkをプロバイダと呼んでいます。

実際にプログラムの中で指定するには、criteriaという仕組みを使います。
criteria って聞きなれない言葉ですよねー。基準、という意味だそうです。

 //バッテリー消費を犠牲にしても、精度が高いものがほしい場合
 mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
 criteria = new Criteria();
 criteria.setAccuracy(Criteria. ACCURACY_FINE  );
 
 //best_providerは大体の場合GPSになります
 String best_provider = mgr.getBestProvider(criteria, true);
 //とにかくバッテリー消費が気になる場合、精度を犠牲にする
 criteria = new Criteria();
 criteria.setAccuracy(Criteria.ACCURACY_COARSE);
 criteria.setPowerRequirement(Criteria.POWER_LOW );
 
 //best_providerは大体の場合Networkになります
 String best_provider = mgr.getBestProvider(criteria, true);

試してみているかぎりではGPSもNetworkもどちらもその時に応じて使えた方がいいと思います。
何も指定しない、というのもできます。

 //その時に応じて、つかんだ位置情報プロバイダを選択
 criteria = new Criteria();
 criteria.setAccuracy(Criteria.NO_REQUIREMENT);
 
 //best_providerは大体の場合Networkになります
 String best_provider = mgr.getBestProvider(criteria, true);

移動しながら利用する場合は、移動したらベストな位置情報プロバイダを選択するのがよいでしょう。

移動しながらベストなプロバイダを切り替えるやり方を、Google のReto Meierさんが、下記に書いています。
ベストプラクティスとして、とても参考になるので、Android位置情報アプリを作る人は読んでみてもよいと思います。
http://android-developers.blogspot.jp/2011/06/deep-dive-into-location.html