スポンサーサイト

  • 2016.01.25 Monday
  • -
  • -
  • -
  • -
  • by スポンサードリンク

一定期間更新がないため広告を表示しています


AndroidのContextメニューの文字や背景の色を変えようとしてひどい目に遭う

愚痴です。

AndroidのContextメニューといいますと、Listviewの項目をロングタップしたらメニューが出るというものです。

元から用意されている便利な機能なのですが、メニューの項目の文字色を変えたりしようとしても基本的には出来ないみたいです。なぜ色を変えたかったかというと自作のアプリで配色を色々いじっていたらコンテキストメニューの文字色が背景と同じ色になってしまって見えなくなる、という現象に遭遇したからでした(=本とか読んで系統立てて勉強していないとこうなる)。

手元の環境ではStyle.xmlでtextColorやらBackgroundやらを指定するとそれに引きずられて変わることもあったのですが、エミュレータと実機で結果が異なったりで、何がなにやら、さっぱりわかりません。どうにも困ったことになりました。
これは、自分のやり方がまずいに違いありません。

さらに調べてみると、StackOverFlowに(英語で)SpannableStringクラス使えばできるよ!、と書いてあったので喜び勇んで試してみたのですが、確かに文字色は変わったのですが・・・コンテキストメニューの項目を選択すると、例外が発生します。これじゃメニューの役に立ちません。

なんかもう、もう調べるの疲れました・・・。

費やした時間でコンテキストメニューっぽいダイアログを自作する方法調べたほうが早かったかも・・・。

 

Androidとジオイド2011 その2


前回の続きです。

だいぶ日が開きましたが、その間に、ある程度動くところまで作ってしまいました。
結果としては、自分の持っているスマートフォンからGPSから得られる標高データのばらつきが激しくジオイド補正って意味あるんかな? と思いました。骨折り損的な。

以下、実際に何をやったか書きます。

まずメッシュデータですが、国土地理院のサイトからまとめてファイルとして手に入ります(※)が、以下のサイトから必要な分だけ取り出したほうが、簡単でした。

http://surveycalc.gsi.go.jp/sokuchi/geoid/calcgh/calcframe.html

※実際に使用する場合は念のため関連の法令などにご注意ください。国土地理院のサイトにも説明があります。

上記サイトで「一括計算」というタブをクリックすると、得たい地点のジオイド高のデータをファイルで一括指定することが出来ます。一括といっても「ここから〜ここまで全部ちょうだい」という指定は出来ず、地点をひとつずつ一行に記述しないといけません。
Eclipse環境に馴らされた体には大変つらいことでしたが、perlの入門サイトを見ながら以下のようなスクリプトをコード補完ののないテキストエディタでこさえました(perl触ったの初めて)

perlはActiveperlだったと思います(何につかったのか、いつインストールしたかも思い出せない・・・)。
 
##ジオイドデータを得るためのinput.datを自動生成するスクリプト

#緯度
$lat=000000.0000;
$start_lat=200000.0000;
$end_lat=500000.0000;
$incre_lat=2000.0000;

#経度
$lon=0000000.0000;
$start_lon=1200000.0000;
$end_lon=1500000.0000;
$incre_lon=2000.0000;

#カウンタ
$counter=0;

for ($lat = $start_lat ; $lat <= $end_lat ; $lat=$lat+$incre_lat)
	{
	for ($lon = $start_lon ; $lon <= $end_lon ; $lon=$lon+$incre_lon)
		{
		$counter++;
		printf("%6.4f %7.4f¥n",$lat,$lon);
		}
	}



※incre_ほにゃららの値を変えると取得するメッシュの精度が変わります。
上記のままだと2万数千行くらいになったかと思います。
 ちなみに3万行を超えるファイルは受け付けられません。

これを実行して得られたテキストファイルをさっきのサイトに放り込むと、緯度/経度/ジオイド高が数万行に
わたって列挙されたファイルが手に入ります。
う〜ん。でかいファイルです。ファイルを見てみるとほとんどの行のジオイド高が-9999.0000とかってなっ
てますね。これらは有効なデータではないということを示しているそうです。さっきのスクリプトだと斜めに
細長い日本全体が収まる矩形のデータを得ようとするのでこうなってしまいます。
なので、意味のない行は全部消します。
あとは、「000.0000」みたいな部分は全部消しました。
そうすると、だいぶファイルも小さくなります。それでもちょっと大きいか・・・。

あとは、GPSから得られた緯度経度を元に、このファイルから該当する地点のジオイド高を検索してきて、GPSから得られた標高から引くとジオイド高での補正は完了です。

