[Titanium][Android] 端末のGPS機能で現在位置を取得する
定期的に現在位置を取得する方法を調査したときの覚書。
環境: Titanium SDK 3.2.3.GA, Android
GPSの有効・無効の判定など、KitchenSinkを見るのが分かりやすい。
下記のサンプルコードも参考になった。
私が書いたgeolocation.jsはこんな感じ(一部)
var U = require('/lib/utils');
var _gpsProvider;exports.init = init;
exports.release = release;
/**
* Initialization
*
* @api public
*/
function init() {
if (!U.isAndroid()) {
return;
}//
// "preferredProvider" is deprecated.
// @see http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.Geolocation.Android
////Ti.Geolocation.preferredProvider = 'gps';
//Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_HIGH;
//Ti.Geolocation.distanceFilter = 10;_gpsProvider = Ti.Geolocation.Android.createLocationProvider({
name: Ti.Geolocation.PROVIDER_GPS,
minUpdateTime: 30, // seconds
minUpdateDistance: 100 // meters
});Ti.Geolocation.Android.addLocationProvider(_gpsProvider);
Ti.Geolocation.Android.manualMode = true;// Bind Event
Ti.Geolocation.addEventListener('location', handleLocation);
}
/**
* Release
*
* @api public
*/
function release() {
if (_gpsProvider) {
Ti.Geolocation.Android.removeLocationProvider(_gpsProvider);
Ti.Geolocation.removeEventListener('location', handleLocation);
}
_gpsProvider = null;
}
GPSが無効のときは設定画面を開きたい。
ただKitchenSinkで試すと分かるけど、getCurrentPositionは「位置情報サービス」が有効だとGPSが無効でも正常に動作する。
GPSが有効かどうかは
Ti.Geolocation.addEventListener('location', handleLocation)
の結果を見て判断するしかない。モジュールを作れば別。
サンプルコード
/**
* Show Setting App
*
* @api public
* @param {String} text
*/
function showLocationSetting(text) {
var dialog;dialog = Ti.UI.createAlertDialog({
message: text || L('w_gps_off'),
buttonNames: [L('cancel'),L('settings')],
cancel: 0
});// Add click event.
dialog.addEventListener('click', function(e) {
if (!U.isAndroid() || e.cancel === e.index || e.cancel === true) {
return false;
}
Ti.Android.currentActivity.startActivity(Ti.Android.createIntent({
action: 'android.settings.LOCATION_SOURCE_SETTINGS'
}));
});// Show
dialog.show();
}
位置情報を収集している間はServiceを起動 + Notificationに表示して分かりやすくしてみた。
< Related Posts >