GPS周り

AndroidGPS周りでハマったので、メモ。

現在地を取得するのに、

参考書とか読むと


LocationManager locationManager = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE);
locationManager.getLastKnownLocation("gps");

とかやってる。
こうすると、過去に取得した位置情報を取得してしまうみたい。
(位置情報が変わったときに対応できない)

getLastKnownLocation()を使う代わりに

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,this);

を使うと、現在地が取得できる。

※LocationListenerインタフェースで定義している
onLocationChanged(Location location)をオーバーライドして任意の
処理を書きましょう。
(locationから値を取り出すなり。。。)

ちなみに自分は
@Override
public void onLocationChanged(Location location) {
myLocate = location;
}
ってしておきました。
※mylocateはLocation型のクラス変数

そんな感じで、GPSはけっこうハマりました。

MyLocationOverlayってクラスを使えば、LocationListnerの実装をしなくても現在地が取得できるみたいです。
それは、またの機会に。

コンテンツプロバイダから連絡を取得する

個人的にアプリ作っていて、連絡先からデータを取得することに
なったので、その方法を記載。

Androidで連絡先から以下のデータを取得する場合
・名前
・電話番号
・メールアドレス

1. コンテンツプロバイダから名前を取得
2. コンテンツプロバイダから電話番号を取得
3. コンテンツプロバイダからメールアドレスを取得

と、段階を踏んで取得することになる。

ソースにすると、こんな感じ

// 出力する値の初期化
String familyNameText = Config.BLANK;
String nameText = Config.BLANK;
String number = Config.BLANK;
String email = Config.BLANK;

ContentResolver resolver = getContentResolver();
Cursor personCursor = resolver.query(
Uri.parse(returnedIntent.getDataString()), null, null, null,
null);
if (personCursor.moveToFirst()) {
// 名前、電話番号の取得
int idIndex = personCursor
.getColumnIndex(ContactsContract.Contacts._ID);
int nameIndex = personCursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

String id = personCursor.getString(idIndex);
String name = personCursor.getString(nameIndex);

// 電話番号の取得
if (Integer
.parseInt(personCursor
.getString(personCursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor phoneCursor = resolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ? ", new String { id }, null);
while (phoneCursor.moveToNext()) {
number = phoneCursor
.getString(phoneCursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA1));
}
phoneCursor.close();
}

// メールアドレスの取得
Cursor mailCursor = resolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ? ",
new String{id}, null);
while(mailCursor.moveToNext()) {
email = mailCursor.getString(mailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA1));
}
mailCursor.close();


個人的にミソなのは、
ContentResolver resolver = getContentResolver();
Cursor personCursor = resolver.query(
Uri.parse(returnedIntent.getDataString()), null, null, null,
null);
の部分。
こうすることで、連絡先で選んだ人のデータを取得できるようになる。

Uri.parseせずにURIを直で書いちゃうと連絡先を全部取得するようになる。
(DBにSELECT文投げるときにWHERE句無いイメージ)


コンテンツプロバイダは難しいね。。。

TitaniumMobileのHelloWorld

TitaniumStudioをインストールしたので、
javaScriptAndroidアプリをガリガリ作るぞー!!
ってなったら、エミュレーターの起動でハマることに…。

エラーの内容は

Timed out waiting for emulator to be ready, you may need to close the emulator and try again

ディレクトリ消したり
http://developer.appcelerator.com/question/83061/build-android-app-stops-at-info-copying-project-resources

adb.exeのプロセス切ったりしたけど、
何がなんでもTitanium MobileでKitchenSinkを起動したい人の覚書(Windows) - Cherenkovの暗中模索にっき

うまくいかない、原因はどこにあるのでしょう。
エミュレータだとけっこう時間かかるって書いてあるから、
純粋にタイムアウトの時間とか変えたらうまくいくかも!?

エミュレータではなく、実機だとうまくいったので、その手順を。

1. プロジェクトを右クリック
2. Install to Android Device をクリック
これだけでいける。
インストールが完了してもアプリが起動されるわけではないので、
アプリを選択する画面へ行く必要あり!

androidSDKのアップデート

毎日書こうと思っていたのに、昨日書かず…。

この前、androidアプリ開発してるときに

ふと、Android SDK 2.3にアップデートしよう!と思い立った。
(今までSDK2.2で開発)