ほんで実際に自分のアプリに上記機能を組み込んで試してみたのですが、最初に書いたとおり、同じ場所で何回も測位してみたところ、GPSの返してくる標高があまりにもバラバラ(100m近く違ったりも・・・)なので、それをジオイド高(だいたい30〜40m)で補正する意味あったんかな・・・と徒労感でいっぱいになりました。
 

Androidとジオイド2011

Androidで位置情報を取得するプログラムを作っています。
いろいろ調べておりますと、標高データはそのままではあまり正しくなく、
ジオイド高というもので補正する必要があるとのことでした。

※ジオイド高以前に、GPSで得られる標高は、緯度/経度と比較しても精度が低い
とのことです。
「GLONASS」や「みちびき」を併用した場合は、精度が上がるのかもしれません。

位置情報がわかっているんであれば、GoogleMapなどから標高を取り出せそうなもん
ですし(※)、そのほうが精度が高そうですが、電波の入らない(=インターネットに接続
できない)ところ、登山中などでバッテリ節約のために電波OFFにしておきたい状況
などもあると思われます。登山中なら地形図みろよ、というお話ではありますが。

※やり方は知りません。

そこで、このジオイド補正について調べてみたのですが、「このコードでOK」という
サイトを見つけることが出来なく、仕方なくいろいろ調べて考えた結果、以下のような
方法で出来そうです(未実装なので「出来そう」って書いてます・・・)。

※とはいうものの、ちゃんと探せば、stackoverflowとかに、もっとスマートなやり方
が載っているものと思われます・・・。

まず、ジオイド補正というのは以下のようなことらしいです。

補正前の生データの高度ージオイド高=標高

計算自体は単なる引き算ですが・・・。
で、このジオイド高をどうやって求めるかというと、その場所ごとに異なっているようです。
つまり、日本地図をメッシュに分割して、メッシュごとにジオイド高が割り当てられている
というような配列的なものを用意しないといけないようです。

というわけで、ここから話が面倒になってきます。
要するに、以下のようなことを自分でやらないといけないわけです。

(1)このジオイド高のメッシュデータを手に入れてきて自分のアプリで使いやすいよう
に加工する
(2)位置情報からこのメッシュデータの該当するジオイド高を取り出せるようにしておく

ああ、面倒くさい・・・もうジオイド高は「一律で38mとする」とかでもいいんではないか
と・・・。

一応、メッシュデータを作るところまでの手順はやっ(てしまっ)たので、次回以降に書いてみます。

ISW12HTでS-OFF(Android2.3)で失敗→成功

色々なサイトを参照して私もISW12HT(Wifi運用で電話契約なし)でS-OFFに挑戦してみました。
ほとんどのサイトではAndroid4.03(ICS)にアップデートしたものが紹介されていましたが、当方の事情(自作アプリを当面Android2.3で開発したいため)で、アップデートせずにS-OFFを試みました。
4.03でのアップデートに比べると事例が少ないみたいですので、何かの参考になると思い、私の失敗を紹介します。

<失敗事例>
S-OFFする前に、Android2.3の最新のアップデート(※)を適用しておくこと。

※こちらのau公式サイトを参照ください。
http://www.au.kddi.com/seihin/ichiran/smartphone/up_date/isw12ht/up_date_20120313.html

最新のアップデート適用しないと、何度やってもまったく成功しませんでした。もうあきらめてAndroid4.03にしてからにしようと思い、本体からアップデートかけようとすると、そもそもAndorid2.3の最新状態になっていませんでした。
どちらにせよ、4.03にするには、2.3の最新アップデートを経由しないといけないので、物は試しと、アップデートしたところ、一発でS-OFFに成功しました。

こんなミスをされる方はおられないのかもしれませんがご参考に・・・。

山行記録メモアプリをGoogle Playで公開しました

一昨年からコツコツ作っている山行メモをとるアプリをGoogle Playで公開しました。
たいしたモノではございませんがよかったらお試しください。

こちらです→ Get it on Google Play


Androidあるある。R.javaが再生成されずにはまる

Androidで開発していると、解決策を忘れそうになるころにはまるのが、表題の現象です。
たいていは*.xmlファイルのどこかに問題があるか、Eclipse上で*.xmlにフォーカスを当てた状態で実行してしまって*out.xmlファイルができてしまっているかが原因ですが、今回はそれらに該当せず悩んでしまいました。
生活がバタバタしていて趣味の開発から1年近く離れていたこともあり「いつの間にか何かファイルの置き方とか命名規則とかのお作法が変わったのかしら」とか悩みました。

結論としては原因はこちらでした・・・全然あるあるな原因じゃないし。

http://kokufu.blogspot.jp/2013/05/eclipse-adt-ver-22-rjava.html


