87miles.net

Speed limit 87mph!

Taskerアプリを使用してandroid端末をシェイクしたら現在地情報付きで"帰ります"メッセージを送信する方法

      2016/02/06


Warning: Undefined variable $nlink in /home/yhub/87miles.net/public_html/wp-content/themes/stinger7child/functions.php on line 66

Return home

photo credit: tokyoform via photopin cc

目次

Taskerで"帰ります"メール

以前にandroidのtaskerというアプリを使用して帰りますメールを送信する方法をご紹介しました。

スポンサーリンク

ads

Taskerとは

taskerというアプリは「○○したら△△する」というようにAndroid端末のいろんな操作を自動化してくれるアプリです。
有名な(?)設定としては『自宅にいる時はwi-fiをオンにする』や、『イヤホンを挿したらミュージックアプリを起動する』といったことが自動でできます。

ハングアウトを利用

以前ご紹介したのは端末を振ったら(シェイクしたら)特定の人にハングアウト(Googleチャット)を利用して決まったメッセージを送信するというものでした。
私の場合は、妻に帰りますメッセージを送っていますが、SMSやメールではなくハングアウトを利用するのには理由があります。
まず、電話番号を利用してメッセージを送信するSMSは家族間であれ、有料です。この時点で即却下です。
次の案としてはメールだと思います。私も最初はGmailを利用して毎回送信していたのですが、めんどくさいことこの上ないのに加え、遅延することが結構あり、ひどい時は私は帰っているのにメールはまだ来ていないという状態もありました。
ハングアウトだと今のところ遅延もありませんので、こちらを利用しています。

Taskerでハングアウトを送信するためにはSL4Aというものを利用する必要があります。
詳しくは過去記事をご参照ください。

過去記事

AndroidのTaskerというアプリを使用して、端末を振るとハングアウトで『帰るメッセージ』を決まった相手に送信する方法をご紹介します。 Taskerではショートメッセー

現在地情報を取得

map

photo credit: agoasi via photopin cc

今回は以前の記事に対する追加ですが、ボリュームの関係で別記事にしました。
基本的に仕事から帰る時にメッセージ送信していますし、予定はGoogleカレンダーで共有していますので、"どこから"帰るかというのは妻は把握しているのですが、こちら側はその場のノリで別の場所へ移動したりします。その度にどこにいるのか教えるのは無理です。
ですので、上記の帰りますメッセージに現在地の情報を付加して送信することにします。

座標、住所までは簡単に取れる

色々調べてみましたが、現在地の座標を取得することは簡単です。それを地図表示させても良かったのですが、試していませんが恐らくメッセージ内に地図へのリンクを表示して、受信した側は地図アプリを開く必要があるのではないでしょうか。
ほぼ毎日のことですしそれはイマイチ過ぎます。できればメッセージ内で完結させたいです。
また、住所も取得はできます。しかし住所を言われても一般的には??となるのではないでしょうか?

理想はFaceBook

理想はFaceBookです。FaceBookアプリで現在地の情報を投稿するといい感じに店舗の名前など、誰が見てもわかる情報を表示してくれます。
例えば映画館にいることを投稿してもちゃんと映画館の名前が投稿されます。理想はこのかたちです。

逆ジオコーディング

調べてみたところ、逆ジオコーディングというものを利用すれば座標から住所などの情報を取得できるようです。
信頼性の高そうなものはGoogleMapsAPIやヤフーでもサービスを展開しているようです。
ただし、これらは基本的に住所のみのようです。
ですので、私は以下のサービスを利用することにしました。
逆ジオコーディングAPI

今回は利用していませんが、このようなサービスもあるようです。
HeartRails Express 路線/駅名/最寄駅データサービス
最寄り駅が知りたい時は便利かも知れません。

逆ジオコーディングAPIを利用

内容はリンク先を見てもらえればわかると思いますが、XMLで返ってきます。
私は以下をsendIMupdated.pyに追加して、本文のテキストに文字列連結しています。

# -*- coding:utf-8 -*-
import android
import time
import urllib
import xml.dom.minidom

droid = android.Android()
droid.startLocating()
time.sleep(15)
loc = droid.readLocation().result
if loc == {}:
  loc = droid.getLastKnownLocation().result
if loc != {}:
	try:
		n = loc['gps']
	except KeyError:
		n = loc['network'] 
	la = n['latitude'] 
	lo = n['longitude']
droid.stopLocating()

url = "http://geocode.didit.jp/reverse/?lat="
url = url + str(la)
url = url + "&lon="
url = url + str(lo)

rxml=urllib.urlopen(url).read()
 
dom = xml.dom.minidom.parseString(rxml)
Item = dom.getElementsByTagName('Item')
AddressShort = Item[0].getElementsByTagName('AddressShort')[0].firstChild.data
Station1 = Item[0].getElementsByTagName('Station1')[0].firstChild.data
Landmark1 = Item[0].getElementsByTagName('Landmark1')[0].firstChild.data
Landmark2 = Item[0].getElementsByTagName('Landmark2')[0].firstChild.data

IM_text = u'【住所】' + AddressShort
IM_text = IM_text + "\n" + u'【最寄駅】' + Station1
IM_text = IM_text + "\n" + u'【ランドマーク】' + Landmark1
IM_text = IM_text + "\n" + u'【ランドマーク2】' + Landmark2
message =u'以下の内容で送信しました' + "\n" + IM_text
droid.makeToast(message)

ランドマークでわかりやすいものであれば良いのですが、ちょっと細かすぎて伝わらないようなので、最寄駅も追記しました。
注意点としては5km以内に存在するもののみのようです。

実際に送信すると

ハングアウト

大阪のなんばパークス内のカフェから送信してみました。
全てを総合するとなんばパークスにいるということがわかりますが、送信相手にはそのあたりのアバウトな感じも伝えておいた方が良いかも知れません。
一番感覚的にピンと来るのはやはり最寄駅でしょうか。
使い始めて数日になりますが、今のところ全く違う場所を送信してしまうこともありません。
ちょっと予定と違う場所に移動し、そこから帰る際、イチイチ連絡しなくて済むのでとても便利になりました。
みなさんも試してみてください。

 - Android, LifeHack, PC and InterNet ,