AndroidからWebAPIを使う基本的な流れ

AndroidからWebAPIを使う基本的な流れは

GET POST でHTTP通信

次に、結果データがJSONかxmlなので
これを解析

そして、解析データを元に画面描画などを行う

Androidでは、
HTTP通信などの時間のかかる処理は
通常は非同期、つまりバックグラウンドで行う

なので、メインスレッド
つまり操作画面とは別のスレッドを作って実行させる

メインスレッドは、主にUI描画処理をする
この中で、時間がかかる処理をしてしまうと操作性の悪いもっさりアプリになる

このため別スレッドを作成して
バックグラウンドてやってもらうマルチスレッド構成にする

人手を増やして分担処理みたいなイメージ

AndroidのUI描画処理は
シングルスレッド設計、つまり担当は1人のため
別のスレッドから直接操作することはできない
非同期のスレッドからUI操作しようとすると、エラーになる

目の前の仕事がいっぱいいっぱいなのに
更に仕事追加したら倒れたというようなイメージ

このため、Androidアプリでは
マルチスレッド
つまり大変な仕事は、人手を増やして分担処理することが重要になる

Androidアプリへの広告

広告の実装について
書籍によれば
良かった広告サービス提供開始は
AdMob
http://www.google.co.jp/ads/admob
i-mobile
http://i-mobile.co.jp
AmoAd
http://www.amoad.com
Adiantis
http://www.adlantis.jp
この中で
Adiantis のみ、自社広告
つまり。自分のアプリとか、HPへのリンク広告はできないらしい
この自社広告を使う意味は
じぶんが今アピールしたいアプリや
新しくリリースするアプリとかゲームへユーザを
導入するという仕組み
ただ、アフィリエイトと同じように
広告もメンテは必要
安定して収益がでるようになったら
SSPなどを使うとよいらしい
日本で有名なのは
Ad-stir
http://ja.ad-stir.com
今回の参考書籍

format メソッドと書式指示子

Android位置情報プログラミングで
format メソッドと書式指示子についてかかれていたので
そのときに気がついたことなどのメモ
書式指示子は
%s
これと format() を合わせることで
Web API のリクエストURLを作成できる
format() の書式は
String format(String format, Object args)
パラメータの解説もメモ
string format 書式指示子%sのある文字列(大抵はリクエストURLを代入した定数)
Object args 書式指示子に代入する文字列
今回、参考にした書式では
String.format(
WORDPRESS_URL,
Double.toString(location.getLatitude()), //緯度
Double.toString(location.getLongitude()), //経度
Integer.toString(100000), //範囲
Integer.toString(20) //取得件数
);
となっていたので、おそらくこの代入するものをリクエストパラメータに変更すれば
web api のアプリが作成できると思う
ちなみに 定数の WORDPRESS_URLは
リクエストURL
リクエストURLは、API関連を使うときには必要になるもので
基本的には
URLのあとに?をつけて、あとはパラメータを&でくっつけて記述していく
受け取る方法がXMLにするか、JSONにするかで変わる

HttpClient と HttpURLConnectiion

Android 2.2 以前の場合、HttpClient のほうがバグがすくないので
これを使うのが最適だった
しかし、2.3 以降ではHttpURLConnection のほうが推奨になっている
HttpURLConnection のほうがシンプルでサイズが小さい
そして内部でネットワークの利用を減らし
バッテリー消耗、速度も改善させているため
基本的にこれからのアプリは4以上なのだから
HttpURLConnection を使うとかんがえたほうが正解だと思う

現在地取得は実機でしかできない


Androidアプリ位置情報プログラミング
を参考に、位置情報プログラミングを勉強しています
今回、現在地を取得するというところでエラーがおきたので、
原因を考えてみたら、Android エミュレータでは現在地の取得ができないのが
原因でした
ちなみに、座標を指定することはDDMSでもできるのですが
現在地の取得というようなものに関しては
実機検証が必要となります
実機検証として、一番おすすめなのは
Nexus 7 Wi-Fi Tablet 16GB (Android 4.1 Jelly Bean)-国内正規品

実機検証でないとできないものは
現在地の取得、
NFC
音声入力などがあります
Nexus7 をすすめる理由としては、スマートフォンではないので
なにか不具合がでたとしても
通信手段がなくなってしまうことがないので安心という点
スマートフォンを購入するよりは安い
比較的新しいOSなので、過去の白ロムを購入するよりは
検証する機能が豊富
ということが理由です

Android SDK Manager のバグ

Eclipse で Android プロジェクトを作成する時に
Android Support Library がない
というエラーがでてくるため、
インストールを選ぶものの、何度もでてくるため
一度、パッケージをアンインストールし
再度インストールすることで、このエラーが消えました
最初は、Eclipse のバージョンが対応しなくなったと思ったのですが
原因はAndroid SDK のほうでした

動作確認データ組み込み

