SSブログ

Androidアプリ開発 インテント [Androidアプリ AREarthroid]

本日は、Androidアプリネタである。AREarthroidは、「geo:lat,lon」といったインテントに対応している。しかし、プレイスや、ブラウザからAREarthroidに位置情報を送りこんでやることができない。
プレイスでラーメン屋などを検索して「この場所を共有」ってやると、メーラーなどを立ち上げるメニューが表示される。ここにAREarthroidも表示できれば、何かと便利なんじゃないかと思ったわけです。

Androidにはインテントというしくみがあり、インテントでアプリケーション間のデータ通信ができる。
今のところ、AREarthroidは、geo:lat,lonといったURIをインテントで受け取ると、lat,lonで示される位置にマーカーを置くようになっている。
geo:に対応したアプリとしては、他にGoogle MapやGoogle Earthがある。複数の対応アプリがインストールされているときは、どのアプリを起動するのかが選択できる。
geo:のインテントが投げられるとAREarthroidがリストに載る。
プレイスの「この場所を共有」でも何らかのインテントが投げられているはずだが、ここにAREarthroidは載らない。Google Mapも載らないから、きっとgeo:じゃないのだろうな、というあたりを付けて調べてみた。

検索して調べ中...

インテントには、アクションがある。geo:lat,lonの場合、アクションはVIEW。「この場所を共有」の場合は、SENDアクションのインテントが投げられるようである。

アプリがどういったインテントに対応しているのかは、AndroidManifest.xmlで定義することができる。さっそく、SENDアクションのインテントを受けられるように定義を追加してみる。

	<intent-filter>
		<action android:name="android.intent.action.MAIN" />
		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<category android:name="android.intent.category.BROWSABLE" />
		<data android:scheme="geo" />
	</intent-filter>
	<intent-filter>
		<action android:name="android.intent.action.SEND" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:mimeType="text/plain" />
	</intent-filter>


最初のintent-filterは、自動生成で作成されたもの。ラウンチャ用で、これが無いと多分、ラウンチャーから起動できない。
次のintent-filterは、geo:用。アクションはVIEWでスキーマがgeoになっている。
最後のintent-filterが今回追加したもの。アクションをSENDにしている。

これで、onCreateでインテントの内容をログに表示させてみよう。

	        if ( getIntent().getAction().equals(Intent.ACTION_SEND) ){
	        	String url = getIntent().getExtras().getCharSequence(Intent.EXTRA_TEXT).toString();
	        	android.util.Log.v("AREarthActivity", "onCreate intent data=" + url);
	        }


一度、実行して、インストールする。プレイスを立ち上げ、「この場所を共有」してみると...

この場所を共有.png

出た。しかし、名前しかやってこない。

ブラウザの「ページを共有」でも受け取れるらしいので、やってみた。
おお、今度はURLがちゃんと入っている。

プレイスの場合は、getExtras()で取ってくるわけじゃないのか?

さらに調べる。

どうも、メール送信で送られてきているな。メール送信の場合は、EXTRA_SUBJECTとEXTRA_TEXTのエクストラデータが入ってきている。
しかし、住所とか電話番号とかがTEXTに入っていないのだが... もしかすると、添付テキストなのか?添付されたデータはどうやって読み込むのかなぁ... EXTRA_STREAMか。

違った。ログに表示するときに、\nで切られているだけだった。ちゃんとEXTRA_TEXTで取れていた。

	        if ( intent.getAction().equals(Intent.ACTION_SEND) ){
	        	String text = intent.getExtras().getCharSequence(Intent.EXTRA_TEXT).toString();
        		String lines[] = text.split("\n");
	        	for ( String line : lines ){
		        	android.util.Log.v("AREarthActivity", "onCreate intent " + line);
	        	}
	        }


住所が渡ってくるから、これをGeoCoderにかければいいか。m.google.co.jpへのURLも付いている。これみたらいいのか?

HttpURLConnectionを使って、内容を読み込んでみる。うーん、簡単ではないな。

lat:35.123456,lng:140.123456

っていうのが怪しい。JSON形式だなこれは。正規表現使ってマッチングかけて取りだしてみるか。なんか遅そうだけど、やってみるか。

コードの作成中...

よし、できた。これでいけるはず。
できたっぽい。



サイト内を検索

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。



Copyright Atsushi Asai Google+朝井淳
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

イラストで理解 SQL はじめて入門

イラストで理解 SQL はじめて入門

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/05/16
  • メディア: 単行本(ソフトカバー)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/03/03
  • メディア: 単行本(ソフトカバー)

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/05/25
  • メディア: 大型本

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。