GPS周り
現在地を取得するのに、
参考書とか読むと
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をインストールしたので、
javaScriptでAndroidアプリをガリガリ作るぞー!!
ってなったら、エミュレーターの起動でハマることに…。
エラーの内容は
↓
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 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が古いとダメっぽいのかな?
Galaxy実機テスト
Galaxy S2で実機テストをするための手順
実機テストするためのToDo
◆Android端末側の設定
[設定]⇒[アプリケーション]⇒提供元不明のアプリ にチェックを入れる
[設定]⇒[アプリケーション]⇒[開発] USBデバッグ にチェックを入れる
※これで端末側の設定は終了。
◆PC側の設定
SAMSUNG_USB_Driver_for_Mobile_Phones.exe をインストールする
※Kiesというアプリをダウンロードしてれば問題なさそう
◆eclipseの設定
デバッグ対象となるプロジェクトを右クリックし、[デバッグ]⇒[デバッグの構成]を選択する。(下記画像が表示される。)
手操作を選択し、デバッグを押す。
⇒端末の選択をするウィンドウが表示されるので、該当する端末を選択し、デバッグする。
TortoiseSVNとeclipseの連携
TortoiseSVNとeclipseの連携について、メモメモ。
◆バージョン
・TortoiseSVN :1.6.15
・Subversion :1.6.16
・eclipse :3.5.0
TortoiseSVNのインストールはここ↓
TortoiseSVNのインストールと設定
eclipseにSubclipseプラグインが必要。
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プロトコルでアクセスすること
・ディレクトリの区切り文字は『/』
⇒(区切り文字を¥にしちゃって、ハマった…)
まぁ、こんな感じです。