周辺ランドマーク情報をアプリ中で作成
して表示
今回も参考書籍はおなじ

このときに
エンティティクラスを作成すると情報作成
管理が便利になる
エンティティークラスは
データーベースに関連付けるクラス
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1478444084
位置情報クラスを作成する
この
ソースは
ダウンロード/sample.zip
の中にある
Android サンプルソース.zip の中にある
ソースはそれを見るとして
見るべきソースのファイル名は
PointInfo.java
作り方は
パッケージ名を右クリック>
new > class でName でファイル名を
PointInfo
とする
拡張子はいらない
できたら
import android.location.Location;
をインポート
基本的にはあとは書籍
どおりにコードを書けばOK
今回作成したクラスはエンティティクラス
生成されたオブジェクトはコンストラクタや
setter
getter
などで変数へアクセスできる
このカプセル化したデータを使ってデータを作成する
カプセル化するデータは
その地点の位置情報
地点の名称
現在地からの距離
となっている
変数と値の関係は
mLocation 位置情報
mTitle 名称
mDistance 現在地からの距離
ここまでできたら
今度は組み込みデータの作成
ソースは
プロジェクトを作成するときに
作成したMainAcitivity へ追記する
サンプルだと
MapPreviewActivity.java
になる
ubuntu なら
gedit でソースファイルを開いて
Alt +s で検索して
ArrayList

Android 2.3.3 google mapアプリのメモ

まずAndroidManifest.xml 編集
<uses-library
android:name=”com.google.android.maps”
android:required=”true”/>
を追記
場所は
</application>
の上
android:name
は追加するライブラリ
android:required=”true”
端末にライブラリがあるかチェックする
uses-libraryタグ

アプリをダウンロードする端末が提供可能ライブラリを宣言
端末にライブラリがないと正しく動作しない
続いてパーミッション設定
必要なのは
android.permission.ACCESS_MOCK_LOCATION
擬似位置情報の使用
android.permission.ACCESS_FINE_LOCATION
位置情報を使用
android.permission.INTERNET
インターネット接続
次にUI作成
これはres/layout/の中で行う
まず、最初に
仕様
必要なのは
現在地の遷移
周辺ランドマーク表示
地図の衛生写真表示切り替え機能
これらはボタンにする
地図が表示され、その上にボタンが並んでいる
というもの
親になるView には
RelativeLayout
をつかう
RelativeLayout
の子ビューは親ビューや子ビューの位置から
設定できる
このときに、位置を具体的に設定しないと
ボタンが3つ重なってしまう
今回はMap に重ねて表示したいから
MapVIew にボタンを重ねる
あと、MapView はjava で制御するから
id をふっておく
これは、html5 と java script のときと同じ
ボタンの文字は
string.xml で設定
あと、見栄えを
よくしたいから
ボタンを揃えた
これは
ボタンの親View にLinearLayout を設定するとできる
仕組みとしては
最初に
RelativeLayout
次に
LinearLayout
その上にボタン
LinearLayout の子View には
android:layout_weight
の設定ができる
これは親レイアウトの余白を自動で埋める設定
配分は
子Viewで余白を設定した比率になる
この仕組みを使うと
ボタンの文字の長さを均一にできる
これには
layout_width を 0 にしておくこと
通常は
文字の大きさ似合わせたり
幅を指定するから意外だけど
今回のやりかたなら
layout_width=0
なら
自動的にサイズ補正してくれるというもの
あと、Android でボタンの設定には
android:onClick
を使う
このパラメータに文字列を指定することで
ボタンがタップされたとき
そのActivity の同じ名前のメソッドが呼び出される
ボタンにはわかりやすい名前をつけておくと
あとあと楽
ボタンに名前をつけるのは
web 関連をやったことがあるなら
button id=”名前”
と同じかんかく

Android で音楽同期

ipod touch などの Apple 製品の場合、
iTunes で音楽を同期すれば問題ないのですが
Android では、どうすればいいのか考えて、検索してみました
以前 ipod touch に Linux から音楽を転送するには
Rhythmbox を使いました
今回は、Android のスマートフォン HTC J での場合です
Androidの楽曲管理をBanshee, Rhythmboxでできるようにする
を参考にさせていただきました
本体に直接音楽を転送するなら、
USBケーブルでつなげて
Rhythmbox で同期すれば簡単にできます
MicroSD に転送するなら
.is_audio_player
という空ファイルを、microSD カードに作成することでできます

Android で YOLP

Yahoo Map を Android で使えるようにできる特集があったので
メモしてみました
YOLPで挑戦~Android向け簡易道のり測定アプリを30分で作る!
JavaScriptからGeolocation APIとして利用するには
YOLP Hacks: APIの使い方 ~現在位置の常時表示/地図をなぞって距離を計測
が参考になります
最近では
Open Street Mapが人気なので、こちらも調べてみます