Android SQLITEで勝手に元のファイル名に"-shm"やら"-wal"が追加されたファイル名のファイルができていてえらい目にあった

たぶん私のお作法がよろしくなかったのでしょう。
ようやくわりと一般的な機種をデバッグ機にすることができ、ウキウキ気分でプログラムを満喫していたのですが、ソースをまったくいじっていない部分で例外が発生。
調べてみたところ、SQLITEのデータベースの格納先ディレクトリにあるファイルのリストを取得して、全データベースファイルに対して処理を行っていたところで例外になっていることがわかりました。
どうもデータベースファイルのディレクトリに勝手にタイトルのような「元のデータベースファイル名」+"-shm"みたいなファイルがたくさんできていたのでした。
たとえば元のファイル名が "hogehoge"だとすると、それに加えて"hogehoge-shm"とか"hogehoge-wal"といったようなファイルもセット生成されているといったイメージです。

これらがこちらの期待する形式のファイルじゃないので例外になっていたのですね。
Google様によると「これはSQLITEのバージョンアップによるものじゃ。精進せい!」とのこと。

というわけで、「ファイル名に”-wal”やら"-shm"が含まれているファイルは期待する形式のファイルではないので処理をスキップする」という場当たり的な対応で対応しました。近い将来SQLITEの仕様が変わってまた泣きを見ることでしょう。

本当はもっとエレガントな方法があると思われますが、時間が時間なので今日はこれで寝て明日考えることにします。
※SQLITE形式のファイルかどうかを判定するメソッドとかあるかも。

しかし、Google様とEclipse様があって本当によかった。これが90年代初頭なら徹夜で悩んだ末、解決できずにもやもやしたままあきらめたかもしれません。


Android:山行記録アプリを公開しました


サンデープログラマが作った趣味レベルのもので品質は??でありますが、登山用のAndroidアプリ「山行ノート」を以下のページで公開しました。GPSロガーではなく、ノート(手帳)に記録をとる感覚のアプリです。
Google Playには公開していないいわゆる野良アプリですがよかったらお試しください。
なるべく、パーミッションを要求しないつくりにしています。
今後のバージョンアップで過去の記録が読み込めない、といった事態はないようにしたいと考えておりますが、当方の力量不足でそういったこともあるかもしれませんので、「まあ、いいか」という感じで使っていただけますようお願いいたします。

おかしなところなどありましたらお知らせいただけるととても助かります。

山行ノート公開ページ
http://d.hatena.ne.jp/peekatpeak/
http://www49.atwiki.jp/peekatpeak/
※たぶん移転します。→移転しました(1/11追記)。


Androidでプログラム 山行ノート

センスがないので見た目とか機能性はともかく、まあまあ動いてくれるなあ(テスト不足ですが・・・)というものが出来てきました。毎日1時間くらいしか時間が取れないのでコツコツやってます。コツコツなにか続けるのって人生初だったりして・・・。独身の頃だったら平日でも一日8時間くらい投入してしまって生活リズム崩してしまってたろうと思います(わはは)。
エレガントな実装方法が思いつかなくても「動けばいいや」って思っている場合があるのでソースはえらいことになってます。



こんな感じで山行の名前を設定しまして・・・。


こんな感じでメモを取ります。これは六甲山系摩耶山の登山開始地点です。


こちらは山行全体の感想を書いたりします。分類で山域や山行形態なども記入できます(並び替えの要素としても使います)


山行メモ全体。紙のノートと違って新しいものが上に来ます。

(追記)
こちらでひっそり公開中です。
http://www49.atwiki.jp/peekatpeak/pages/1.html 


Android MapView使うときのAPIキーの取得方法

そろそろgoogle mapsの機能を自作プログラムに取り込んでみようかと思い、APIキーの取得というものに挑んでみたがうまくいかず。

APIキー取得サイトでは「MD5」の値を入力するよう促されているのに、keytoolの値はなぜかSHA1となっていた・・・うーむ。原因はこれだろうなあ。

googleで検索してみるとkeytoolの仕様が変わっててデフォルトで出力されるのがSHA1の値になったらしい(Oracle vs GoogleのJAVA訴訟がらみの嫌がらせ・・・?のわけないか)
対処方法はkeytool のオプションに-vを追加してMD5の値も表示させるというものでした。

こちらのページを参考にさせていただきました。 

ちなみにWindowsのコマンドプロンプトに表示された文字列のコピーは[ALT]+[SPACE]で表示されるメニューから「編集」→「範囲指定」→「コピー」とやるとできますよ。
一旦ノートパッド等に貼り付けて内容を整形することをお勧めします。

calendar
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>
sponsored links
好日山荘
さかいや スポーツ
コンパス
selected entries
categories
archives
recent comment
profile
search this site.
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM