<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4733482151430397278</id><updated>2024-10-05T10:59:05.089+09:00</updated><category term="開発"/><category term="HT-03A"/><category term="subversion"/><category term="あるくっち"/><category term="バグ報告システム"/><category term="開発環境"/><category term="Google API"/><category term="Googleマップ"/><category term="AdMob"/><category term="HTC Aria"/><category term="libandrotranslation"/><title type='text'>rTAKI0329&amp;#39;s android ブログ</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rtaki.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-2343920777442495272</id><published>2012-07-13T15:53:00.004+09:00</published><updated>2012-07-13T15:56:28.353+09:00</updated><title type='text'>お買い物アプリを Google Play で公開してます</title><content type='html'>android 用スマホアプリとして、お買い物メモを公開しています。 &lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=jp.kochi.rtaki.GetMyShoppingListFree&quot;&gt;Google Play - 何買う？&lt;/a&gt;&lt;/blockquote&gt;
&lt;br /&gt;
我ながらイマイチなアプリ名ですが、スーパーに頻繁に買い物をする奥様で、&lt;br /&gt;
「とにかく買うものをリストできるればいい！」という方であれば、便利に使ってもらえるんじゃないかと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
差別化のポイントとしては、以下の４点です。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;商品の写真が大きく表示されるので見やすい。&lt;/li&gt;
&lt;li&gt;商品の写真は Google 検索で好きなものを選択できます。イチイチ撮影しなくていいです。&lt;/li&gt;
&lt;li&gt;履歴機能があるので、よく買うものは、履歴から登録することができます。&lt;/li&gt;
&lt;li&gt;そろそろ買うものと思われるものを候補リストで表示します。&lt;br /&gt;（２回以上、購入履歴があるものは、購入間隔から次の購入予定日を推測）&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
比較的？アプリの更新をしていますので、ドシドシダウンロードが増えるとうれしいな～と。&lt;br /&gt;
&lt;br /&gt;
これを見て、「ダウンロードしてやるぜ」 という奇特な方をお待ちしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/2343920777442495272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/2343920777442495272'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2012/07/google-play.html' title='お買い物アプリを Google Play で公開してます'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-7073502366809295268</id><published>2012-05-09T01:59:00.001+09:00</published><updated>2012-05-09T02:05:39.745+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="開発"/><title type='text'>ProGuard が勝手にコンストラクタを削除した件</title><content type='html'>難読化ツールと言うくらいなので、てっきり難読化だけするのかと思いきや、&lt;br /&gt;
ProGuard さんは不要（と判断した）メソッドやフィールドの削除も行います。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;・・・ということを、本日知りました（汗&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
そもそも、なんで本日知ったかというと、&lt;br /&gt;
android.view.View を派生した ColorPickerView というクラスを作成していたのですが、&lt;br /&gt;
ProGuard を使うと、以下のような Exception が発生することに気づきました。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;
android.view.InflateException: Binary XML file line #110: Error inflating class jp.xxx.yyy.zzz..ColorPickerView&lt;/div&gt;
&lt;br /&gt;
layout フォルダにあるレイアウトファイル (XMLファイル) に、&lt;br /&gt;
自作したColorPickerView を記述していたのですが、&lt;br /&gt;
こんなクラスはないよ、と言いがかりつけらています。&lt;br /&gt;
&lt;br /&gt;
ProGuard を使わないと、言いがかりはつけられません。&lt;br /&gt;
&lt;br /&gt;
なんで・・・？と調べていたところ、&lt;br /&gt;
ProGurad の削除機能でコンストラクタが削除されていることに気づいた、というわけです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ProGuard をよく知らずに使っていた自分が悪いと言えば悪いんですが、&lt;br /&gt;
そんな危ない機能はデフォルトでオフにしておいたほうがいいんじゃないですかね。&lt;br /&gt;
（自分だけの非にはしたくない気分です）&lt;br /&gt;
&lt;br /&gt;
ProGuard が生成するテキスト・ファイルのなかに、usage.txt というファイルがあるのですが、&lt;br /&gt;
このファイルには、ProGuard によって削除されたメソッドやフィールドが記録されます。&lt;br /&gt;
&lt;br /&gt;
まあ、こんなテキスト・ファイルの意味なんかも分かってなかったんですが、&lt;br /&gt;
この中に、自作の ColorPickerView のコンストラクが含まれていて、&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;「おれのコンストラクタが削除されてるーーー」&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
となったわけです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
で、回避策ですが、&lt;br /&gt;
&lt;br /&gt;
元々、以下のような 3 つのコンストラクタがあったので、&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;
package jp.xxx.yyy.zzz;&lt;br /&gt;
&lt;br /&gt;
public class ColorPickerView extends View {&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;public ColorPickerView(Context c) {&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;super(c);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;public ColorPickerView(Context c, AttributeSet attrs) {&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;super(c, attrs);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;public ColorPickerView(Context c, AttributeSet attrs, int defStyle) {&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;super(c, attrs, defStyle);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
（省略）&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
proguard.cfg に以下の記述を追加しました。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;
-keep public class&amp;nbsp;
jp.xxx.yyy.zzz..ColorPickerView&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; public &amp;lt;init&amp;gt;(android.content.Context);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; public &amp;lt;init&amp;gt;(android.content.Context,android.util.AttributeSet);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; public &amp;lt;init&amp;gt;(android.content.Context,android.util.AttributeSet,int);&lt;br /&gt;
}&lt;/div&gt;
&lt;br /&gt;
これでコンストラクタは 3 つとも削除されなくなりました。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;init&amp;gt; はコンストラクタを指しています。&lt;br /&gt;
&lt;br /&gt;
詳細は、本家の Usage でもご参照下さい。&lt;br /&gt;
&lt;br /&gt;
本家の Usage -&amp;nbsp;&lt;a href=&quot;http://proguard.sourceforge.net/index.html#manual/usage.html&quot;&gt;http://proguard.sourceforge.net/index.html#manual/usage.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/7073502366809295268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/7073502366809295268'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2012/05/proguard.html' title='ProGuard が勝手にコンストラクタを削除した件'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-5912993907965090394</id><published>2012-03-28T15:16:00.002+09:00</published><updated>2012-03-28T15:18:31.475+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="開発環境"/><title type='text'>android.bat が起動しないので、こんな回避策を実施してみました</title><content type='html'>最近、ノートPCを新調して、android 開発環境を導入していたところ、&lt;br /&gt;
android.bat が起動しない現象にぶつかりました。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: black; color: white; padding: 5px; width: 550px;&quot;&gt;&lt;code&gt;c:\myprog\android-sdk-windows\tools&amp;gt; android.bat&lt;br /&gt;
Failed to convert path to a short DOS path: C:\Windows\SYSTEM32\java.exe&lt;br /&gt;
&lt;br /&gt;
ERROR: No suitable Java found. In order to properly use the Android Developer&lt;br /&gt;
Tools, you need a suitable version of Java JDK installed on your system.&lt;br /&gt;
We recommend that you install the JDK version of JavaSE, available here:&lt;br /&gt;
&amp;nbsp; http://www.oracle.com/technetwork/java/javase/downloads&lt;br /&gt;
&lt;br /&gt;
You can find the complete Android SDK requirements here:&lt;br /&gt;
&amp;nbsp; http://developer.android.com/sdk/requirements.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
c:\myprog\android-sdk-windows\tools&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
android.bat の内部で、lib\find_java.bat を呼び出しており、&lt;br /&gt;
その処理を見ると、同じフォルダにある find_java.exe で java_exec 環境変数がセットされていない模様。&lt;br /&gt;
&lt;br /&gt;
原因はさっぱり分かりません。&lt;br /&gt;
&lt;br /&gt;
lib\find_java.bat を編集し、以下の 2 行を追記したところ、とりあえず、android.bat が起動するようになりました。&lt;br /&gt;
（java.exe、javaw.exeが存在するフォルダ名は適宜読み替えて下さい）&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;set java_exe=C:\myprog\Java\jdk1.6.0_30\bin\java.exe&lt;br /&gt;
set javaw_exe=C:\myprog\Java\jdk1.6.0_30\bin\javaw.exe&lt;/blockquote&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/5912993907965090394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/5912993907965090394'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2012/03/androidbat.html' title='android.bat が起動しないので、こんな回避策を実施してみました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-8436820201592855494</id><published>2011-06-20T14:16:00.002+09:00</published><updated>2011-06-21T16:01:31.686+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="あるくっち"/><title type='text'>HANSTER というサイトで評価が 3.5 くらいになってました</title><content type='html'>久しぶりにアプリ公開している &lt;a href=&quot;http://www.handster.com/arukucchi.html&quot;&gt;HANDSTER&lt;/a&gt; というサイトを覗いてみたら、&lt;br /&gt;
Rating がされていて、3.5 くらいの評価になってました。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc7WMFl5L4qHSFlKwVdkI1DllGzh1cGZ9lHl8EMCexcR8UVkKS2w3PZZjLAwLGM0eGSAQCjxTIW2CBf00S9-ldTVtZ697HsQNOOqqId-gVtzDYpA-KAwBaFnh1kFinc0P-e-6yJZMiYas/s1600/20110620.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc7WMFl5L4qHSFlKwVdkI1DllGzh1cGZ9lHl8EMCexcR8UVkKS2w3PZZjLAwLGM0eGSAQCjxTIW2CBf00S9-ldTVtZ697HsQNOOqqId-gVtzDYpA-KAwBaFnh1kFinc0P-e-6yJZMiYas/s320/20110620.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
星１じゃないだけで&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;感激&lt;/span&gt;です。(ノД`)・゜・。ｳﾜｰﾝ&lt;br /&gt;
&lt;br /&gt;
Android Market では、今も星１つが神々しく輝いておりますが、&lt;br /&gt;
あまりにも星１つ慣れしていた為か、喜びもひとしおです。 &lt;br /&gt;
&lt;br /&gt;
星３以上付けて頂いた２人くらいのために、&lt;br /&gt;
そろそろ、なにかアップデートしなくては・・・&lt;br /&gt;
と思うのですが、イマイチ、ネタがないんですよねぇ。。&lt;br /&gt;
&lt;br /&gt;
どうせなから、コメントも書いて欲しかったな （まさかの贅沢慣れしてスイマセン）</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/8436820201592855494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/8436820201592855494'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/06/handstar-rating-3.html' title='HANSTER というサイトで評価が 3.5 くらいになってました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc7WMFl5L4qHSFlKwVdkI1DllGzh1cGZ9lHl8EMCexcR8UVkKS2w3PZZjLAwLGM0eGSAQCjxTIW2CBf00S9-ldTVtZ697HsQNOOqqId-gVtzDYpA-KAwBaFnh1kFinc0P-e-6yJZMiYas/s72-c/20110620.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-4322225791291840893</id><published>2011-06-04T21:20:00.000+09:00</published><updated>2011-06-04T21:20:52.720+09:00</updated><title type='text'>福岡市が開催している創業セミナーに行ってきました</title><content type='html'>最近は、ほとんど android に触れることがなく、&lt;br /&gt;
なぜか簿記3級の試験勉強をしていたりするんですが、、&lt;br /&gt;
&lt;br /&gt;
本日、福岡市が開催している創業準備セミナーなるものに行ってきました。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;福岡市の起業・創業応援サイト&lt;br /&gt;
&lt;a href=&quot;http://sougyou.city.fukuoka.lg.jp/&quot;&gt;http://sougyou.city.fukuoka.lg.jp/&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
起業も何も、まだ具体的なことは何一つないんですが、&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-size: large;&quot;&gt;&lt;b&gt;タダ&lt;/b&gt;&lt;/span&gt;ということで、何らかのモチベーションアップになるだろうと思って申し込んだ次第です。&lt;br /&gt;
&lt;br /&gt;
講師の話を約３時間、粛々と聞くだけでしたが、&lt;br /&gt;
タメになるお話が聞けたかなぁ～と思っております。&lt;br /&gt;
&lt;br /&gt;
福岡市では、起業支援のために、&lt;br /&gt;
格安で事業所スペースを提供、無料での起業相談、低金利での創業支援融資制度などを&lt;br /&gt;
実施しているそうです。&lt;br /&gt;
&lt;br /&gt;
行政で「ありがたい」と思ったのは、これまで図書館くらいだったんですが、&lt;br /&gt;
セミナーを含めて、いろいろと起業支援を行っていることは「ありがたい」です。&lt;br /&gt;
&lt;br /&gt;
まあ、自分は利用することはないだろうなぁ・・・と思いますが。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
セミナー参加者は幅広い年代で構成されていました。&lt;br /&gt;
&lt;br /&gt;
がんばっている（と勝手に思っている）人達を見て、&lt;br /&gt;
少し自分もやる気をアップさせられた気がします。&lt;br /&gt;
&lt;br /&gt;
とりあえず、6月12日(日)の簿記3級くらい、サクッと受かるために、&lt;br /&gt;
勉強しとこ。。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4322225791291840893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4322225791291840893'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/06/blog-post.html' title='福岡市が開催している創業セミナーに行ってきました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-3171078781620947563</id><published>2011-04-26T10:43:00.001+09:00</published><updated>2011-04-26T10:50:48.054+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="あるくっち"/><title type='text'>第一弾アプリを公開して１ヶ月が経ちました</title><content type='html'>初めてのアプリ「あるくっち」を公開してから、１ヶ月が経過しました。 &lt;br /&gt;
&lt;br /&gt;
android market のデベロッパー コンソールで、ダウンロードの推移を見てみると、&lt;br /&gt;
こんな感じでございます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-NRfDzOMhnPBqQtCljBPvyp9bhKBLkfkcoKYGkySq5dqjXAMB1pqqCORsZNV8BzGXD8R_aBxVyFvn2UhGSZTyk3QW63wlanTagU1C2vS9BbPJ9GdrSBz7rGZgI-6arrDCXcp3Wm6phsM/s1600/20110426.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;187&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-NRfDzOMhnPBqQtCljBPvyp9bhKBLkfkcoKYGkySq5dqjXAMB1pqqCORsZNV8BzGXD8R_aBxVyFvn2UhGSZTyk3QW63wlanTagU1C2vS9BbPJ9GdrSBz7rGZgI-6arrDCXcp3Wm6phsM/s640/20110426.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;現在のインストール数は 66 です。&lt;br /&gt;
&lt;br /&gt;
う～ん、根拠は全くありませんが、まあ、こんなもんでしょう。&lt;br /&gt;
&lt;br /&gt;
66 人も使って頂いている方がいると思うと、ありがたいです (-人-)ｱﾘｶﾞﾀﾔ&lt;br /&gt;
&lt;br /&gt;
インストールするだけで、未使用のほったらかしかもしれませんが、&lt;br /&gt;
デベロッパー コンソールからでは、そこまでは分かりません。&lt;br /&gt;
&lt;br /&gt;
アンインストールされないだけでも (-人-)ｱﾘｶﾞﾀﾔ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちなみに、スケベ心を出して、AdMob で広告表示させているのですが、&lt;br /&gt;
この１ヶ月での広告クリック数は１回です。&lt;br /&gt;
(設定画面で、広告を非表示にすることは可能にしています)&lt;br /&gt;
&lt;br /&gt;
この１回で収益が 0.1 ドルくらい増えました。&lt;br /&gt;
&lt;br /&gt;
こちらも、こんなもんでしょう（と自分に言い聞かせる）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ぼちぼち、第２弾のアプリ開発に着手せねば。。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3171078781620947563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3171078781620947563'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/04/blog-post_26.html' title='第一弾アプリを公開して１ヶ月が経ちました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-NRfDzOMhnPBqQtCljBPvyp9bhKBLkfkcoKYGkySq5dqjXAMB1pqqCORsZNV8BzGXD8R_aBxVyFvn2UhGSZTyk3QW63wlanTagU1C2vS9BbPJ9GdrSBz7rGZgI-6arrDCXcp3Wm6phsM/s72-c/20110426.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-370556395634842736</id><published>2011-04-15T15:41:00.002+09:00</published><updated>2011-04-15T15:44:05.868+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="あるくっち"/><title type='text'>Handster というサイトでアプリが公開されました</title><content type='html'>Handster というサイトのお姉さん？からアプリ公開しないかい？と英文メールをもらい、&lt;br /&gt;
即座にＯＫと返してから、１週間くらいが経過した頃。&lt;br /&gt;
&lt;br /&gt;
あなたのアカウントを作って、アプリを公開したよ、といった主旨の英文メールが飛んできました。&lt;br /&gt;
&lt;br /&gt;
で、実際の公開されているページがコチラ。&lt;br /&gt;
&lt;blockquote&gt;&lt;a href=&quot;http://android.handster.com/catalog.php?search=arukucchi&quot;&gt;http://android.handster.com/catalog.php?search=arukucchi&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
アカウント作成してもらって、アプリ公開まで実施してもらって、楽チンだったんですが、&lt;br /&gt;
正直、ダウンロードされんだろな・・・&lt;br /&gt;
&lt;br /&gt;
嫁からもツマランと酷評される程度なんで (｡ﾟ´д`)ﾟ ﾜｰﾝ&lt;br /&gt;
&lt;br /&gt;
しかし、android アプリのマーケットを提供している会社では、&lt;br /&gt;
新作で公開されるアプリを一通り目を通しては、手当たり次第、自分のトコロでも&lt;br /&gt;
公開しないかい？と声かけてるんでしょうねぇ。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/370556395634842736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/370556395634842736'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/04/handster_15.html' title='Handster というサイトでアプリが公開されました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-5988528233485196115</id><published>2011-04-06T10:13:00.000+09:00</published><updated>2011-04-06T10:13:35.908+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="あるくっち"/><title type='text'>Handster とかいうサイトからアプリ公開のお誘いが来ました</title><content type='html'>あるくっちを公開してから、２週間くらいが経過した頃、&lt;br /&gt;
Handster というサイトからアプリを公開しませんかメールが来ました。&lt;br /&gt;
&lt;blockquote&gt;Handster - &lt;a href=&quot;http://www.handster.com/&quot;&gt;リンク&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
別に費用は発生しないとのことだったので、&lt;br /&gt;
公開します！と返信してみましたが、どういう感じになるんでしょうねぇ。。&lt;br /&gt;
&lt;br /&gt;
ちなみに、、&lt;br /&gt;
&lt;br /&gt;
現在、Android Market のデベロッパーコンソール上では、有効なインストール数は 38 です。&lt;br /&gt;
&lt;br /&gt;
スケベ心出して、AdMobで広告表示をさせているのですが、(設定で非表示に変更可)&lt;br /&gt;
今のところ、広告をクリックされた回数は 0 回です (T△T)o&lt;br /&gt;
&lt;br /&gt;
まあ、こんなもんですかね。&lt;br /&gt;
&lt;br /&gt;
過度な期待はせずに、次のアプリ開発に着手しようと思います。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/5988528233485196115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/5988528233485196115'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/04/handster.html' title='Handster とかいうサイトからアプリ公開のお誘いが来ました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-4759353400543563798</id><published>2011-04-02T23:28:00.001+09:00</published><updated>2011-04-02T23:29:09.491+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="あるくっち"/><category scheme="http://www.blogger.com/atom/ns#" term="開発"/><title type='text'>第一弾アプリを公開しました</title><content type='html'>ついに、、アプリ公開まで漕ぎ着けました。&lt;br /&gt;
&lt;br /&gt;
その名前は &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;あるくっち&lt;/span&gt; です。ハズカシイ。。&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial, sans-serif; font-size: x-small; line-height: 20px;&quot;&gt;( 。- - 。) ポッ&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;a href=&quot;https://market.android.com/details?id=jp.kochi.rtaki&quot;&gt;Android Market - あるくっち&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
アプリの説明用サイトも作っちゃいました。&lt;br /&gt;
&lt;blockquote&gt;&lt;a href=&quot;http://sites.google.com/site/rtakiapp/home/arukucchi_javascript:void(0)ja&quot;&gt;rtaki0329&#39;s apps - あるくっち&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
公開して１週間くらい経ちますが、ダウンロード数が 40 くらいです。&lt;br /&gt;
&lt;br /&gt;
ちゃんと動いてるんでしょうか。。正直ちょっと不安です。。&lt;br /&gt;
&lt;br /&gt;
しかも最初の２日間は、Google map の key を公開用に変更していなかったので、&lt;br /&gt;
地図が表示されない状態になっていました&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial, sans-serif; font-size: x-small; line-height: 20px;&quot;&gt;(;￣ー￣川 ｱｾｱｾ&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
１人でも多くの人に使ってもらえたら嬉しいんだけど、どうなることやら。。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4759353400543563798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4759353400543563798'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/04/blog-post.html' title='第一弾アプリを公開しました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-3312634412090653346</id><published>2011-03-10T09:31:00.005+09:00</published><updated>2011-03-17T18:35:26.661+09:00</updated><title type='text'>缶コーヒー WONDA の販促キャンペーンで偽サイト？</title><content type='html'>android は、ちっとも関係ありませんが、&lt;br /&gt;
&lt;br /&gt;
今日、自販機で買った缶コーヒー WONDA にシールが貼っていて、&lt;br /&gt;
AKB48のオリジナルグッズが貰えるキャンペーンとのことでした。&lt;br /&gt;
&lt;br /&gt;
キャンペーンのタイトルは、WONDA×AKB48 ワンダフルルーレット だそうで。&lt;br /&gt;
&lt;br /&gt;
で、URL が書いてあったんですが、、&lt;br /&gt;
&lt;br /&gt;
http://wonda-akb48.com と入力するところ間違えて http://wanda-akb48.com と入力したところ、&lt;br /&gt;
WONDA を装った、でも相当チープな作りの怪しげなサイトが表示されました。&lt;br /&gt;
&lt;br /&gt;
怖くて、どのリンクも押さずにブラウザを閉じたんですが、&lt;br /&gt;
釣られる人が、たくさん出てきそうな気がします。&lt;br /&gt;
&lt;br /&gt;
ということで、、&lt;br /&gt;
&lt;br /&gt;
WONDA×AKB48 ワンダフルルーレットのお問い合わせメールアドレスに、&lt;br /&gt;
注意を喚起したほうがいいんじゃないの？的なメールを送ってみました。&lt;br /&gt;
&lt;br /&gt;
軽くスルーされそうな気がしますが、こんなサイトがすぐに作られるなんて、&lt;br /&gt;
さすが AKB48 ってとこでしょうか。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3312634412090653346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3312634412090653346'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/03/wonda.html' title='缶コーヒー WONDA の販促キャンペーンで偽サイト？'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-7974442288167029059</id><published>2011-03-08T19:06:00.003+09:00</published><updated>2011-03-08T19:38:33.459+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="開発"/><title type='text'>Inkscape - アイコン作成に使うツール - だそうです</title><content type='html'>android 向けのアイコン作成ですが、&lt;br /&gt;
これまで(といって１回しかないですが) GIMP と Google SketchUp を使用していました。&lt;br /&gt;
&lt;br /&gt;
Google SketchUp で作成した 3D のモデルを 30 度回転させて、PNG で出力させて、GIMP に取り込み、編集するという誰もやっていないような方法です！&lt;br /&gt;
&lt;br /&gt;
しかし、どうも一般的には Inkscape というフリーソフトを使われているようです (／－＼*)ﾊｽﾞｶｼｲ&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;Inkscape&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://inkscape.org/index.php?lang=ja&quot;&gt;http://inkscape.org/index.php?lang=ja&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
なんでも、、&lt;br /&gt;
&lt;br /&gt;
Photoshop に対応するフリーソフトが GIMP で、&lt;br /&gt;
Illustrator に対応するフリーソフトが Inkscape だそうです。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;もう早く教えてよ～&lt;/span&gt; という感じですが、&lt;br /&gt;
&lt;br /&gt;
次にアイコンを作るときは利用してみます。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/7974442288167029059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/7974442288167029059'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/03/inkscape.html' title='Inkscape - アイコン作成に使うツール - だそうです'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-491298537010860907</id><published>2011-03-07T23:11:00.011+09:00</published><updated>2011-03-08T09:00:57.173+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libandrotranslation"/><title type='text'>libandrotranslation のサンプル・アプリ作ってみた</title><content type='html'>最近、libandrotranslation というライブラリを知りました。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;libandrotranslation&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/libandrotranslation/&quot;&gt;http://code.google.com/p/libandrotranslation/&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
このライブラリを android アプリに組み込むと、&lt;br /&gt;
アプリ使用者に strings.xml の翻訳を実施してもらい、翻訳結果をメールにて送信してもらえるようになります。&lt;br /&gt;
(最後に、サンプル・アプリの動作画面を貼り付けたので、それを見てもらうと分かりやすいかもです) &lt;br /&gt;
&lt;br /&gt;
早速、サンプル・アプリを作ってみることにしました。&lt;br /&gt;
&lt;br /&gt;
まず、libandrotranslation のライブラリをダウンロードします。&lt;br /&gt;
&lt;br /&gt;
libandrotranslation のサイトより、ファイル名は LibAndroTranslation-1.0.0.zip をダウンロードします。(2011/3/7時点)&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;libandrotranslation - Downloads&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/libandrotranslation/downloads/list&quot;&gt;http://code.google.com/p/libandrotranslation/downloads/list&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
libandrotranslation のサイトには、使用方法についての記述があるので、&lt;br /&gt;
それを参考にしました。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;libandrotranslation - Description&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/libandrotranslation/wiki/Description&quot;&gt;http://code.google.com/p/libandrotranslation/wiki/Description&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
libandrotranslation を使用するには、zip ファイルを解凍し、それが android プロジェクトになっているので、eclipse に読み込ませる必要があります。&lt;br /&gt;
&lt;br /&gt;
サイトに、その手順は記載されていますが、一応、手順を以下に記述します。&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;LibAndroTranslation-1.0.0.zip を解凍します。&lt;br /&gt;
解凍したフォルダは android プロジェクトのファイルになっています。&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Eclipse から 1. で解凍したプロジェクトを読み込みます。&lt;br /&gt;
Exclipse を起動し、&quot;Filie&quot; --&amp;gt; &quot;New&quot; から新規に Android Project を作成します。&lt;br /&gt;
&lt;br /&gt;
このとき、Contents で &quot;Create project from existing source&quot; を選択し、&lt;br /&gt;
1. で解凍したフォルダを指定します。&lt;br /&gt;
&lt;br /&gt;
Project name はサイトと同じく、LibAndroTrans にしました。&lt;br /&gt;
後はデフォルトのままで構いません。&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;blockquote&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGjaO9MwxuVVwrbo6T9ayA7jJI0hCh_2FmjKQVjzsqwPJier6xuyDSByu7W5bOFExL3swXZpoa6aVcJPt6vxq-NX3KWWO7TY24e8u3VxQqIx7Q3R2lAeW-udWzynjOm_HGkl7eFHKXmgY/s1600/libandrotrans01.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGjaO9MwxuVVwrbo6T9ayA7jJI0hCh_2FmjKQVjzsqwPJier6xuyDSByu7W5bOFExL3swXZpoa6aVcJPt6vxq-NX3KWWO7TY24e8u3VxQqIx7Q3R2lAeW-udWzynjOm_HGkl7eFHKXmgY/s400/libandrotrans01.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
libandrotranslation ライブラリを使用する準備ができたので、&lt;br /&gt;
早速、サンプルアプリを作成してみます。&lt;br /&gt;
&lt;br /&gt;
Exclipse を起動し、&quot;Filie&quot; --&amp;gt; &quot;New&quot; から新規に Android Project を作成します。&lt;br /&gt;
アクティビティ名を LibAndroTransTestActitivy にしていますが、その辺は適当に解釈して下さい。&lt;br /&gt;
&lt;br /&gt;
各ファイルで、修正した箇所を青字で記述します。&lt;br /&gt;
&lt;br /&gt;
AndroidManifest.xml&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; package=&quot;jp.test.libandrotest&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:versionCode=&quot;1&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:versionName=&quot;1.0&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;activity android:name=&quot;.LibAndroTransTestActitivy&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:label=&quot;@string/app_name&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;intent-filter&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/activity&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- LibAndroTranslation --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;activity android:name=&quot;shoozhoo.libandrotranslation.TranslationListActivity&quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;activity android:name=&quot;shoozhoo.libandrotranslation.TranslationEditActivity&quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/application&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uses-sdk android:minSdkVersion=&quot;6&quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;!-- LibAndroTranslation --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/manifest&amp;gt;&lt;/div&gt;&lt;br /&gt;
main.xml&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:orientation=&quot;vertical&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&lt;br /&gt;
&amp;lt;TextView&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:text=&quot;&lt;span style=&quot;color: blue;&quot;&gt;LibAndroTrnaslatin のテスト&lt;/span&gt;&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;Button&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; android:id=&quot;@+id/libandrotrans_button&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width=&quot;wrap_content&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height=&quot;wrap_content&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; android:text=&quot;テスト開始&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/div&gt;&lt;br /&gt;
LibAndroTransTestActitivy.java&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;package jp.test.libandrotest;&lt;br /&gt;
&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
&lt;br /&gt;
import shoozhoo.libandrotranslation.TranslationListActivity;&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.content.Intent;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.view.View;&lt;br /&gt;
import android.view.View.OnClickListener;&lt;br /&gt;
import android.widget.Button;&lt;br /&gt;
&lt;br /&gt;
public class LibAndroTransTestActitivy extends Activity {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Called when the activity is first created. */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView(R.layout.main);&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Button button = (Button) findViewById(R.id.libandrotrans_button);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button.setOnClickListener(new OnClickListener() {&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public void onClick(View v) {&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Intent intent = new Intent(LibAndroTransTestActitivy.this, TranslationListActivity.class);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 翻訳データの送信先メールアドレス&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_TO, &quot;YOUR_MAIL_ADDRESS&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 翻訳データのメールの題名に入るアプリ名&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_APPNAME, &quot;YOUR_APP_NAME&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArrayList&amp;lt;String&amp;gt; ignores = new ArrayList&amp;lt;String&amp;gt;();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ignores.add(&quot;app_name&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ignores.add(&quot;no_i18n.+&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 翻訳画面に表示させたくないリソース名のパターン(正規表現)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intent.putExtra(TranslationListActivity.INTENT_EXTRA_IGNORE_PATTERNS, ignores);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 翻訳データの保存先を変更したい場合に指定する&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // デフォルト Environment.getExternalStorageDirectory()+&quot;/MyTranslation&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // intent.putExtra(TranslationListActivity.INTENT_EXTRA_DIR,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Environment.getExternalStorageDirectory()+&quot;/LibAndroTranslationSample&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LibAndroTransTestActitivy.this.startActivity(intent);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/div&gt;※ メールアドレスについては、送信したいアドレスへの修正が必要です。&lt;br /&gt;
※ コメントにも書かれていますが、デフォルトでは、strings.xml のデータを格納したファイルが、/mnt/sdcard/MyTranslation/ ディレクトリ(エミュレータで確認)に作成されます。&lt;br /&gt;
&lt;br /&gt;
strings.xml&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;string name=&quot;hello&quot;&amp;gt;Hello World, LibAndroTransTestActitivy!&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;string name=&quot;app_name&quot;&amp;gt;LibAndroTransTest&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;string name=&quot;message1&quot;&amp;gt;Good morning&amp;lt;/string&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;string name=&quot;message2&quot;&amp;gt;Good evening&amp;lt;/string&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
実行画面を以下に貼り付けます。&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
起動直後の画面です。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijsBvVqcv7smyN0Oe1vjd84If9QRZ_E_RNuZP8M9Lwkqm0XmGvRonuDJdiTyR4dB8a7aCDArFU0uyizJbxw7sH-RmG4v87CjtIH0GH_XTGFdkqkeiXBmzKzogB6QGJP-atfInKAUD5GlQ/s1600/libandrotrans02a.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijsBvVqcv7smyN0Oe1vjd84If9QRZ_E_RNuZP8M9Lwkqm0XmGvRonuDJdiTyR4dB8a7aCDArFU0uyizJbxw7sH-RmG4v87CjtIH0GH_XTGFdkqkeiXBmzKzogB6QGJP-atfInKAUD5GlQ/s320/libandrotrans02a.PNG&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
起動直後の画面で、&quot;テスト開始&quot;をクリックすると、翻訳のお願い画面が表示されます。&lt;br /&gt;
以下の画面では日本語になっていますが、端末の設定に合わせた言語で表示されるようです。&lt;br /&gt;
(端末の言語が英語のときは、英語の文章でした)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgICo3GJKE6HkCWnLeKj4uD4RFjR6H19GANNkvOk2snFrVnPfm98IdVUp2BoZ2hdnss1X1mT50Tbbx6CeYz7qGZ5_62jj6dww-CzgXLxT-xbrij6zJxEfG3uK3yCfWjiVrXBp-zebOtz8o/s1600/libandrotrans02b.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgICo3GJKE6HkCWnLeKj4uD4RFjR6H19GANNkvOk2snFrVnPfm98IdVUp2BoZ2hdnss1X1mT50Tbbx6CeYz7qGZ5_62jj6dww-CzgXLxT-xbrij6zJxEfG3uK3yCfWjiVrXBp-zebOtz8o/s320/libandrotrans02b.PNG&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
上記画面で &quot;OK&quot; を押すと、strings.xml が読み込まれ、リスト表示されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimdBlEsIRoBlcl0g3AYPWMy8c3kGuve0nktByZZ3a1e54m7lLzkvgCNn7EdUBjTIv6R_v-1N0BCGJJKcXjCBKook2XGjshZD2Nvgf-EMaP4szZ01Dh7H7I2UFz7yxefyYJC4xeu1SWZJc/s1600/libandrotrans02c.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimdBlEsIRoBlcl0g3AYPWMy8c3kGuve0nktByZZ3a1e54m7lLzkvgCNn7EdUBjTIv6R_v-1N0BCGJJKcXjCBKook2XGjshZD2Nvgf-EMaP4szZ01Dh7H7I2UFz7yxefyYJC4xeu1SWZJc/s320/libandrotrans02c.PNG&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&quot;Good morning&quot; をクリックすると、翻訳を入力する画面に切り替わります。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgYguUYBKIeGw88NGRKxQ_YjTztDBknAMJBerFUvqgCJGmEqL3Z5mCm6aAPD2TjHpwOFcJlo_Z0-PZ8rcK-1C2uwHmSZ1q5n3BAlNdWT5Es2jqW-FfQaN-c8Msc4ec3Tdm3wk_7zjq-wg/s1600/libandrotrans02d.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgYguUYBKIeGw88NGRKxQ_YjTztDBknAMJBerFUvqgCJGmEqL3Z5mCm6aAPD2TjHpwOFcJlo_Z0-PZ8rcK-1C2uwHmSZ1q5n3BAlNdWT5Es2jqW-FfQaN-c8Msc4ec3Tdm3wk_7zjq-wg/s320/libandrotrans02d.PNG&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
メニューボタンを押し、&quot;開発者に送信&quot;を押すことで、XML ファイルをメールの添付ファイルとして、送信することことができます。HTC Aria で実行してみると、メール以外に、操作の選択として、Facebook とか Bluetooth とかも出てきたんですが、これは想定内か？&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdIt6dQADoBRsukZn-6AO8RusbvtLF4LhwOBDtp7yQ1uMk8hf8NA2qOETXlJy4eU3kC1uNfZE8XOKU5ySf4-3jFcHvxMfz5dSitdhpv0wU5qO-V52CfnX-9XV0m62FmBwk4G20f62OhXw/s1600/libandrotrans02f.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdIt6dQADoBRsukZn-6AO8RusbvtLF4LhwOBDtp7yQ1uMk8hf8NA2qOETXlJy4eU3kC1uNfZE8XOKU5ySf4-3jFcHvxMfz5dSitdhpv0wU5qO-V52CfnX-9XV0m62FmBwk4G20f62OhXw/s320/libandrotrans02f.PNG&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
以下のファイルが実施にメールに添付されたファイルです。&lt;br /&gt;
&lt;br /&gt;
string_jp.test.libandrotest&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&amp;lt;?xml version=&#39;1.0&#39; encoding=&#39;UTF-8&#39; standalone=&#39;yes&#39; ?&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;string name=&quot;message1&quot;&amp;gt;&quot;おはよう&quot;&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;string name=&quot;message2&quot;&amp;gt;&quot;こんばんは&quot;&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;
設定画面などに埋め込めば、より自然に翻訳ご協力お願い機能を追加できそうです。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/491298537010860907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/491298537010860907'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/03/libandrotranslation.html' title='libandrotranslation のサンプル・アプリ作ってみた'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGjaO9MwxuVVwrbo6T9ayA7jJI0hCh_2FmjKQVjzsqwPJier6xuyDSByu7W5bOFExL3swXZpoa6aVcJPt6vxq-NX3KWWO7TY24e8u3VxQqIx7Q3R2lAeW-udWzynjOm_HGkl7eFHKXmgY/s72-c/libandrotrans01.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-6019037880323764500</id><published>2011-02-15T17:41:00.014+09:00</published><updated>2011-02-15T18:13:01.514+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTC Aria"/><title type='text'>HTC Aria 入手しました。</title><content type='html'>HTC Aria を入手しました。&lt;br /&gt;
&lt;br /&gt;
入手してから、既に１ヵ月経ちます。&lt;br /&gt;
&lt;br /&gt;
ヤフオクで買った HT-03A だと、SIM カードがないので、外に持ち歩いて、&lt;br /&gt;
テストすることもできないので、ええ～い、と近所のヤマダ電機にあるイー・モバイル取り扱い店に&lt;br /&gt;
突撃し、店員さんと料金の最終確認して、即座に契約！&lt;br /&gt;
&lt;br /&gt;
料金プランは「スマートプラン」の「シンプルにねん」というやつで、&lt;br /&gt;
通話料金等の加算がなければ月々の支払いは 4,580 円です。&lt;br /&gt;
&lt;br /&gt;
端末代金は約3万でした。&lt;br /&gt;
&lt;br /&gt;
当初は、あまり屋外で使うことはないかなぁ、と思って、&lt;br /&gt;
「スマートプランライト」にするつもりでしたが、店員さんが、&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;「スマートプランライトは日割りにできませんし、最初の月は、物珍しさもあって、よくデータ通信する方が多いです。初めはスマートプランにしても、途中からスマートプランライトに変更できますので、とりあえず、スマートプランにしては、どうでしょうか？」&lt;/blockquote&gt;&lt;br /&gt;
と言う意見に従って、スマートプランで始めることにしました。&lt;br /&gt;
&lt;br /&gt;
ちなみに、プランの変更は、翌々月から反映される、とも言っていましたが、&lt;br /&gt;
普通、翌月からじゃないんですかね。。昔使っていた au は、そうだったと思うんだけど。&lt;br /&gt;
&lt;br /&gt;
入手してから１ヵ月、すでに屋外に持ち出して使う機会が少ないので、&lt;br /&gt;
そのうち、使おうが使うまいが定額なスマートプランから、&lt;br /&gt;
スマートプランライト (シンプルにねんだと 580円～4,980円) に変更しようと思います。&lt;br /&gt;
&lt;br /&gt;
変更すれば、毎月の支払いが最低 580 円ですよ！&lt;br /&gt;
&lt;br /&gt;
テスト機で維持するには、なかなか、お安くなっているじゃあ～りませんか！&lt;br /&gt;
（なんか、この表現って、若くないな・・・） &lt;br /&gt;
&lt;br /&gt;
メインで使っている iPhone 3GS と HTC Aria を並べて、&lt;br /&gt;
Google マップを表示し、ぐりぐり動かして見比べたところ、iPhone 3GS のほうが動きが滑らかでした。&lt;br /&gt;
&lt;br /&gt;
この 2 台を比べるなら、iPhone 3GS のほうが動き滑らかかなぁ・・・という印象です。今のところ。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;しか～し&lt;/b&gt;&lt;/span&gt;、テザリングはすばらしいです！&lt;br /&gt;
&lt;br /&gt;
ネット環境がない場所 (嫁さんの実家とか) でも、&lt;br /&gt;
HTC Aria とノートPCを USB 接続して、アプリのインストール/動作確認しながら、&lt;br /&gt;
Wi-Fi Hotspot でネットに接続して、android developers の API リファレンスを閲覧できますヽ( ・∀・)ﾉ ﾜｰｲ&lt;br /&gt;
&lt;br /&gt;
ちなみに、USB テザリングだと、別のドライバが読み込まれるのか、&lt;br /&gt;
android device として認識されなくなりました。&lt;br /&gt;
adb devices と打っても何も出ないので、USB テザリングとは併用できないようです。&lt;br /&gt;
&lt;br /&gt;
これで、android 開発用の実機が 2 台になりました。&lt;br /&gt;
かなりの装備増強です！？&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;HTC Aria&lt;br /&gt;
android 2.2。SIM あり。イーモバイル契約。&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;HT-03A&lt;br /&gt;
android 1.6。SIMなし。ヤフオク入手。&lt;br /&gt;
カスタムROMを入れていましたが、元に戻しました。&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
あとはアプリを作るだけですね  (;￣ー￣川 ｱｾｱｾ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以下は、HTC Aria 及び料金プランのサイトです。&lt;br /&gt;
興味を持った！という奇特な方がいらっしゃいましたら、参照して下さい。 &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;イーモバイル HTC Aria&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://emobile.jp/products/ht/s31ht/&quot;&gt;http://emobile.jp/products/ht/s31ht/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
イーモバイル スマートプラン&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://emobile.jp/charge/smartplan.html&quot;&gt;http://emobile.jp/charge/smartplan.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;イーモバイル スマートプランライト&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://emobile.jp/charge/smartplanlight.html&quot;&gt;http://emobile.jp/charge/smartplanlight.html&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/6019037880323764500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/6019037880323764500'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/02/htc-aria.html' title='HTC Aria 入手しました。'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-3875260996834400257</id><published>2011-02-09T17:59:00.003+09:00</published><updated>2011-02-09T18:03:26.710+09:00</updated><title type='text'>きんこん土佐日記</title><content type='html'>あまりにも更新していない、、というのもあって、&lt;br /&gt;
android とは、ちっとも関係ありませんが、最近、友達に教えてもらった４コマ漫画を&lt;br /&gt;
ご紹介致します。&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;b&gt;きんこん土佐日記 Web版 (毎週日曜日更新)&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.kochinews.co.jp/kinkon/kinkon.htm&quot;&gt;http://www.kochinews.co.jp/kinkon/kinkon.htm&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
高知新聞の夕刊にて連載中だそうですが、&lt;br /&gt;
上記の Web 版もあります。&lt;br /&gt;
&lt;br /&gt;
高知を舞台に、じいちゃん、ばあちゃん、５歳の孫(男の子)を中心に、&lt;br /&gt;
話が展開されることが多いですが、登場人物(のたぶん全員)が、土佐弁をバリバリ使っています。&lt;br /&gt;
&lt;br /&gt;
生まれも育ちも高知な自分でも、ときどきセリフが分かりません。。(汗&lt;br /&gt;
&lt;br /&gt;
が、やはり、懐かしい響きがして、なんとなくテンションあがります。&lt;br /&gt;
&lt;br /&gt;
主人公がお年寄りということもあって、年配ならではの、とぼけた(ボケた？)エピソードが、&lt;br /&gt;
ほのぼのとした笑いを誘います。&lt;br /&gt;
&lt;br /&gt;
５０年？連れ添って、じいちゃんが、ばあちゃんに初めて言葉で愛を伝えるなど、&lt;br /&gt;
お茶目な一面も見られます。&lt;br /&gt;
(残念ながら４月１日だったので、真面目に受け止めてもらえませんでしたが)&lt;br /&gt;
&lt;br /&gt;
お年取りを主人公にしたあたりが、とっても良かったんじゃないかと思います。&lt;br /&gt;
&lt;br /&gt;
単行本は１～６巻まで発売されています。&lt;br /&gt;
&lt;br /&gt;
上記サイトの高知新聞社で購入できます。&lt;br /&gt;
Amazon でも取り扱っています。&lt;br /&gt;
&lt;br /&gt;
まったりした漫画が読みたいな～、とか、土佐弁の漫画が読みたいな～といった方は、&lt;br /&gt;
ぜひ読んでみてください～～&lt;br /&gt;
&lt;br /&gt;
NHKあたりでアニメにしてもらえないかな～</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3875260996834400257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3875260996834400257'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/02/blog-post.html' title='きんこん土佐日記'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-860069766617270027</id><published>2011-01-19T13:33:00.005+09:00</published><updated>2011-01-19T13:36:19.326+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="バグ報告システム"/><title type='text'>Androidアプリのバグ報告システム（アプリケーションのアップロード試してみる編）</title><content type='html'>以下のスタートガイドを参考に、&lt;br /&gt;
前回までに作成した開発環境をいじってみることで、なんとなく、&lt;br /&gt;
Google App Engine と Python が分かってきた気がします。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;スタート ガイド: Python&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/&quot;&gt;http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
スタートガイドでは締めくくりとして、&quot;アプリケーションのアップロード&quot; を実施しています。&lt;br /&gt;
&lt;br /&gt;
これは、ガイド内で作成した helloworld アプリを&lt;br /&gt;
Google App Engine サイトにアップロードする手順になっています。&lt;br /&gt;
&lt;br /&gt;
以下に、実際にやってみた際の記録をメモしておきます。&lt;br /&gt;
&lt;br /&gt;
helloworld アプリは C:\Python_Test\helloworld に配置しています。&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Google App Engine のサイトにアクセスし、ログイン。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://appengine.google.com/&quot;&gt;http://appengine.google.com/&lt;br /&gt;
&lt;br /&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&quot;Create Application&quot; ボタンを押す。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuMWAKBk7SFF0fjskxpjQIXY0WtNv6nhFpTCMAGUnUVmE4lJFZ5mDgG2JL7ppKGmotiFCfWMQvh2EbmNyZqK2adXdWs-CfwmvrzbuddlV3aMDHG3t2HGvZUAAWljOi0shp1vb-OFl_uZo/s1600/upload1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuMWAKBk7SFF0fjskxpjQIXY0WtNv6nhFpTCMAGUnUVmE4lJFZ5mDgG2JL7ppKGmotiFCfWMQvh2EbmNyZqK2adXdWs-CfwmvrzbuddlV3aMDHG3t2HGvZUAAWljOi0shp1vb-OFl_uZo/s320/upload1.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;携帯電話のメールアドレス情報を入力。&lt;br /&gt;
&lt;br /&gt;
ここでは Softbank の IPhone 用のアドレスを入力しました。&lt;br /&gt;
Vodafone となっているところが泣けます。&lt;br /&gt;
Username の値はメールアドレスの @ の左側部分を入力します。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4xd6lCVDYHYRDCGRW_rLdMCD_8r5Q1aMf7shbcYjz4J-xsHlifbGn38fb3V4-CM7n-K_7Zck7Xey8QW8pqyVBfo0zxBJlQnYqewQKnN1RpnD-yrLUcYwQXPvXiIDyARSbFNrz-QiWpoo/s1600/upload2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4xd6lCVDYHYRDCGRW_rLdMCD_8r5Q1aMf7shbcYjz4J-xsHlifbGn38fb3V4-CM7n-K_7Zck7Xey8QW8pqyVBfo0zxBJlQnYqewQKnN1RpnD-yrLUcYwQXPvXiIDyARSbFNrz-QiWpoo/s320/upload2.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;入力した携帯電話のメールアドレスに届けられたメールに記載されている Google App Engine Code の数字を確認して入力。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0l4clJdK3rRC1C5MmryJYPAfdeVY40ws-NJxyUR5L39AdULqdS_4CaWcT9D27t6STiqCvFvE4KvDyzfWtWFuBz2ash05e2xYBM86QGWCTnz8IBWLiI9W7i-9Spq9lR1KLgnVZlAQ9Cn0/s1600/upload3.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0l4clJdK3rRC1C5MmryJYPAfdeVY40ws-NJxyUR5L39AdULqdS_4CaWcT9D27t6STiqCvFvE4KvDyzfWtWFuBz2ash05e2xYBM86QGWCTnz8IBWLiI9W7i-9Spq9lR1KLgnVZlAQ9Cn0/s320/upload3.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;アプリケーション情報を入力。&lt;br /&gt;
&lt;br /&gt;
Application Identifier と Application Title を入力します。&lt;br /&gt;
将来的には、バグ管理システムにしたいので、Application Title は Bug Tracking System としました。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigOCOMTgEaHzmIGwk0dUH8nUUEblg2vaGk_SiYl2IIL1OCIHXZ2nsLsBZwLJVPV3V1cpMdCG4-p9ix_BTighyXbl9H8-jOjorjeCAhTcfL0cGJ90cvYvhcr1cMDG80_7MkF8cdIfbK_nw/s1600/upload4.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigOCOMTgEaHzmIGwk0dUH8nUUEblg2vaGk_SiYl2IIL1OCIHXZ2nsLsBZwLJVPV3V1cpMdCG4-p9ix_BTighyXbl9H8-jOjorjeCAhTcfL0cGJ90cvYvhcr1cMDG80_7MkF8cdIfbK_nw/s320/upload4.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;アプリケーション作成に成功すると最後に以下の画面が表示されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglValums52uUEygryNeHgatlXJHQaduLscJN8NlMn3ASo94WwIgc7ZAkFOUq8TK80_ogvnOlV-QBuIsWHBl3B7BYVMg3Ik4YyB_ByaX36HG6P0Yw_GIYxHxYySaiN2udcVmeli517VFLs/s1600/upload5.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;172&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglValums52uUEygryNeHgatlXJHQaduLscJN8NlMn3ASo94WwIgc7ZAkFOUq8TK80_ogvnOlV-QBuIsWHBl3B7BYVMg3Ik4YyB_ByaX36HG6P0Yw_GIYxHxYySaiN2udcVmeli517VFLs/s320/upload5.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;アプリケーションのアップロード。&lt;br /&gt;
&lt;br /&gt;
C:\Python_Test\helloworld\app.yaml にある application: の値を 5. で入力した Application Identifier の文字列に変更します。&lt;br /&gt;
&lt;br /&gt;
コマンド・プロンプトを起動し、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
青字が入力。&lt;br /&gt;
&lt;div style=&quot;background-color: black; color: white; padding: 5px; width: 550px;&quot;&gt;&lt;code&gt; &amp;gt; &lt;span style=&quot;color: #9fc5e8;&quot;&gt;cd C:\Python_Test&lt;/span&gt;&lt;br /&gt;
&amp;gt; &lt;span style=&quot;color: #9fc5e8;&quot;&gt;set HTTPS_PROXY=xxx.yyy.zzz.com:8080&lt;/span&gt;&lt;br /&gt;
&amp;gt; &lt;span style=&quot;color: #9fc5e8;&quot;&gt;appcfg.py update helloworld&lt;/span&gt;&lt;br /&gt;
Application: &lt;i style=&quot;color: #ea9999;&quot;&gt;application-id名&lt;/i&gt; ; version: 1.&lt;br /&gt;
Server: appengine.google.com.&lt;br /&gt;
Scanning files on local disk.&lt;br /&gt;
Initiating update.&lt;br /&gt;
2011-01-19 12:59:28,328 WARNING appengine_rpc.py:405 ssl module not found.&lt;br /&gt;
Without the ssl module, the identity of the remote host cannot be verified, and&lt;br /&gt;
connections may NOT be secure. To fix this, please install the ssl module from&lt;br /&gt;
http://pypi.python.org/pypi/ssl .&lt;br /&gt;
To learn more, see http://code.google.com/appengine/kb/general.html#rpcssl .&lt;br /&gt;
Email: &lt;span style=&quot;color: #9fc5e8;&quot;&gt;Google アカウントのメールアドレス&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Password for &lt;/code&gt;&lt;i style=&quot;color: #ea9999;&quot;&gt;&lt;code&gt;Google アカウントのメールアドレス&lt;/code&gt;&lt;/i&gt;&lt;code&gt;: &lt;span style=&quot;color: #9fc5e8;&quot;&gt;パスワード&lt;/span&gt;&lt;br /&gt;
Cloning 1 static file.&lt;br /&gt;
Cloning 9 application files.&lt;br /&gt;
Uploading 1 files and blobs.&lt;br /&gt;
Uploaded 1 files and blobs&lt;br /&gt;
Precompilation starting.&lt;br /&gt;
Precompilation completed.&lt;br /&gt;
Deploying new version.&lt;br /&gt;
Checking if new version is ready to serve.&lt;br /&gt;
Will check again in 1 seconds.&lt;br /&gt;
Checking if new version is ready to serve.&lt;br /&gt;
Will check again in 2 seconds.&lt;br /&gt;
Checking if new version is ready to serve.&lt;br /&gt;
Will check again in 4 seconds.&lt;br /&gt;
Checking if new version is ready to serve.&lt;br /&gt;
Closing update: new version is ready to start serving.&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;アクセス確認&lt;br /&gt;
&lt;br /&gt;
http://&amp;lt;application identifier&amp;gt;.appspot.com/ をブラウザでアクセスし、表示されることを確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWSMZ4k4wJVjKGeoTCsLHvqaVPe1tbOE9tHUjHUVTzfN8nD3ww41SvyL7wJYHefwXekrcx4oR412zr7MVjBBqX9UkmMinbWHZVkp179Nra1rRyqArPPom2bWIn7eDqHwhwGgFpanrjxa0/s1600/upload6.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWSMZ4k4wJVjKGeoTCsLHvqaVPe1tbOE9tHUjHUVTzfN8nD3ww41SvyL7wJYHefwXekrcx4oR412zr7MVjBBqX9UkmMinbWHZVkp179Nra1rRyqArPPom2bWIn7eDqHwhwGgFpanrjxa0/s320/upload6.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
そろそろ、目的である android バグ報告システムの構築に取り組めそうな予感です。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/860069766617270027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/860069766617270027'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/01/android_19.html' title='Androidアプリのバグ報告システム（アプリケーションのアップロード試してみる編）'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuMWAKBk7SFF0fjskxpjQIXY0WtNv6nhFpTCMAGUnUVmE4lJFZ5mDgG2JL7ppKGmotiFCfWMQvh2EbmNyZqK2adXdWs-CfwmvrzbuddlV3aMDHG3t2HGvZUAAWljOi0shp1vb-OFl_uZo/s72-c/upload1.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-8280862895311205329</id><published>2011-01-17T18:57:00.000+09:00</published><updated>2011-01-17T18:57:24.496+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="バグ報告システム"/><title type='text'>Androidアプリのバグ報告システム（Hello, World! 作成編）</title><content type='html'>バグ報告システムの構築は、まだまだ先になりそうです。。&lt;br /&gt;
&lt;br /&gt;
前回、開発環境として、Python 2.5.4 と Google App Engine 1.4.1 を導入したので、&lt;br /&gt;
以下のサイトを参考し、サンプル・アプリとして、Hello, World! を動かしてみます。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;Hello, World!&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/helloworld.html&quot;&gt;http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/helloworld.html&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;C:\Python_Test\helloworld　フォルダを作成。&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;C:\Python_Test\helloworld\helloworld.py ファイルを作成し、以下の内容を記述。&lt;br /&gt;
&lt;div style=&quot;background-color: white; border: 1px solid black; color: black; padding: 5px;&quot;&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;span class=&quot;kwd&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&#39;Content-Type: text/plain&#39;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&#39;Hello, world!&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;C:\Python_Test\helloworld\app.yaml ファイルを作成し、以下の内容を記述。&lt;br /&gt;
&lt;div style=&quot;background-color: white; border: 1px solid black; color: black; padding: 5px;&quot;&gt;&lt;pre class=&quot;prettyprint&quot;&gt;application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: helloworld.py
&lt;span class=&quot;str&quot;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Web サーバーを起動。&lt;br /&gt;
&lt;div style=&quot;background-color: black; color: white; padding: 5px; width: 550px;&quot;&gt;&lt;code&gt; &amp;gt; cd C:\Program Files\Google\google_appengine&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&amp;gt; dev_appserver.py C:\Python_Test\helloworld&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;ブラウザで http://localhost:8080/ にアクセス。&lt;br /&gt;
Hello, world! と表示されることを確認。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpWNfbtmE7xOXsxznBb_vh-GbsROIycYNzDkfkLsGpZdGOKFOUQT5E1-6jNVio-AnETWEjBiKtdMr0rpwOAP-fHnpZQDk7nt4ndykPOuo5W9-REc8OFcwXRrrOZYa6s4tD6MQiMX_xOwY/s1600/helloworld.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;189&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpWNfbtmE7xOXsxznBb_vh-GbsROIycYNzDkfkLsGpZdGOKFOUQT5E1-6jNVio-AnETWEjBiKtdMr0rpwOAP-fHnpZQDk7nt4ndykPOuo5W9-REc8OFcwXRrrOZYa6s4tD6MQiMX_xOwY/s320/helloworld.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
サイト通りにやれば簡単にできました。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/8280862895311205329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/8280862895311205329'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/01/androidhello-world.html' title='Androidアプリのバグ報告システム（Hello, World! 作成編）'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpWNfbtmE7xOXsxznBb_vh-GbsROIycYNzDkfkLsGpZdGOKFOUQT5E1-6jNVio-AnETWEjBiKtdMr0rpwOAP-fHnpZQDk7nt4ndykPOuo5W9-REc8OFcwXRrrOZYa6s4tD6MQiMX_xOwY/s72-c/helloworld.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-7548170838879827629</id><published>2011-01-17T18:28:00.001+09:00</published><updated>2011-01-17T18:30:04.318+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="バグ報告システム"/><title type='text'>Androidアプリのバグ報告システム（開発環境を構築編）</title><content type='html'>前回に引き続き、Google App Engine も Python は経験ありませんが、&lt;br /&gt;
バグ報告システムの構築に向けて、第一歩、開発環境を構築をしようと思います。&lt;br /&gt;
&lt;br /&gt;
以下のサイトを見ながら作業を進めていきます。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;開発環境&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/devenvironment.html&quot;&gt;http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/devenvironment.html&lt;/a&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;
開発環境の構築といっても、以下の２つを実施するだけです。&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Python 導入&lt;/li&gt;
&lt;li&gt;App Engine SDK 導入&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
それでは、早速、&quot;1. Python 導入&quot; を行います。&lt;br /&gt;
&lt;br /&gt;
Google のサイト上では、Python 2.5 をダウンロードしろ、とあるんですが、&lt;br /&gt;
Python のサイトを見ると、最新版として、Python 2.7.1 と 3.1.3 があります。（2011年1月17日時点)&lt;br /&gt;
&lt;br /&gt;
但し、ここで、2.7.1 を導入したところ、&quot;2. App Engine SDK 導入&quot; 開始時点で、&lt;br /&gt;
&quot; Please make sure Python 2.5 is installed.&quot; とエラーが表示され、導入ができません。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjudu077rbln-wCi2TOd62ZSkDo6hgXGPK8HETejYZPtR8_kE7RNb8CpZb3-NQl7UDXmIvm8M0Gt65ejnd4nDIylqRMMpsaSrst3kOkYxjXog7iQ-tCocUNTNrXNBlu_Ny-uO7b7hW0TBY/s1600/GAE_error.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjudu077rbln-wCi2TOd62ZSkDo6hgXGPK8HETejYZPtR8_kE7RNb8CpZb3-NQl7UDXmIvm8M0Gt65ejnd4nDIylqRMMpsaSrst3kOkYxjXog7iQ-tCocUNTNrXNBlu_Ny-uO7b7hW0TBY/s320/GAE_error.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
なので、2.5 の最新版である 2.5.4 (ファイル名は python-2.5.4.msi) を以下からダウンロードし、導入することにします。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;Python 2.5.4&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.python.org/download/releases/2.5.4/&quot;&gt;http://www.python.org/download/releases/2.5.4/&lt;/a&gt;&lt;/blockquote&gt;本当は 2.5.5 が 2.5 系の最新ですが、2.5.5 はソースしかないため、バイナリが提供されている 2.5.4 を使うことにしています。 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Python 2.5.4 のインストールは、デフォルトのまま次に進んでいくだけですが、&lt;br /&gt;
念のため、画面コピー付きで手順を貼っておきます。&lt;br /&gt;
&lt;br /&gt;
(1)&amp;nbsp; python-2.5.4.msi を実行。Next を押す。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPwy_bndX9NVWDxIhY1HvndTc9zzLSTzWGmZCmgPkv8Dn9F7F8E4dw78e0hhGe_RvTukgksu6ib0Cv_EOakNlQNzEgZEa0bcNkOYRCtL1iNioa7MmjUc2F2qZkWe7lZoX4czo_nXYMtV4/s1600/01.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPwy_bndX9NVWDxIhY1HvndTc9zzLSTzWGmZCmgPkv8Dn9F7F8E4dw78e0hhGe_RvTukgksu6ib0Cv_EOakNlQNzEgZEa0bcNkOYRCtL1iNioa7MmjUc2F2qZkWe7lZoX4czo_nXYMtV4/s320/01.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
(2)&amp;nbsp; 導入先は C:\Python27\ (デフォルト値) のままにする。 &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKBD-JZFonxoZs-F4PDE5qXmA0wwfdxxWSpEC-zQDJru_etZ_PviI-K7kB1KkF692pZ39dOn8DX-AhRj7w1UnagZiegw339OYAim3vcTYDKWjpqWwOOawpHLamEBj9yquKJn5vZb2HVRo/s1600/02.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKBD-JZFonxoZs-F4PDE5qXmA0wwfdxxWSpEC-zQDJru_etZ_PviI-K7kB1KkF692pZ39dOn8DX-AhRj7w1UnagZiegw339OYAim3vcTYDKWjpqWwOOawpHLamEBj9yquKJn5vZb2HVRo/s320/02.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(3)&amp;nbsp; 全部 (デフォルト) を導入する。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3zcGrb3ieK3pw_QH9fcoUzKti5i02DaXKQGV0eO-_OB15H5Zg5H0s8Pxd72r6D7CvuOUcrcaFkJvfoJYFk6ifEyQXqGaYOpiX0lxPLDS5VhJnafOcgUwtrUTGghwYuEucfvfHzoC2ZcA/s1600/03.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3zcGrb3ieK3pw_QH9fcoUzKti5i02DaXKQGV0eO-_OB15H5Zg5H0s8Pxd72r6D7CvuOUcrcaFkJvfoJYFk6ifEyQXqGaYOpiX0lxPLDS5VhJnafOcgUwtrUTGghwYuEucfvfHzoC2ZcA/s320/03.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(4)&amp;nbsp; インストールが開始される。30 秒くらい待つ。 &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5bhtcdnoVZH4SXN0QelCJc_wFSVHPnKuzAPsjSnFO7oGvy-KggTw9aSP05tCTkAfsFMyN-kReqLVVoCz73voxe-XtFZonVqC-zqBqLpIHlIsK5wmXHvCoPgxjCrdceAAmxW-QIhp97vc/s1600/04.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5bhtcdnoVZH4SXN0QelCJc_wFSVHPnKuzAPsjSnFO7oGvy-KggTw9aSP05tCTkAfsFMyN-kReqLVVoCz73voxe-XtFZonVqC-zqBqLpIHlIsK5wmXHvCoPgxjCrdceAAmxW-QIhp97vc/s320/04.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(5)&amp;nbsp; インストール完了。 &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBBd4oIhwNPyO22Vo7U1Wy5MKNBk0fumZZgbefaLC8t_YeC9Z35zmGWnuy6U1bBAKdu_XQOcW8NmM91F-f8ed9JQOd8lYdbTFPju-gPxWsFqN651mW1qgCk0tGQvevr2-Hbdizx2R7Cpk/s1600/05.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBBd4oIhwNPyO22Vo7U1Wy5MKNBk0fumZZgbefaLC8t_YeC9Z35zmGWnuy6U1bBAKdu_XQOcW8NmM91F-f8ed9JQOd8lYdbTFPju-gPxWsFqN651mW1qgCk0tGQvevr2-Hbdizx2R7Cpk/s320/05.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
次に、 App Engine SDK をインストールします。&lt;br /&gt;
&lt;br /&gt;
以下のサイトより、Google App Engine SDK for Python をダウンロードします。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;ダウンロード&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ja/appengine/downloads.html&quot;&gt;http://code.google.com/intl/ja/appengine/downloads.html&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
2011年1月17日時点の最新 GoogleAppEngine-1.4.1.msi をダウンロードしました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(1)&amp;nbsp; GoogleAppEngine-1.4.1.msi を実行。Python 2.5 found. と表示される。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguYAss1xtJl8bs9fkh0U1sXwdUFpP0A-f0aRhW_HUDPw3FdWGIFrsfiNPmfHa0BYlPladT-Z8I6owJV-SUDl0e_41NMaxwARrhEjFaY7bR5iIMG2NPjo-tMam2mggzg_OgBl4aSM0r-Ck/s1600/GAE01.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguYAss1xtJl8bs9fkh0U1sXwdUFpP0A-f0aRhW_HUDPw3FdWGIFrsfiNPmfHa0BYlPladT-Z8I6owJV-SUDl0e_41NMaxwARrhEjFaY7bR5iIMG2NPjo-tMam2mggzg_OgBl4aSM0r-Ck/s320/GAE01.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(2) 同意するにチェックを入れて、次へ。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQyrwqZHDHUY8A-SBM7TzKZkk9stKQOpqn_Zj2-PaK0TYd5Bw6zoMJQi8ys7MvtwyEJxyiX6nZOj-mzZMbEDdlzzAVVa9FP_4S39MLZi0CPrlWyqcUHJ2UcXtZMOwvNccrVDaSOSGAQVY/s1600/GAE02.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQyrwqZHDHUY8A-SBM7TzKZkk9stKQOpqn_Zj2-PaK0TYd5Bw6zoMJQi8ys7MvtwyEJxyiX6nZOj-mzZMbEDdlzzAVVa9FP_4S39MLZi0CPrlWyqcUHJ2UcXtZMOwvNccrVDaSOSGAQVY/s320/GAE02.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(3) デフォルトのまま次へ。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM41HuJI33_AJObNvCtnWIh-aVoE-eyXPVtWf_x0rtRXKAtx127aQk_24kychR_evsxqOeNJWW51CO-0XHEfwF6RkgqwcWMwZuA05t8PZE2EONd3kM7uv3htlGq8o83cdC5bDAC4n3PeE/s1600/GAE03.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM41HuJI33_AJObNvCtnWIh-aVoE-eyXPVtWf_x0rtRXKAtx127aQk_24kychR_evsxqOeNJWW51CO-0XHEfwF6RkgqwcWMwZuA05t8PZE2EONd3kM7uv3htlGq8o83cdC5bDAC4n3PeE/s320/GAE03.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(4) 次へ。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibFhyKhQxKZtGlkqlHFavI-qicepAWwxi7DlpX_lQOvgBjEemOuqWh4K7cFreS7UvwMEsisOXV0ATrtw5QobtkW6XTtxNrZUkl3_lS5O832lmKfmkDd92xmeWlgADORBvm4N7h7DDeNfE/s1600/GAE04.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibFhyKhQxKZtGlkqlHFavI-qicepAWwxi7DlpX_lQOvgBjEemOuqWh4K7cFreS7UvwMEsisOXV0ATrtw5QobtkW6XTtxNrZUkl3_lS5O832lmKfmkDd92xmeWlgADORBvm4N7h7DDeNfE/s320/GAE04.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(5) インストールが開始される。30 秒くらい待つ。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2CwsL31IZ6pkOh5nHKJQ85OFEk2ho080MBEidpGmibqt52FQHp5jDch5m_-bkKHyK9-Xz4CKlvhlxc7ABHG6SDSRyTUr5fHxHw6_NxKeUfwY6lib9u23fBceCTGtDk6TDk57femFRR-k/s1600/GAE05.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2CwsL31IZ6pkOh5nHKJQ85OFEk2ho080MBEidpGmibqt52FQHp5jDch5m_-bkKHyK9-Xz4CKlvhlxc7ABHG6SDSRyTUr5fHxHw6_NxKeUfwY6lib9u23fBceCTGtDk6TDk57femFRR-k/s320/GAE05.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(6) インストール完了。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpzoKn6Bavz_sdkmpZCLFSGCuwmrurMcKwu3zHu0DX4o_B1n4bOtzB8OlmwHIsbvsyr2l51wWJmWa2XHOeL8pt4VDndcliD1cYvINAFe0k1_mto25ByQclfwmVpbj6mUQnv2b-dH4Mn4k/s1600/GAE06.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpzoKn6Bavz_sdkmpZCLFSGCuwmrurMcKwu3zHu0DX4o_B1n4bOtzB8OlmwHIsbvsyr2l51wWJmWa2XHOeL8pt4VDndcliD1cYvINAFe0k1_mto25ByQclfwmVpbj6mUQnv2b-dH4Mn4k/s320/GAE06.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
以上で、開発環境の導入は完了です。&lt;br /&gt;
&lt;br /&gt;
次回は、Hello, World! を動かしてみます。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/7548170838879827629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/7548170838879827629'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/01/android_17.html' title='Androidアプリのバグ報告システム（開発環境を構築編）'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjudu077rbln-wCi2TOd62ZSkDo6hgXGPK8HETejYZPtR8_kE7RNb8CpZb3-NQl7UDXmIvm8M0Gt65ejnd4nDIylqRMMpsaSrst3kOkYxjXog7iQ-tCocUNTNrXNBlu_Ny-uO7b7hW0TBY/s72-c/GAE_error.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-4636060788728674722</id><published>2011-01-17T16:49:00.002+09:00</published><updated>2011-01-17T16:53:20.525+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="バグ報告システム"/><title type='text'>Androidアプリのバグ報告システム（構築したい動機芽生え編）</title><content type='html'>愛用させて頂いているアプリ Simeji の作成者さんのサイトで、&lt;br /&gt;
Android アプリのバグ報告システムに関する情報が公開されています。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;Androidアプリのバグ報告システムを考える&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.adamrocker.com/blog/288/bug-report-system-for-android.html&quot;&gt;http://www.adamrocker.com/blog/288/bug-report-system-for-android.html&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
ふむふむ。&lt;br /&gt;
アプリ公開に向けて、このバグ報告システムの構築は非常に魅力です！&lt;br /&gt;
&lt;br /&gt;
ぜひ、このシステムを導入したい！&lt;br /&gt;
&lt;br /&gt;
と思ったのですが、&lt;br /&gt;
そもそも Google App Engine って名前しか知らない。。&lt;br /&gt;
Python も、ストリート・ファイターⅡに出てくるバイソンに名前が似ている、ということくらいしか知らない。。 &lt;br /&gt;
&lt;br /&gt;
ということで、以下のサイトを読んだりして、Google App Engine ってそもそも何？なところから調べてみることにしました。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;Google App Engine について&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ja/appengine/docs/whatisgoogleappengine.html&quot;&gt;http://code.google.com/intl/ja/appengine/docs/whatisgoogleappengine.html&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
要点としては、以下のような感じでしょうか。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;要は Web アプリケーションだ。&lt;/li&gt;
&lt;li&gt;実行場所は Google のインフラ上だ。&lt;/li&gt;
&lt;li&gt;開発言語は Java か Python (パイソン) だ。 &lt;/li&gt;
&lt;li&gt;Google App Engine は従量課金制だ。但し、ストレージ/CPUなどリソース使用の制限付きで無料で使うことができる。&lt;/li&gt;
&lt;li&gt;BigTableという非リレーショナルなデータベースが用意されている。 &lt;/li&gt;
&lt;li&gt;開発時は、SDK に含まれる開発用Webサーバーでテストを行う。&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
なんとなく、Google App Engine なるものが分かった気がしてきたので、&lt;br /&gt;
次は、開発環境構築を行ってみようと思います。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4636060788728674722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4636060788728674722'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/01/android.html' title='Androidアプリのバグ報告システム（構築したい動機芽生え編）'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-4024799185793130824</id><published>2011-01-12T18:20:00.003+09:00</published><updated>2011-01-12T18:22:45.026+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="開発"/><title type='text'>Google マップの ItemizedOverlay でアイコンが表示されない現象について</title><content type='html'>android developers の以下のサイトですが、&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hello View, Google Map View&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://developer.android.com/resources/tutorials/views/hello-mapview.html&quot;&gt;http://developer.android.com/resources/tutorials/views/hello-mapview.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ItemizedOverlay の派生クラスである HelloItemizedOverlay に、&lt;br /&gt;
コンストラクタが２つ定義されています。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;boundCenterBottom()を使用するコンストラクタ&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;&amp;nbsp;public HelloItemizedOverlay(Drawable defaultMarker) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super(boundCenterBottom(defaultMarker));&lt;br /&gt;
&amp;nbsp;}&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote&gt;boundCenterBottom()を使用しないコンストラクタ&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;&amp;nbsp;public HelloItemizedOverlay(Drawable defaultMarker, Context context) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super(defaultMarker);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mContext = context;&lt;br /&gt;
&amp;nbsp;}&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;
このうち、boundCenterBottom()を使用しないコンストラクタを使用すると、&lt;br /&gt;
アイコン(ドロイド君)が表示されません (つω･｡)うぅぅ…&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HelloItemizedOverlay.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.kochi.GoogleMapOverlayTest;

import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class HelloItemizedOverlay extends ItemizedOverlay&amp;lt;OverlayItem&amp;gt; {

  private ArrayList&amp;lt;OverlayItem&amp;gt; mOverlays = new ArrayList&amp;lt;OverlayItem&amp;gt;();
  private Context mContext;
&lt;span style=&quot;color: blue;&quot;&gt;
  public HelloItemizedOverlay(Drawable defaultMarker) {
    super(boundCenterBottom(defaultMarker));
  }

  public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
    super(defaultMarker);
    mContext = context;
  }&lt;/span&gt;
  @Override
  protected OverlayItem createItem(int i) {
    return mOverlays.get(i);
  }

  @Override
  public int size() {
    return mOverlays.size();
  }

  public void addOverlay(OverlayItem overlay) {
    mOverlays.add(overlay);
    populate();
  }

  @Override
  protected boolean onTap(int index) {
    OverlayItem item = mOverlays.get(index);
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
    dialog.setTitle(item.getTitle());
    dialog.setMessage(item.getSnippet());
    dialog.show();
    return true;
  }

}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;GoogleMapOverlayTestActivity.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.kochi.GoogleMapOverlayTest;

import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import android.graphics.drawable.Drawable;
import android.os.Bundle;

public class GoogleMapOverlayTestActivity extends MapActivity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    MapView mapView = (MapView) findViewById(R.id.mapview);

    // ビルドイン-ズームコントローラー使用
    mapView.setBuiltInZoomControls(true);

    // 航空写真モードに変更
    mapView.setSatellite(true);

    // Droidアイコン表示
    List&amp;lt;Overlay&amp;gt; mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
    
    &lt;span style=&quot;color: blue;&quot;&gt;// こっちは表示される。
    HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);

    // こっちだと表示されない。
    // HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, GoogleMapOverlayTestActivity.this);&lt;/span&gt;
    GeoPoint point = new GeoPoint(19240000,-99120000);
    OverlayItem overlayitem = new OverlayItem(point, &quot;Hola, Mundo!&quot;, &quot;I&#39;m in Mexico City!&quot;);

    itemizedoverlay.addOverlay(overlayitem);
    mapOverlays.add(itemizedoverlay);

  }

 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 }
}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;b&gt;で&lt;/b&gt;&lt;/span&gt;、なんでか～？と調べたところ、&lt;br /&gt;
&lt;br /&gt;
そもそも Drawable に対し、setBounds() の実行が必要で、&lt;br /&gt;
直接、Drawable に対し、setBounds() を実行するか、または、&lt;br /&gt;
boundCenter() または boundCenterBottom() を実行する必要があるようです。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;a href=&quot;http://developer.android.com/reference/android/graphics/drawable/Drawable.html&quot;&gt;Drawable より抜粋&lt;/a&gt;&lt;br /&gt;
The setBounds(Rect) method &lt;var&gt;must&lt;/var&gt; be called to tell the      Drawable where it is drawn and how large it should be.  All Drawables      should respect the requested size, often simply by scaling their      imagery.  A client can find the preferred size for some Drawables with      the getIntrinsicHeight() and getIntrinsicWidth() methods.       &lt;/blockquote&gt;&lt;br /&gt;
対応としては、素直に、boundCenter() または boundCenterBottom() を使えばよいと思うのですが、&lt;br /&gt;
setBounds() を使用する方法でも構いません。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;GoogleMapOverlayTestActivity.java の抜粋 （setBounds()の修正案）&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;// setBounds追加すると表示される。
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, GoogleMapOverlayTestActivity.this);&lt;/pre&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4024799185793130824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4024799185793130824'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/01/google-itemizedoverlay.html' title='Google マップの ItemizedOverlay でアイコンが表示されない現象について'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-2717853876771813259</id><published>2011-01-07T15:55:00.005+09:00</published><updated>2011-01-07T16:02:41.353+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="開発"/><title type='text'>Intent で Parcelable を実装した自作オブジェクトの受け渡しをしてみた</title><content type='html'>Activity から別の Activity を起動する際に、&lt;br /&gt;
自作クラスのオブジェクトの受け渡しについてサンプル・アプリを作ってみました。&lt;br /&gt;
&lt;br /&gt;
Intent のメソッド一覧を見ていると、&lt;br /&gt;
putExtra(String name, &amp;lt;何か&amp;gt;) で、Intent にいろんな値をセットできるようになっています。&lt;br /&gt;
&lt;br /&gt;
それを呼び出された側の Activity では、get&amp;lt;何たら&amp;gt;Extra(String name) で&lt;br /&gt;
値を取得できるようになっています。&lt;br /&gt;
&lt;br /&gt;
この中に、putExtra(String name, Parcelable value) と getParcelableExtra(String name) があります。&lt;br /&gt;
&lt;br /&gt;
Parcelable を自作クラスに適用すれば Activity 間で、オブジェクトの受け渡しができるだろう、&lt;br /&gt;
ということで、作ってみたサンプル・アプリが以下になります。&lt;br /&gt;
&lt;br /&gt;
アクティビティ間でオブジェクトの受け渡しを行うということで、&lt;br /&gt;
メインとサブの２つのアクティビティを用意しました。&lt;br /&gt;
&lt;br /&gt;
メイン・アクティビティ (IntentParcelableTestActivity) にはボタンを１個配置しています。&lt;br /&gt;
&lt;br /&gt;
このボタンを押すと、サブ・アクティビティ (SubActivity) を起動するようになっており、&lt;br /&gt;
このとき、Pacelable インタフェースを実装した自作クラス (ParcelableTest) のオブジェクトを渡すようにしました。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; メイン・アクティビティ画面&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnyBKzAmtmkjib0e_OCgB3YR5zViOyl2JPCiLcshZwTpSqkwsiiwPTds4ndkeUvke51_dzZB8_VAzF0zaWGU3fz8nceGrros_3DSCXNeqYX0Xs8Y_DYSCUVvIK6xOPYVmJsci4NHxLEI4/s1600/parcelable1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnyBKzAmtmkjib0e_OCgB3YR5zViOyl2JPCiLcshZwTpSqkwsiiwPTds4ndkeUvke51_dzZB8_VAzF0zaWGU3fz8nceGrros_3DSCXNeqYX0Xs8Y_DYSCUVvIK6xOPYVmJsci4NHxLEI4/s320/parcelable1.png&quot; width=&quot;213&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
サブ・アクティビティでは、受け取った ParcelableTest オブジェクトより、文字列 (String) と画像 (Bitmap) を取得し、表示します。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; サブ・アクティビティ画面&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs3vxipj7IOZONorxLrHzdp77zoOzAkTEtotflhbuuDbuwWl1JTMOox88yUmgrTfhXOErTzHhV82FOING8eFsY4qq-tYug702j2OHa25HRf5XhR1bf9v8lGjardRqOBNZzVXbC9CCoau0/s1600/parcelable2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs3vxipj7IOZONorxLrHzdp77zoOzAkTEtotflhbuuDbuwWl1JTMOox88yUmgrTfhXOErTzHhV82FOING8eFsY4qq-tYug702j2OHa25HRf5XhR1bf9v8lGjardRqOBNZzVXbC9CCoau0/s320/parcelable2.png&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
以下はソースです。&lt;br /&gt;
&lt;br /&gt;
まずは、メイン・アクティビティのレイアウト・ファイルです。&lt;br /&gt;
ボタン１個しかありません。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;main.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;/pre&gt;&lt;pre&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
  android:orientation=&quot;vertical&quot;
  android:layout_width=&quot;fill_parent&quot;
  android:layout_height=&quot;fill_parent&quot;
  &amp;gt;
&amp;lt;Button
  android:id=&quot;@+id/parceble_button&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  android:text=&quot;Parcelableの受け渡しテスト&quot;
  /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
次は、アクティビティ間で受け渡しをするオブジェクト用クラスです。&lt;br /&gt;
ポイントは以下の２つです。&lt;br /&gt;
&lt;ol&gt;&lt;li&gt; Parcelable.Creator インターフェースを実装したオブジェクトを CREATOR という名前で作成する。&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;writeToParcel(Parcel dest, int flags) と ParcelableTest(Parcel in) で読み書きするオブジェクトの順番は合わせる。&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
1. は android の API Reference にそうしろと書いてあります。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;Parcelable&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://developer.android.com/reference/android/os/Parcelable.html&quot;&gt;http://developer.android.com/reference/android/os/Parcelable.html&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
2. ですが、順番が合っていないと以下の Exception が発生しました。&lt;br /&gt;
(一部文字化けたままを引用)&lt;br /&gt;
&lt;blockquote&gt;&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: Parcelable縺ｮ繝・せ繝・&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; at android.os.Parcel.readParcelable(Parcel.java:1822)&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;b&gt;ParcelableTest.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.taki.parceble;

import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;

public class ParcelableTest implements Parcelable {
  public String mTitle;
  public Bitmap mBitmap;
  public static final String PARCELABLE_TEST = &quot;ParcelableTest&quot;;

  public ParcelableTest(String title, Bitmap bitmap) {
    this.mTitle = title;
    this.mBitmap = bitmap;
  }

  @Override
  public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(mTitle);
    dest.writeParcelable(mBitmap, flags);
  }

  public static final Parcelable.Creator&amp;lt;ParcelableTest&amp;gt; CREATOR = new Parcelable.Creator&amp;lt;ParcelableTest&amp;gt;() {
    public ParcelableTest createFromParcel(Parcel in) {
      return new ParcelableTest(in);
    }

    public ParcelableTest[] newArray(int size) {
      return new ParcelableTest[size];
    }
  };

  private ParcelableTest(Parcel in) {
    mTitle = in.readString();
    mBitmap = in.readParcelable(Bitmap.class.getClassLoader());
  }

}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
次はメイン・アクティビティです。&lt;br /&gt;
&lt;br /&gt;
画像ファイルはデフォルトで用意される icon.png (ドロイド君の画像) を利用しています。&lt;br /&gt;
&lt;br /&gt;
ボタンを押すと、上記 ParcelableTest オブジェクトを作成し、Intent にセットして、&lt;br /&gt;
SubActivity を起動しています。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;IntentParcelableTestActivity.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.taki.parceble;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class IntentParcelableTestActivity extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources r = getResources();
    final Bitmap b = BitmapFactory.decodeResource(r, R.drawable.icon);

    Button btn = (Button) findViewById(R.id.parceble_button);
    btn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {

        ParcelableTest p = new ParcelableTest(&quot;Parcelableのテスト&quot;, b);
        Intent i = new Intent();
        i.putExtra(ParcelableTest.PARCELABLE_TEST, p);
        i.setClass(IntentParcelableTestActivity.this, SubActivity.class);
        startActivity(i);
      }
    });
  }
}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
サブ・アクティビティのレイアウト・ファイルです。&lt;br /&gt;
文字列をセットする TextView (id=title) と画像をセットする ImageView (id=image) を配置しています。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sub.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
  android:orientation=&quot;vertical&quot;
  android:layout_width=&quot;fill_parent&quot;
  android:layout_height=&quot;fill_parent&quot;
  &amp;gt;

&amp;lt;TextView
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  android:text=&quot;Parcelableデータを以下に表示&quot;
  /&amp;gt;

&amp;lt;TextView
  android:id=&quot;@+id/title&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  /&amp;gt;

&amp;lt;ImageView
  android:id=&quot;@+id/image&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
サブ・アクティビティです。&lt;br /&gt;
&lt;br /&gt;
Intent より ParcelableTest オブジェクトを取り出し、&lt;br /&gt;
画面上の TextView と ImageView にセットしています。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SubActivity.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.taki.parceble;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class SubActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.sub);

    Intent i = getIntent();
    ParcelableTest p = i.getParcelableExtra(ParcelableTest.PARCELABLE_TEST);

    TextView title = (TextView) findViewById(R.id.title);
    title.setText(p.mTitle);

    ImageView image = (ImageView) findViewById(R.id.image);
    image.setImageBitmap(p.mBitmap);

  }
}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
最後に、マニフェスト・ファイルに、SubActivity を登録して完成です。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;AndroidManifest.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    package=&quot;jp.taki.parceble&quot;
    android:versionCode=&quot;1&quot;
    android:versionName=&quot;1.0&quot;&amp;gt;
  &amp;lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&amp;gt;
    &amp;lt;activity android:name=&quot;.IntentParcelableTestActivity&quot;
          android:label=&quot;@string/app_name&quot;&amp;gt;
      &amp;lt;intent-filter&amp;gt;
        &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;
        &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
      &amp;lt;/intent-filter&amp;gt;
    &amp;lt;/activity&amp;gt;
    &amp;lt;activity android:name=&quot;.SubActivity&quot;
          android:label=&quot;@string/app_name&quot; /&amp;gt;
  &amp;lt;/application&amp;gt;
  &amp;lt;uses-sdk android:minSdkVersion=&quot;4&quot; /&amp;gt;

