改行が無視される!?
WEBで入力された文字列を渡しAndroidで表示させる、という処理で、
Androidで表示しようとしたら改行が無視された(半角スペースが入っている?)。
以下のように、複数行OKの設定をしないとダメなようですね。
txtView.setRawInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
とりあえず、これで出来たので今回はこれで調査終わり。
また他にも出てきたら追記していきます。
WEBで入力された文字列を渡しAndroidで表示させる、という処理で、
Androidで表示しようとしたら改行が無視された(半角スペースが入っている?)。
以下のように、複数行OKの設定をしないとダメなようですね。
txtView.setRawInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
とりあえず、これで出来たので今回はこれで調査終わり。
また他にも出てきたら追記していきます。
この記事を書いている時点の情報なのですが…
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の外部ストレージのパスの取得方法が色々あるんですが、ちょっとずつ違い、そしてややこしいので、自分でまとめておきます。
初めに、外部ストレージと言っても、必ずやSDカードをさすわけではありません。リムーバブルなメディアをさすわけでもなく、まぁ歴史的な由来から、内部でInternal storageとExternal storageと分かれているようです。(紛らわしいので辞めてほしい(>_<)) じゃあ、違いってなんなの?とお思いでしょうから、下記のサイトの日本語訳ではありますが、載せておきます。 http://developer.android.com/training/basics/data-storage/files.html
さて、肝心のメソッドの使いわけです。
下記を使うと、デフォルトの外部ストレージ内のアプリ個別のフォルダに入れてくれます。
例: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 SDK 20
APIターゲット 8
で開発しています
Androidの位置情報は色々な形で取得できますが、2012年8月現在、ほぼ下記の2つがメインで取得できます。
という特長があります。
位置情報を提供してくれる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
Androidの開発をしていて、位置情報のアップデートをする際、
implements LocationListener
をして、ロケーションリスナーなどを登録して
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //中略 mgr = (LocationManager) getSystemService(LOCATION_SERVICE); mgr =.requestLocationUpdates(best, 1500, 1, this); }
@Override protected void onPause() { mgr.removeUpdates(this); super.onPause(); }
として、ロケーションマネージャーを削除するのですが、現在位置情報のアップデートが終わりません。
デバッグしてみて、this.mgr.mListenersの中身を見ると
MyLocationOverlay
とかが登録されているようです。
MyLocationOverlayをnewすると、これも位置情報のアップデートを続けてしまうんですね。
overlay.disableMyLocation(); overlay.disableCompass();
をonPause()などに追加すると、位置情報のアップデートが止まります。