でも、eclipse3.4だとうまくアップデートできなかった。。
eclipseから「ソフトウェアの更新」ってやると、
↓って出る。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
要求を完了できません。 詳細を参照してください。
依存関係違反: [com.android.ide.eclipse.ddms.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
依存関係違反: [com.android.ide.eclipse.traceview.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
依存関係違反: [com.android.ide.eclipse.hierarchyviewer.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
依存関係違反: [com.android.ide.eclipse.adt.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
依存関係違反: [com.android.ide.eclipse.ddms.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
依存関係違反: [com.android.ide.eclipse.traceview.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
依存関係違反: [com.android.ide.eclipse.hierarchyviewer.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
依存関係違反: [com.android.ide.eclipse.adt.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
"org.eclipse.ui 3.5.0" と "org.eclipse.ui [3.4.2.M20090204-0800]" の両方を満たすソリューションが見つかりません。
"org.eclipse.core.runtime 3.5.0" と "org.eclipse.core.runtime [3.4.0.v20080512]" の両方を満たすソリューションが見つかりません。
"org.eclipse.ui 3.5.0" と "org.eclipse.ui [3.4.2.M20090204-0800]" の両方を満たすソリューションが見つかりません。
"org.eclipse.core.runtime 3.5.0" と "org.eclipse.core.runtime [3.4.0.v20080512]" の両方を満たすソリューションが見つかりません。
依存関係違反: [com.android.ide.eclipse.adt.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
依存関係違反: [com.android.ide.eclipse.adt.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
依存関係違反: [com.android.ide.eclipse.traceview.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
依存関係違反: [com.android.ide.eclipse.traceview.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
依存関係違反: [com.android.ide.eclipse.hierarchyviewer.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
依存関係違反: [com.android.ide.eclipse.hierarchyviewer.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
依存関係違反: [com.android.ide.eclipse.ddms.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.ui/3.5.0
依存関係違反: [com.android.ide.eclipse.ddms.feature.group 12.0.0.v201106281929-138431] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.core.runtime/3.5.0
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓


なので、eclipse3.5からアップデートしたら、いけた。
eclipseが古いとダメっぽいのかな?

一息。

とりあえず、TitaniumStudioがインストールできたので、
今日のところは終了!

明日から、アプリ作ってみるか!

何、作ろうかな〜

twitterアプリでも作ってみようかな。
(個人的にOAuthに興味あるだけですがw)

Galaxy実機テスト

Galaxy S2で実機テストをするための手順


実機テストするためのToDo

Android端末側の設定
 [設定]⇒[アプリケーション]⇒提供元不明のアプリ にチェックを入れる
 [設定]⇒[アプリケーション]⇒[開発] USBデバッグ にチェックを入れる
※これで端末側の設定は終了。

◆PC側の設定
 SAMSUNG_USB_Driver_for_Mobile_Phones.exe をインストールする
 ※Kiesというアプリをダウンロードしてれば問題なさそう

eclipseの設定
 デバッグ対象となるプロジェクトを右クリックし、[デバッグ]⇒[デバッグの構成]を選択する。(下記画像が表示される。)

手操作を選択し、デバッグを押す。
⇒端末の選択をするウィンドウが表示されるので、該当する端末を選択し、デバッグする。

TortoiseSVNとeclipseの連携

TortoiseSVNeclipseの連携について、メモメモ。

◆バージョン
TortoiseSVN :1.6.15
Subversion  :1.6.16
eclipse   :3.5.0

TortoiseSVNのインストールはここ↓
TortoiseSVNのインストールと設定

eclipseSubclipseプラグインが必要。
eclipseの[ヘルプ]→[新規ソフトウェアのインストール]

作業対象に
http://subclipse.tigris.org/update_1.6.x』と入力し、追加を押す。
(1.6.xの部分はそのまま。バージョン入れるのかと思って何度か怒られた…w)


subclipseにチェックを入れ、「次へ」ってしてくと、プラグインはインストールが完了する。

SVNリポジトリエクスプローラーで、少しハマったんだよな…。
今回、バージョン管理をローカルでやりたいだけだったんだけど、
なかなかeclipseからアクセスできない。。。

リポジトリーロケーションでURLを指定するとき
『file://localhost/C:/user』
『file://localhost/(リポジトリディレクトリ)』
とかってすると、うまくアクセスできてeclipseでバージョン管理が
できるようになる。
・fileプロトコルでアクセスすること
ディレクトリの区切り文字は『/』
⇒(区切り文字を¥にしちゃって、ハマった…)

まぁ、こんな感じです。