&amp;lt;/manifest&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
まあ、今回のように、String 1個と Bitmap 1個を受け渡すだけなら、それぞれ、&lt;br /&gt;
putExtra(String name, String value) と putExtra(String name, Parcelable value) を呼び出せば、&lt;br /&gt;
もっと簡単だと思うんですけど。。（;￣ー￣A ｱｾｱｾ・・・</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/2717853876771813259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/2717853876771813259'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2011/01/intent-parcelable.html' title='Intent で Parcelable を実装した自作オブジェクトの受け渡しをしてみた'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnyBKzAmtmkjib0e_OCgB3YR5zViOyl2JPCiLcshZwTpSqkwsiiwPTds4ndkeUvke51_dzZB8_VAzF0zaWGU3fz8nceGrros_3DSCXNeqYX0Xs8Y_DYSCUVvIK6xOPYVmJsci4NHxLEI4/s72-c/parcelable1.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-3408452205475000187</id><published>2010-12-30T13:10:00.005+09:00</published><updated>2010-12-30T13:28:42.088+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="開発"/><title type='text'>Resource is not public</title><content type='html'>システムが持つリソース・ファイル (各種 XML ファイルや PNG ファイルなど) は参照できるものと参照できないものがあるようです。&lt;br /&gt;
&lt;br /&gt;
参照できない場合、Eclipse のコンソールに以下のようなエラーが出力されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;[2010-12-30 11:15:19 - XXXXXXX Proj] C:\android\workspace\XXXXXXX Proj\res\values\styles.xml:77: error: Error: Resource is not public. (at &#39;android:background&#39; with value &#39;@android:drawable/btn_circle&#39;).&lt;/div&gt;&lt;br /&gt;
@android:drawable/btn_circle を指定して、&lt;br /&gt;
&amp;lt;android SDK導入ディレクトリ&amp;gt;\platforms\android-X\data\res\drawable\btn_circle.xml (android-X の X は API レベル) を参照しようとしているのですが、&quot;public じゃないよ&quot; と叱られています。&lt;br /&gt;
&lt;br /&gt;
public かどうかは、その名の通り public.xml で確認できます。&lt;br /&gt;
&lt;blockquote&gt;(android 2.2 の場合)&lt;br /&gt;
&amp;lt;android SDK導入ディレクトリ&amp;gt;\platforms\android-8\data\res\values\public.xml&lt;/blockquote&gt;&lt;br /&gt;
ちなみに、public でなくとも、@*android:drawable/btn_circle のように、@ の後ろに * (アスタリスク) を入れると参照できるようになります。&lt;br /&gt;
&lt;br /&gt;
但し、以下のメーリング・リストのやりとりを見ると、public でないものは、頻繁に変更が入るみたいなので、基本的には使用しないほうが無難なようです。&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;what star (*) means in &quot;@*android:drawable/&quot;?&lt;/b&gt; &lt;br /&gt;
&lt;a href=&quot;https://groups.google.com/group/android-developers/browse_thread/thread/d1e06ce82e1f745b?fwc=1&amp;amp;hl=ja&quot;&gt;https://groups.google.com/group/android-developers/browse_thread/thread/d1e06ce82e1f745b?fwc=1&amp;amp;hl=ja &lt;/a&gt;&lt;/blockquote&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3408452205475000187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/3408452205475000187'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2010/12/resource-is-not-public.html' title='Resource is not public'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-8530191551735077897</id><published>2010-12-24T15:08:00.005+09:00</published><updated>2010-12-25T11:12:37.370+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="開発"/><title type='text'>java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor</title><content type='html'>png などの画像上に drawText() で文字を書こうとして、&lt;br /&gt;
以下のような処理を記述すると、4行目の drawText() で、タイトルの例外メッセージが発生します。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;Resources r = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(r, R.drawable.icon);
Canvas canvas = new Canvas(bitmap);
canvas.drawText(...);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
bitmap が immutable (変えられない) ことが原因です。&lt;br /&gt;
mutable か immutable かは、bitmap.isMutable() で true か false かで確認できます。&lt;br /&gt;
&lt;br /&gt;
じゃあ、どうやって mutable にするかというと、&lt;br /&gt;
bitmap.copy(Bitmap.Config config, boolean isMutable) を使って、&lt;br /&gt;
mutable な Bitmap を新規に作成します。&lt;br /&gt;
&lt;br /&gt;
（&lt;span style=&quot;color: blue;&quot;&gt;青字&lt;/span&gt;部分が修正内容）&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;Resources r = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(r, R.drawable.icon);
&lt;span style=&quot;color: blue;&quot;&gt;Bitmap copy = bitmap.copy(Bitmap.Config.ARGB_8888, true);&lt;/span&gt;
Canvas canvas = new Canvas(&lt;span style=&quot;color: blue;&quot;&gt;copy&lt;/span&gt;);
canvas.drawText(...);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
こうすると、うまく処理できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちなみに、、&lt;br /&gt;
&lt;br /&gt;
bitmap.copy(Bitmap.Config config, boolean isMutable) の第１引数ですが、&lt;br /&gt;
ALPHA_8、ARGB_4444、ARGB_8888、RGB_565 のいずれかを選択できます。&lt;br /&gt;
&lt;br /&gt;
ARGB_4444 や RGB_565 を使えば、画像のバイト数を節約できそうです。&lt;br /&gt;
画質優先の場合には、ARGB_8888 を使う、というところでしょうか。&lt;br /&gt;
ALPHA_8 は、よく分かりません。。&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;3&quot; cellspacing=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;     &lt;td bgcolor=&quot;#bbbbff&quot;&gt;項目&lt;/td&gt;     &lt;td bgcolor=&quot;#bbbbff&quot;&gt;1 ピクセルあたりのバイト数&lt;/td&gt;   &lt;td bgcolor=&quot;#bbbbff&quot;&gt;コピー内容(多分。確証はありません。)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;ALPHA_8&lt;/td&gt;     &lt;td&gt;1 バイト&lt;/td&gt;   &lt;td&gt;アルファ値のみ 8 ビット。&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;ARGB_4444&amp;nbsp;&lt;/td&gt;     &lt;td&gt;2 バイト&amp;nbsp;&lt;/td&gt;   &lt;td&gt;ARGB それぞれ 4 ビットずつ。&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;ARGB_8888&lt;/td&gt;     &lt;td&gt;4 バイト&lt;/td&gt;   &lt;td&gt;ARGB それぞれ 8 ビットずつ。&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;RGB_565&lt;/td&gt;     &lt;td&gt;2 バイト&lt;/td&gt;   &lt;td&gt;RGB が 5/6/5 ビット。&lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
以下は、比較用に作成したサンプルです。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRz8wmbtJAbcu3uCK7W9D_AbHQdCVw_5UB6KMhXajONuH2Fc7a7LPSp5o7U5zLVTT8F388pnNJYKxEhd0Em6iLMUwUM22Ivbu6iTvw7Moq4nAI91gJp5a4AHzvXW2SIUkc-VIoHIAlTSs/s1600/bitmapcopy.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRz8wmbtJAbcu3uCK7W9D_AbHQdCVw_5UB6KMhXajONuH2Fc7a7LPSp5o7U5zLVTT8F388pnNJYKxEhd0Em6iLMUwUM22Ivbu6iTvw7Moq4nAI91gJp5a4AHzvXW2SIUkc-VIoHIAlTSs/s320/bitmapcopy.png&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
上から、以下の画像を表示させています。&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;オリジナル画像&lt;/li&gt;
&lt;li&gt;ALPHA_8　（表示されていませんが。。）&lt;/li&gt;
&lt;li&gt;ARGB_4444&lt;/li&gt;
&lt;li&gt;ARGB_8888&lt;/li&gt;
&lt;li&gt;RGB_565&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
以下は、ソースです。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;main.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
  android:orientation=&quot;vertical&quot;
  android:layout_width=&quot;fill_parent&quot;
  android:layout_height=&quot;fill_parent&quot;
  &amp;gt;
&amp;lt;ImageView
  android:id=&quot;@+id/imageview1&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  /&amp;gt;
&amp;lt;ImageView
  android:id=&quot;@+id/imageview2&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  /&amp;gt;
&amp;lt;ImageView
  android:id=&quot;@+id/imageview3&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  /&amp;gt;
&amp;lt;ImageView
  android:id=&quot;@+id/imageview4&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  /&amp;gt;
&amp;lt;ImageView
  android:id=&quot;@+id/imageview5&quot;
  android:layout_width=&quot;wrap_content&quot;
  android:layout_height=&quot;wrap_content&quot;
  /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;BitmapCopyActivity.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.sample.rtaki;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageView;

public class BitmapCopyActivity extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    //paint.setAlpha(200);
    paint.setTextSize(12);

    ImageView v1= (ImageView) findViewById(R.id.imageview1);
    Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.flag);
    v1.setImageBitmap(image);

    ImageView v2 = (ImageView) findViewById(R.id.imageview2);
    Bitmap copy1 = image.copy(Bitmap.Config.ALPHA_8, true);
    Canvas c2 = new Canvas(copy1);
    c2.drawText(&quot;ALPHA_8 - &quot; + copy1.getRowBytes()/copy1.getWidth()*1.0, 25, 33, paint);
    v2.setImageBitmap(copy1);

    ImageView v3 = (ImageView) findViewById(R.id.imageview3);
    Bitmap copy2 = image.copy(Bitmap.Config.ARGB_4444, true);
    Canvas c3 = new Canvas(copy2);
    c3.drawText(&quot;ARGB_4444 - &quot; + copy2.getRowBytes()/copy2.getWidth()*1.0, 25, 33, paint);
    v3.setImageBitmap(copy2);

    ImageView v4 = (ImageView) findViewById(R.id.imageview4);
    Bitmap copy3 = image.copy(Bitmap.Config.ARGB_8888, true);
    Canvas c4 = new Canvas(copy3);
    c4.drawText(&quot;ARGB_8888 - &quot; + copy3.getRowBytes()/copy3.getWidth()*1.0, 25, 33, paint);
    v4.setImageBitmap(copy3);

    ImageView v5 = (ImageView) findViewById(R.id.imageview5);
    Bitmap copy4 = image.copy(Bitmap.Config.RGB_565, true);
    Canvas c5 = new Canvas(copy4);
    c5.drawText(&quot;RGB_565 - &quot; + copy4.getRowBytes()/copy4.getWidth()*1.0, 25, 33, paint);
    v5.setImageBitmap(copy4);

  }

}&lt;/pre&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/8530191551735077897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/8530191551735077897'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2010/12/javalangillegalstateexception-immutable.html' title='java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRz8wmbtJAbcu3uCK7W9D_AbHQdCVw_5UB6KMhXajONuH2Fc7a7LPSp5o7U5zLVTT8F388pnNJYKxEhd0Em6iLMUwUM22Ivbu6iTvw7Moq4nAI91gJp5a4AHzvXW2SIUkc-VIoHIAlTSs/s72-c/bitmapcopy.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-5038334452436310769</id><published>2010-12-17T15:52:00.002+09:00</published><updated>2010-12-20T15:05:39.695+09:00</updated><title type='text'>電波改善計画の電話がきた</title><content type='html'>android とは、ちっとも関係ありませんが、、&lt;br /&gt;
&lt;br /&gt;
本日、ソフトバンクのコールセンター？の &lt;strike&gt;おば&lt;/strike&gt; じゃなくて、おねえさんから、&lt;br /&gt;
電話改善計画のアンケートなる電話がありました。&lt;br /&gt;
&lt;br /&gt;
電話番号は 0120-669-600 だったんですが、&lt;br /&gt;
ググると結構ヒットしたので、既に多くの人に電話しているようです。&lt;br /&gt;
&lt;br /&gt;
お小遣い的都合で、android への機種変更ができず、&lt;br /&gt;
iPhone 3GS を使い続けているのですが、以下のようなことを質問されました。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;自宅では、iPhone を Wi-Fi で使っているか？&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;自宅のインターネット環境は光か、それともADSLか？&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt; プロバイダはどこか？&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Wi-Fi ルータのメーカーは何か？家電量販店で買ったものか？&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;iPhone でインターネット接続をよくする時間帯はいつか？&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;自宅で Wi-Fi 使用をどのように確認しているか？&lt;br /&gt;
ちゃんと画面上部のアイコンが 3G から 扇型 になることを確認しているか？&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
こっちは仕事中なのに、いきなり電話を掛けてきて、&lt;br /&gt;
何を聞くんだ？と、ちょっとイラっとしましたが、&lt;br /&gt;
この &lt;strike&gt;おば&lt;/strike&gt; じゃなくて、おねえさんに、そんなことを言っても仕方がないので、&lt;br /&gt;
いつもの事なかれ主義で、淡々と質問に答えました。&lt;br /&gt;
&lt;br /&gt;
いきなり電話して、こんな質問しようもんなら、相手は１００％嫌がると思います。&lt;br /&gt;
&lt;br /&gt;
そう考えると、むしろ、おねえさんが不憫です。。&lt;br /&gt;
派遣の自給はいくらですか。。自分より給料よかったりして。&lt;br /&gt;
&lt;br /&gt;
最後に、電話が切られそうになったところで、&lt;br /&gt;
「質問の主旨は何ですか？」と訊いてみると、以下のような回答でした。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;電話改善運動の一貫で、ご自宅での iPhone の使用状況を確認し、&lt;br /&gt;
Wi-Fi を使っていないユーザー様については、FON ルータを配布している。&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
ということは、正直に「Wi-Fi使っています」と答えなければ、&lt;br /&gt;
FON ルータを無料で貸し出せてもらえたのかもしれません。。&lt;br /&gt;
&lt;br /&gt;
そう思うと、ちょっと失敗したかな・・・&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
しかし、よくよく考えて見ると、&lt;br /&gt;
この手の電話は、パケットの通信量が多い人を優先もしくは限定しているじゃないでしょうか。&lt;br /&gt;
&lt;br /&gt;
う～ん、最近は、あんまし使ってないんだけどな～&lt;br /&gt;
&lt;br /&gt;
夏頃は、確かにパケット代が 100 万超えてけど。。（もちろん実際は払った金額は定額料金のみですが）</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/5038334452436310769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/5038334452436310769'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2010/12/blog-post_17.html' title='電波改善計画の電話がきた'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-4153771117421696200</id><published>2010-12-08T09:53:00.000+09:00</published><updated>2010-12-08T09:53:17.912+09:00</updated><title type='text'>ブログのタイトル、ちょっと変えました</title><content type='html'>google で検索すると、rtaki さんが既にいらっしゃるようだったので、rtaki0329 にしました。&lt;br /&gt;
&lt;br /&gt;
あんまし、まぎらわしさが解消されていない気もするんですが、&lt;br /&gt;
まあ気にする人もいないだろうということで、ヨシとしておきます。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4153771117421696200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4153771117421696200'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2010/12/blog-post.html' title='ブログのタイトル、ちょっと変えました'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4733482151430397278.post-4708684163000803542</id><published>2010-11-28T18:49:00.005+09:00</published><updated>2010-12-17T16:04:11.193+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google API"/><title type='text'>Google Image Search API の android サンプル・アプリ作ってみた</title><content type='html'>Google Image Search API を使用した android アプリを作成してみました。&lt;br /&gt;
&lt;br /&gt;
Google Image Search API は以下のサイトにあるように、q=xxx の部分で検索キーワードを指定します。&lt;br /&gt;
応答は JSON フォーマットです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-left: 10px;&quot;&gt;&lt;b&gt;Google Image Search API&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;margin-left: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: black;&quot;&gt;&lt;a href=&quot;http://code.google.com/intl/ja/apis/imagesearch/v1/jsondevguide.html&quot;&gt;http://code.google.com/intl/ja/apis/imagesearch/v1/jsondevguide.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-left: 10px;&quot;&gt;&lt;b&gt;検索例： 高知城&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 20px;&quot;&gt;&lt;br /&gt;
リクエスト&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;&lt;a href=&quot;https://ajax.googleapis.com/ajax/services/search/images?v=1.0&amp;amp;q=%E9%AB%98%E7%9F%A5%E5%9F%8E&quot;&gt;https://ajax.googleapis.com/ajax/services/search/images?v=1.0&amp;amp;q=%E9%AB%98%E7%9F%A5%E5%9F%8E&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
レスポンス&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; padding: 5px;&quot;&gt;{&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;responseData&lt;/span&gt;&quot;: {&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;results&lt;/span&gt;&quot;:[{&quot;GsearchResultClass&quot;:&quot;GimageSearch&quot;,&quot;width&quot;:&quot;600&quot;,&quot;height&quot;:&quot;400&quot;,&quot;imageId&quot;:&quot;Ehuk98rEYswf5M:&quot;,&quot;tbWidth&quot;:&quot;135&quot;,&quot;tbHeight&quot;:&quot;90&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;unescapedUrl&lt;/span&gt;&quot;:&quot;http://img01.kitaguni.tv/usr/akkesi1946/1%E9%AB%98%E7%9F%A5%E5%9F%8E.jpg&quot;,&quot;url&quot;:&quot;http://img01.kitaguni.tv/usr/akkesi1946/1%25E9%25AB%2598%25E7%259F%25A5%25E5%259F%258E.jpg&quot;,&quot;visibleUrl&quot;:&quot;akkesi1946.kitaguni.tv&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;title&lt;/span&gt;&quot;:&quot;風のふくまま・・・:\u003cb\u003e高知城\u003c/b\u003e&quot;,&quot;titleNoFormatting&quot;:&quot;風のふくまま・・・:高知城&quot;,&quot;originalContextUrl&quot;:&quot;http://akkesi1946.kitaguni.tv/e543472.html&quot;,&quot;content&quot;:&quot;\u003cb\u003e高知城\u003c/b\u003e&quot;,&quot;contentNoFormatting&quot;:&quot;高知城&quot;,&quot;tbUrl&quot;:&quot;http://images.google.com/images?q\u003dtbn:Ehuk98rEYswf5M::img01.kitaguni.tv/usr/akkesi1946/1%25E9%25AB%2598%25E7%259F%25A5%25E5%259F%258E.jpg&quot;},{&quot;GsearchResultClass&quot;:&quot;GimageSearch&quot;,&quot;width&quot;:&quot;420&quot;,&quot;height&quot;:&quot;313&quot;,&quot;imageId&quot;:&quot;MHxe0rjkGw3MRM:&quot;,&quot;tbWidth&quot;:&quot;125&quot;,&quot;tbHeight&quot;:&quot;93&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;unescapedUrl&lt;/span&gt;&quot;:&quot;http://ozu.cc.kochi-u.ac.jp/~fuchu/syakai/top_img2%5B1%5D.jpg&quot;,&quot;url&quot;:&quot;http://ozu.cc.kochi-u.ac.jp/~fuchu/syakai/top_img2%255B1%255D.jpg&quot;,&quot;visibleUrl&quot;:&quot;ozu.cc.kochi-u.ac.jp&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;title&lt;/span&gt;&quot;:&quot;top_img2[1].jpg&quot;,&quot;titleNoFormatting&quot;:&quot;top_img2[1].jpg&quot;,&quot;originalContextUrl&quot;:&quot;http://ozu.cc.kochi-u.ac.jp/~fuchu/syakai/kochicastle.html&quot;,&quot;content&quot;:&quot;\u003cb\u003e高知城\u003c/b\u003e&quot;,&quot;contentNoFormatting&quot;:&quot;高知城&quot;,&quot;tbUrl&quot;:&quot;http://images.google.com/images?q\u003dtbn:MHxe0rjkGw3MRM::ozu.cc.kochi-u.ac.jp/~fuchu/syakai/top_img2%255B1%255D.jpg&quot;},{&quot;GsearchResultClass&quot;:&quot;GimageSearch&quot;,&quot;width&quot;:&quot;640&quot;,&quot;height&quot;:&quot;480&quot;,&quot;imageId&quot;:&quot;7H2hzs-xvZA-kM:&quot;,&quot;tbWidth&quot;:&quot;137&quot;,&quot;tbHeight&quot;:&quot;103&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;unescapedUrl&lt;/span&gt;&quot;:&quot;http://map.papanavi.jp/ucan/img/sho/39000373_1.jpg&quot;,&quot;url&quot;:&quot;http://map.papanavi.jp/ucan/img/sho/39000373_1.jpg&quot;,&quot;visibleUrl&quot;:&quot;map.papanavi.jp&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;title&lt;/span&gt;&quot;:&quot;\u003cb\u003e高知城\u003c/b\u003e ｜ パパナビ&quot;,&quot;titleNoFormatting&quot;:&quot;高知城 ｜ パパナビ&quot;,&quot;originalContextUrl&quot;:&quot;http://map.papanavi.jp/p/spot/details/S39000373-001&quot;,&quot;content&quot;:&quot;\u003cb\u003e高知城\u003c/b\u003e&quot;,&quot;contentNoFormatting&quot;:&quot;高知城&quot;,&quot;tbUrl&quot;:&quot;http://images.google.com/images?q\u003dtbn:7H2hzs-xvZA-kM::map.papanavi.jp/ucan/img/sho/39000373_1.jpg&quot;},{&quot;GsearchResultClass&quot;:&quot;GimageSearch&quot;,&quot;width&quot;:&quot;2048&quot;,&quot;height&quot;:&quot;1536&quot;,&quot;imageId&quot;:&quot;6K73uOHjLlHRpM:&quot;,&quot;tbWidth&quot;:&quot;150&quot;,&quot;tbHeight&quot;:&quot;113&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;unescapedUrl&lt;/span&gt;&quot;:&quot;http://userdisk.webry.biglobe.ne.jp/008/871/08/N000/000/000/121957888604916210164.JPG&quot;,&quot;url&quot;:&quot;http://userdisk.webry.biglobe.ne.jp/008/871/08/N000/000/000/121957888604916210164.JPG&quot;,&quot;visibleUrl&quot;:&quot;takachin0413.at.webry.info&quot;,&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;title&lt;/span&gt;&quot;:&quot;たかちゃんの独り言/ウェブリブログ&quot;,&quot;titleNoFormatting&quot;:&quot;たかちゃんの独り言/ウェブリブログ&quot;,&quot;originalContextUrl&quot;:&quot;http://takachin0413.at.webry.info/&quot;,&quot;content&quot;:&quot;山内一豊の\u003cb\u003e高知城\u003c/b\u003eです。&quot;,&quot;contentNoFormatting&quot;:&quot;山内一豊の高知城です。&quot;,&quot;tbUrl&quot;:&quot;http://images.google.com/images?q\u003dtbn:6K73uOHjLlHRpM::userdisk.webry.biglobe.ne.jp/008/871/08/N000/000/000/121957888604916210164.JPG&quot;}],&quot;cursor&quot;:{&quot;pages&quot;:[{&quot;start&quot;:&quot;0&quot;,&quot;label&quot;:1},{&quot;start&quot;:&quot;4&quot;,&quot;label&quot;:2},{&quot;start&quot;:&quot;8&quot;,&quot;label&quot;:3},{&quot;start&quot;:&quot;12&quot;,&quot;label&quot;:4},{&quot;start&quot;:&quot;16&quot;,&quot;label&quot;:5},{&quot;start&quot;:&quot;20&quot;,&quot;label&quot;:6},{&quot;start&quot;:&quot;24&quot;,&quot;label&quot;:7},{&quot;start&quot;:&quot;28&quot;,&quot;label&quot;:8}],&quot;estimatedResultCount&quot;:&quot;392000&quot;,&quot;currentPageIndex&quot;:0,&quot;moreResultsUrl&quot;:&quot;http://www.google.com/images?oe\u003dutf8\u0026ie\u003dutf8\u0026source\u003duds\u0026start\u003d0\u0026hl\u003dja\u0026q\u003d%E9%AB%98%E7%9F%A5%E5%9F%8E&quot;}}, &quot;responseDetails&quot;: null, &quot;responseStatus&quot;: 200}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
今回のサンプル・アプリでは、&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;title&lt;/span&gt;&quot; と &quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;unescapedUrl&lt;/span&gt;&quot; の値を利用しています。&lt;br /&gt;
&lt;br /&gt;
JSON は階層構造になっているので、こららの値を取得するには、&lt;br /&gt;
&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;responseData&lt;/span&gt;&quot; --&amp;gt; &quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;results&lt;/span&gt;&quot; と値を辿っていく必要があります。&lt;br /&gt;
&lt;br /&gt;
JSON の解析は、org.json.JSONObject か&amp;nbsp;org.json.JSONArray を使うと簡単に行えます。&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;responseData&lt;/span&gt;&quot; は値が１つのなので、JSONObject を、&lt;br /&gt;
&quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;results&lt;/span&gt;&quot; は値が複数（４つ）なので、JSONArray を使用します。&lt;br /&gt;
&lt;br /&gt;
ポイントは、こんなところです。&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
サンプル・アプリは、３つの要素で構成しています。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;検索キーワードを入力する EditText&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;検索処理を開始する Button&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;検索結果を表示する ListView&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgtEVfhHA92j1ASkDk2ygRBV2CBE4xhxkDAX09O3LEYaZxXsQSmscuYhPuLvVji4vcXKkES7VFiuzZbZaoMg7466GOHHGY5dyKJw9vkoOusQl28iIHmNBCIfr5n-pUf6oS9EW95uZ9UI8/s1600/image1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgtEVfhHA92j1ASkDk2ygRBV2CBE4xhxkDAX09O3LEYaZxXsQSmscuYhPuLvVji4vcXKkES7VFiuzZbZaoMg7466GOHHGY5dyKJw9vkoOusQl28iIHmNBCIfr5n-pUf6oS9EW95uZ9UI8/s320/image1.png&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
ListView の項目をクリックすると、&lt;br /&gt;
別途 Activity を起動し、画像を表示させるようにしています。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4NwRCdOQ2Xn42DCrT_nJwfU5-mPRU9aE4cckI8Lz0tC2Hl_RgiD5J-47ctXFh1nYQ4v7wHf3sHFmpfZvzY6-BKPbi4xsQxBPBqMXuiB5iPRN7SbX8vtwRUetaDIuih8A2UAHehyESNqw/s1600/image2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4NwRCdOQ2Xn42DCrT_nJwfU5-mPRU9aE4cckI8Lz0tC2Hl_RgiD5J-47ctXFh1nYQ4v7wHf3sHFmpfZvzY6-BKPbi4xsQxBPBqMXuiB5iPRN7SbX8vtwRUetaDIuih8A2UAHehyESNqw/s320/image2.png&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
メイン Activity のレイアウトです。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;main.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    &amp;gt;
&amp;lt;EditText
    android:id=&quot;@+id/keyword&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;高知城&quot;
    /&amp;gt;
&amp;lt;Button
    android:id=&quot;@+id/search&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;イメージ検索&quot;
    /&amp;gt;
&amp;lt;ListView
    android:id=&quot;@+id/list&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_weight=&quot;2&quot;
    /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
メイン Activity です。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;JsonTestActivity.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.kochi.rtaki;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class JsonTestActivity extends Activity {

  private static final String QUERY_URL = &quot;https://ajax.googleapis.com/ajax/services/search/images?v=1.0&amp;amp;q=&quot;;

  private ListView mListView = null;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button search = (Button) findViewById(R.id.search);

    search.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        EditText keyword = (EditText) findViewById(R.id.keyword);
        String key = keyword.getText().toString();

        updateList(key);
      }
    });

    mListView = (ListView) findViewById(R.id.list);

    mListView.setOnItemClickListener(new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView&amp;lt;?&amp;gt; parent, View view,
          int position, long id) {

        Map map = (Map) parent.getItemAtPosition(position);
        String url = (String) map.get(&quot;unescapedUrl&quot;);

        Intent intent = new Intent();
        intent.setClass(JsonTestActivity.this, ImageActivity.class);
        intent.putExtra(&quot;url&quot;, url);
        
        startActivity(intent);
      }
    });
  }

  private void updateList(String key) {

    ArrayList listData = requestImageSearch(key);

    SimpleAdapter adapter = new SimpleAdapter(this, listData,
        android.R.layout.simple_list_item_1, new String[] { &quot;title&quot; },
        new int[] { android.R.id.text1 });

    mListView.setAdapter(adapter);

  }

  private ArrayList requestImageSearch(String key) {
    Map&amp;lt;String, Object&amp;gt; temp;
    ArrayList&amp;lt;Map&amp;gt; listData = new ArrayList&amp;lt;Map&amp;gt;();

    String encodeKey = Uri.encode(key);

    HttpClient client = new DefaultHttpClient();

    String req = QUERY_URL + encodeKey;

    Log.v(&quot;JsonTest&quot;, &quot;query :&quot; + req);

    HttpUriRequest httpUriReq = new HttpGet(req);

    try {

      HttpResponse res = client.execute(httpUriReq);

      if (res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
        Toast.makeText(JsonTestActivity.this,
            &quot;StatusCode = &quot; + res.getStatusLine().getStatusCode(),
            Toast.LENGTH_LONG).show();
      } else {

        
        String entity = EntityUtils.toString(res.getEntity());

        JSONObject jsonObj = new JSONObject(entity);

        String responseStatus = jsonObj.getString(&quot;responseStatus&quot;);
        Log.v(&quot;JsonTest&quot;, &quot;responseStatus :&quot; + responseStatus);

        if (responseStatus.equals(&quot;200&quot;) != true) {
          Toast.makeText(JsonTestActivity.this,
              &quot;responseStatus = &quot; + responseStatus,
              Toast.LENGTH_LONG).show();
        } else {

          JSONObject jsonObjData = jsonObj
              .getJSONObject(&quot;responseData&quot;);

          JSONArray jsonObjResultArray = jsonObjData
              .getJSONArray(&quot;results&quot;);
          for (int i = 0; i &amp;lt; jsonObjResultArray.length(); i++) {
            JSONObject jsonObjResult = jsonObjResultArray
                .getJSONObject(i);
            Log.v(&quot;JsonTest&quot;, &quot;title :&quot;
                + jsonObjResult.getString(&quot;title&quot;));

            Map map = new HashMap&amp;lt;String, String&amp;gt;();
            map.put(&quot;title&quot;, jsonObjResult.getString(&quot;title&quot;));
            map.put(&quot;unescapedUrl&quot;, jsonObjResult
                .getString(&quot;unescapedUrl&quot;));
            listData.add(map);
          }

        }

      }

    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (JSONException e) {
      e.printStackTrace();
    }

    return listData;
  }
}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
image.xml と ImageActivity.java は、ListView の項目をクリックしたときに、&lt;br /&gt;
画像を表示させる Activity です。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;image.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    &amp;gt;
&amp;lt;ImageView
    android:id=&quot;@+id/image&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_gravity=&quot;center&quot;
    /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ImageActivity.java&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;package jp.kochi.rtaki;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

public class ImageActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.image);
    
    Intent intent = getIntent();
    String url = intent.getStringExtra(&quot;url&quot;);
    
    Bitmap bitmap = getImage(url);
    
    ImageView image = (ImageView) findViewById(R.id.image);
    image.setImageBitmap(bitmap);
    
  }

  private Bitmap getImage(String url) {
    Bitmap bitmap = null;
    InputStream in = null;
    BufferedOutputStream out = null;
    byte[] buf = new byte[512];
    int bytes;

    try {
      in = new BufferedInputStream(new URL(url).openStream(), 512);

      final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
      out = new BufferedOutputStream(dataStream, 512);
      while ((bytes = in.read(buf)) &amp;gt; 0) {
        out.write(buf, 0, bytes);
      }

      out.flush();

      final byte[] data = dataStream.toByteArray();
      BitmapFactory.Options options = new BitmapFactory.Options();
      // options.inSampleSize = 1;

      bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,
          options);

    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        if (in != null)
          in.close();
        if (out != null)
          out.close();

      } catch (IOException e) {
        e.printStackTrace();
      }
    }

    return bitmap;
  }
}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
マニフェスト・ファイルは、&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;青字&lt;/span&gt;の２行を追加しています。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;AndroidManifest.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;border: 1px solid gray; overflow: auto; padding: 5px;&quot;&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
      package=&quot;jp.kochi.rtaki&quot;
      android:versionCode=&quot;1&quot;
      android:versionName=&quot;1.0&quot;&amp;gt;
    &amp;lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&amp;gt;
        &amp;lt;activity android:name=&quot;.JsonTestActivity&quot;
                  android:label=&quot;@string/app_name&quot;&amp;gt;
            &amp;lt;intent-filter&amp;gt;
                &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;
                &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
            &amp;lt;/intent-filter&amp;gt;
        &amp;lt;/activity&amp;gt;
        
        &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;activity android:name=&quot;.ImageActivity&quot; /&amp;gt;&lt;/span&gt;

    &amp;lt;/application&amp;gt;
    &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&amp;gt;&lt;/span&gt;
    &amp;lt;uses-sdk android:minSdkVersion=&quot;4&quot; /&amp;gt;

&amp;lt;/manifest&amp;gt; &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
以上、はじめてマッッシュアップでした～(・o・)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4708684163000803542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4733482151430397278/posts/default/4708684163000803542'/><link rel='alternate' type='text/html' href='http://rtaki.blogspot.com/2010/11/google-image-search-api-android_28.html' title='Google Image Search API の android サンプル・アプリ作ってみた'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgtEVfhHA92j1ASkDk2ygRBV2CBE4xhxkDAX09O3LEYaZxXsQSmscuYhPuLvVji4vcXKkES7VFiuzZbZaoMg7466GOHHGY5dyKJw9vkoOusQl28iIHmNBCIfr5n-pUf6oS9EW95uZ9UI8/s72-c/image1.png" height="72" width="72"/></entry></feed>