Flex、AIR、Java、Androidなど

Posts Tagged ‘Google App Engine

日本語はこちら

※Screen Resolution 480*320(T-moblie G1, Dream, Hero, etc)

※Screen Resolution800*480(SmartQ5 etc)
This application shows photo slide show like digital photo frame provided by Flickr. I made it to turn SmartQ5 that will be shipped within Japan with Android OS installed.

Androidに標準でインストールされているギャラリーは画像を見るだけでなく、他のアプリケーションが画像を必要とする時にIntentにより起動され、画像を渡したり、Intentに仕込まれたパラメータによって縦横比やサイズを指定して切り抜いた後、返したりできます。
そこでAndroidならではと思いつき、SDカードに登録されている画像と同じようにFlickrにアップロードされている画像を他のアプリに渡したり、切り抜きが必要な場合には切り抜き用ウィンドウを利用して加工した後返したりできるアプリを作りました。
とりあえず電話帳に画像を登録する時や、Gmailに添付ファイルとして画像を選択するような時に使えるかと思います。
図解できればいいのですがセンスがないのでやめときます。
要は、
1) Intent.ACTION_GET_CONTENTを横取りして、画像をSDから選ぶかFlickrから選ぶかユーザーに選択させる
2) SDを選ぶと標準のギャラリーに移動。Flickrから選びたいときは検索をかける
3) 検索結果はWebViewに表示。
4) 欲しいのがあればタップすると画像を選択するか、ダウンロードのみ行うか、クリップボードにタイトルやURLをコピーするかなど選べます。ダウンロード完了後は起動されたIntentに仕込まれたパラメータによりそのままのサイズで返すか、縦横比やサイズが指定された場合はそれをもとに画像切り抜きウィンドウを表示。切り抜き完了後、データを返す。
という感じです。
また、GET_CONTENTに反応するだけでなく通常のギャラリー&写真ダウンローダーとしても機能します。
開発者の方へ。
Intentを公開しますのでお好きにご利用ください。ユーザーに画像を選択させ、それを指定したサイズで自分のアプリに引っ張ってくることが可能になります。
起動したい時は、
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setComponent(new ComponentName("biz.stachibana.flickr.picker","biz.stachibana.flickr.picker.InitialActivity"));
が必須です。
切り抜きをしてから返して欲しいときは、上記に加え
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);
intent.putExtra("return-data", true);
こういう感じで。
例外は省きますが、ActivityNotFoundExceptionをキャッチした時はコンポーネントネームを外してAction.GET_CONTENTのみをつけてやれば標準のギャラリーが処理を行うことになります。戻り値の型は合わせてありますのでPhoto Gallery PlusがインストールされていなくてもSDの中からでしたら画像を引っ張れます。
帰ってきた時ですが、切り抜き無しの時は以下の様にして取れます。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode)
{
[...]

コメントは受け付けていません。

私が最初にAndroid用に作ってみたアプリが2chのまとめブログのまとめアプリだったのですが、これを改良したものをAndroid Marketに公開しました。
まとめたRSSを表示するだけなら他のサイトをブラウザで見るのと大して変わらないのでアプリにする必要は全くないと思っていましたが、WebViewでUserAgentが偽装できるようになったらしいのでそれと組み合わせてアプリ化して公開しました。
設定で切り替えできますが、デフォルトではURLを内部ぼブラウザで開くようにしてありますので、FC2ブログ等UserAgentのみで表示するページを振り分けているブログでしたら携帯用に最適化されたレイアウトで見ることができます。
また、このブラウザはIntentを聞くようにしてありますので、
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW).setData(Uri.parse(“http://hoge”));
startActivity(intent);
のような形でIntentが発行されるとドロイドあんてな内部ブラウザでリンクを開くこともできます。
使い道は分からないのですが、最近こういう手法が流行っているようなのでやってみました(^^)
フィードに関してですが、これまでは取得、編集、生成全てPerlで書いたのをサーバーのcronで走らせていましたが、今回Google App Engine for Java完結できるようにやってみました。
今のところ問題ありませんし、cronも含め無料でできるのはすごいですね。開発環境はeclipse使えば快適な環境を作れますし、eclipseからプロジェクトを右クリックするだけでデプロイできます。
Perlの場合は何かしようと思ってもCPANからモジュールを入れないとできなかったりするため困ることもあったのですが、App Engineを使える場合は適当なライブラリをフォルダに放り込むだけでいいので楽ですね。
他にもレンタルしているサーバーに置いているスクリプトはたくさんありますが、こちらに関しても移行を進めていこうと思います。

Javaのバージョンは未確認なのですが、Windowsで問題なく動いていたプロジェクトをMacで同じようにデバッグしようとすると以下のようなエラーが。
com.google.apphosting.utils.jetty.JettyLogger warn
警告: failed com.google.apphosting.utils.jetty.DevAppEngineWebAppContext@307ce2{/,/Hoge/hoge/war}
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:113)
at org.mortbay.xml.XmlParser.(XmlParser.java:69)
at org.mortbay.jetty.webapp.WebXmlConfiguration.webXmlParser(WebXmlConfiguration.java:83)
at org.mortbay.jetty.webapp.WebXmlConfiguration.(WebXmlConfiguration.java:78)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at org.mortbay.jetty.webapp.WebAppContext.loadConfigurations(WebAppContext.java:838)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:417)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at org.mortbay.jetty.Server.doStart(Server.java:217)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86)
at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:365)
at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590)
at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)
探すとありました。
- An error like this:
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl
not found
at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:93)
[...]

コメントは受け付けていません。

私のようにファイルシステムの同期をDropbox等で取っていると例えば自宅のMacと会社のWinで同じプロジェクトをいじりたい時、既存のファイルからプロジェクトを生成したくなる時がよくあります。
そういった時、Androidのプロジェクトだとeclipse内にソースからプロジェクトを作れますが、GAEの場合はそういう項目がありません。
また、せっかくファイルの同期を行うのですから同じディレクトリをすでにプロジェクトはワークスペースに存在しているため、そこの同じ名前でプロジェクトを作成することもできません。
結構イライラしたのですが解決したので整理しつつメモ。
1) Dropbox等で常に複数のPCでeclipseが使うワークスペース内のファイルが同期されている状態
2) 会社のWinでeclipseからGAEプロジェクトを新規に作成
3) 帰宅後、Macのeclipseが使うワークスペースにも会社のWinで編集したプロジェクトが保存されている
4) Macのeclipseでも同じディレクトリを使って作業したい、ので同ディレクトリをeclipseに認識させたい
5) メニュー > インポート > 一般 > 既存プロジェクトをワークスペースへ > ルート・ディレクトリーの選択
これで既にワークスペース内の同名のプロジェクトをeclipseに認識させることができますので、後は弄るたびに同期されうれしいです。
cronもできるようなのでこれまでに書いてきたPerlのスクリプトをGAE+Javaに移行させようとやっているのですが相変わらず色々めんどいですねえ。
まあ盆はずっと休みで何日かは時間がとれそうなのでその時にでもやろうと思います。


Categories

 

2017年9月
« 4月    
 123
45678910
11121314151617
18192021222324
252627282930  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here