tag:blogger.com,1999:blog-5048335884217227572024-03-14T04:45:49.410+09:00ettemの開発ログettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-504833588421722757.post-5013953522625834632017-11-19T08:18:00.003+09:002017-11-19T08:18:34.061+09:00Firemacsが動かなくなった<span style="background-color: white; color: #0c0c0d; font-family: "Fira Sans", sans-serif; font-size: 14px;">Firefox Quantumから、動かなくなったみたい。</span><br />
<span style="background-color: white; color: #0c0c0d; font-family: "Fira Sans", sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white;"><span style="color: #0c0c0d; font-family: Fira Sans, sans-serif;"><span style="font-size: 14px;">Firemacsを使うためだけにFirefoxを使っていて、普段はChromeを使っているので、これを期に、<a href="https://qiita.com/alpha22jp/items/f67bda3ed0c4ac84c29f">Atomic Chrome for Emacs</a>に切り替えた。</span></span></span><br />
<span style="background-color: white; color: #0c0c0d; font-family: "Fira Sans", sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #0c0c0d; font-family: "Fira Sans", sans-serif; font-size: 14px;"><br /></span>ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-51033436546653383192015-02-19T07:47:00.001+09:002015-02-19T07:47:29.587+09:00Ubuntu 14.04 LTS をインストールして、Androidアプリの開発環境を整える久しぶりにLinuxを使おうと思って、Ubuntu 14.04をインストール。(日本語化チームの日本語版ではなくて、本家版をインストール)<br />
<br />
その作業メモ。<br />
<br />
<h4>
Google日本語入力のインストール</h4>
<div>
Goolge日本語入力(Mozc)のパッケージをインストールして、デーモンを再起動する。</div>
<div>
<br /></div>
<div>
$ sudo apt-get install ibus-mozc</div>
<div>
$ killall ibus-daemon</div>
<div>
$ ibus-daemon -d -x &</div>
<div>
<br /></div>
<div>
メニューバーの右の日本語入力のアイコンをクリックし、[テキスト入力設定...]を選択。</div>
<div>
[使用する入力ソース]の下の[+]をクリック。</div>
<div>
日本語(Moz)を追加。更に、[日本語]も追加。[日本語(Anthy)]は削除。</div>
<div>
<br /></div>
<div>
[使用する入力ソース]の順番は、[日本語]、[日本語(Mozc)]の順にしておく。</div>
<div>
([日本語(Mozc)]だけだと、メニューバーのアイコンの表示が乱れる。)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<h4>
CtrlキーとCaps Lockキーの入れ替え</h4>
Ctrlキーは、aの隣にないと嫌なので、入れ替える。<br />
<br /></div>
<div>
$ dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:swapcaps', 'caps:ctrl_modifier']"<br />
<br />
一度、ログアウトして再ログインする。<br />
<br />
<h4>
ハイバネートを有効にする</h4>
<div>
ノートPCなので、ハイバネートを使いたい。</div>
<br />
$ sudo vi /var/lib/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla<br />
<br />
でファイルを作成・編集。<br />
以下の内容を追加。<br />
<br />
[Re-enable hibernate by default in upower]<br />
Identity=unix-user:*<br />
Action=org.freedesktop.upower.hibernate<br />
ResultActive=yes<br />
<br />
[Re-enable hibernate by default in logind]<br />
Identity=unix-user:*<br />
Action=org.freedesktop.login1.hibernate<br />
ResultActive=yes<br />
<br />
PCを再起動する。</div>
<div>
<br />
<h4>
Oracle JDKのインストール</h4>
</div>
<div>
Androidアプリを開発するので。</div>
<div>
PPAリポジトリを使ってインストール</div>
<div>
<br /></div>
<div>
<div>
$ sudo add-apt-repository ppa:webupd8team/java</div>
<div>
$ sudo apt-get update</div>
<div>
$ sudo apt-get install oracle-java8-installer</div>
</div>
<div>
<br /></div>
<div>
$ sudo apt-get install oracle-java8-set-default</div>
<div>
<br /></div>
<div>
で、デフォルトをOcacle Javaに変更<br />
<br />
<h4>
AndroidStudioのインストール</h4>
<div>
ダウンロード・ページからダウンロード。</div>
<div>
適当なフォルダに展開。</div>
<div>
android-studio/binにパスを設定。</div>
<div>
AndroidStudioを起動。</div>
<div>
設定を進めていくと最後にAVDManagerが起動できないとエラーが発生する。</div>
<div>
<br /></div>
<div>
32bit ライブラリが必要なので、インストール</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<br /></div>
ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-43664364119512828372014-11-16T11:59:00.003+09:002014-11-16T11:59:51.266+09:00EmacsでKawaを動かすための設定苦戦したので、メモ。<br />
(-sを付けるのが分からなくて、苦戦 )<br />
jarのパスは、個別の環境に合わせる。<br />
<br />
<br />
<pre>(setq scheme-program-name "java.exe -cp c:/cygwin/usr/local/kawa/kawa-1.14.jar kawa.repl --full-tailcalls --warn-undefined-variable=no --warn-invoke-unknown-method=no -s")
(require 'cmuscheme)
(defun scheme-other-window ()
"Run scheme on other window"
(interactive)
(switch-to-buffer-other-window
(get-buffer-create "*scheme*"))
(run-scheme scheme-program-name))
(define-key global-map
"\C-cS" 'scheme-other-window)
</pre>
ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-68692106239911716372014-11-01T17:06:00.003+09:002014-11-01T17:06:28.734+09:00Android Wearアプリ開発環境の構築 (Android Wearアプリの開発 その2)<a href="http://dev-ettem.blogspot.jp/2014/09/android-wear.html" target="_blank">前回</a>は、開発を始める前に、参考サイトを調べてみた。<br />
<br />
Android Studioのインストールとかが書いてなかったので、ここで記載しておく。<br />
<br />
<h3>
開発の必要条件</h3>
<br />
Android Wearアプリを開発するには、<br />
・Android Studio 0.8以降<br />
・Gladle 0.12以降<br />
が必要になる。<br />
<br />
Gladleは、Android Studioの中に含まれるので、インストールすつのは、Android Studioだけでいい。<br />
<br />
Android Studioを動かすには、<br />
・JDK 6か7<br />
が必要。(Android Lに対応するにはJDK 7が必要なので、JDK 7がいいだろう。JDK 8はまだ早いと思うし、Java 7としてコンパイルする必要があるみたいなので、Java 8の機能を間違って使ってしまってハマるのが嫌な人や初心者は、JDK 8はやめておくべき)<br />
<br />
<b>Java Development Kit(JDK)のインストール</b><br />
<br />
Oracleの<a href="http://www.oracle.com/technetwork/jp/java/javase/downloads/jdk7-downloads-1880260.html" target="_blank">JDKのダウンロードサイト</a>からJDKをダウンロードしてインストールするだけ。<br />
<br />
<h4>
Android Studioのインストール</h4>
<div>
Androidの開発者サイトの<a href="https://developer.android.com/sdk/installing/studio.html" target="_blank">Android Studioのダウンロードサイト</a>からダウンロードしてインストールするだけ。</div>
ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-88012601770978856412014-09-07T17:42:00.002+09:002014-11-01T16:58:36.647+09:00Android Wear(スマート・ウォッチ)アプリの開発をはじめよう(Android Wearアプリの開発 その1)Android Wearと言っても、メガネの方じゃないよ、時計だよ。<br />
<br />
<h3>
Android Waerを使ってみる</h3>
<br />
まずは、スマート・ウォッチを買いましょう。<br />
実機を使わないで、人に使ってもらえるアプリは作れません。購入は以下から。<br />
<a href="https://play.google.com/store/devices/details?id=samsung_gear_live_black&hl=ja" target="_blank">Samsung Gear Live</a><br />
<a href="https://play.google.com/store/devices/details?id=lg_g_watch_black&hl=ja" target="_blank">LGも出している</a>けど、<a href="http://ascii.jp/elem/000/000/927/927500/" target="_blank">丸いやつ</a>が本命だと思うので、今、買うならサムスン製がいいと思う。(モトローラは相手にしないw) 日本メーカのものが欲しいなら、<a href="http://www.itmedia.co.jp/mobile/articles/1409/04/news039.html" target="_blank">ソニー製のが</a>発表されているので待ってみるのも。<br />
<br />
買って使ってみると楽しいし、それなりに生活を変えるデバイスであると実感できると思う。<br />
ただし、使い込んでみると、デフォルトのままだと、色々と不満が出てくると思う。<br />
<br />
何が不満って、UIが基本的に音声であるところである。<br />
Voice command User Interface(VUIって呼ばれるようになるのだろうか)は、Graphical User Interface(GUI)から、Command line User Interface(CUI)への退化になんだよね。音声でアプリを起動するって言うことは、現時点では、起動するためのコマンドを覚えておかなくてはいけない事を意味する。人工知能を搭載して、ちょっと間違っていても、望みのアプリが起動するなら問題ないのだけれど。<br />
あと、大きな問題として、電車の中で「Ok, Google」とか、「Ok, glass」なんて恥ずかしくて言えない。Googleは、電車の中で、全員が「Ok, Google!」って言い出したらどうなるか、想像しなかったのだろうか。<br />
<br />
ではなぜ、Googleが音声入力を選んだかっていうと、アメリカは基本的に車社会だからだ。車を運転しながら、使うには、ハンズフリーでないといけない。だから、<a href="http://www.android.com/auto/">Android Auto</a>でも、音声入力をメインに押し出している。この方針が世界的に正しいのかどうかは分からない。少なくとも日本では間違いだ。(田舎は車社会だと言うけど、スマートデバイスなんか使わない人ばかりだから、スマートウォッチのマーケット外)<br />
<br />
でも、使うアプリの起動の単語を正確に覚えていられないし、周りに人がいない状態ばかりではない。なので、ランチャー・アプリを使うことから、カスタマイズが始まる。<br />
<a href="https://play.google.com/store/apps/details?id=com.npi.wearminilauncher&hl=ja">Wear Mini Launcher</a><br />
これで、電車の中でも、静かにいい子にしてられる(苦笑)。<br />
<br />
他に、何かいいアプリはないかなって思ったら、<br />
<a href="http://weekly.ascii.jp/elem/000/000/238/238661/">Android Wearに絶対入れたいアプリ10 システム系編</a><br />
<a href="http://weekly.ascii.jp/elem/000/000/239/239365/">Android Wearに入れておきたいアプリ10 ツール編</a><br />
を見るのがいいだろう。(2014/09/07 現在)<br />
<br />
Gear Liveの時計のデザインは綺麗なんだけど、別のものに変えたくなってくる。そこで、<br />
<a href="http://weekly.ascii.jp/elem/000/000/239/239437/">Android Wearの無料時計アプリをすべて並べてみた</a><br />
なんかで探してみる。<br />
<br />
そうやって、カスタマイズしているうちに、<a href="https://play.google.com/store/search?q=android%20wear%20%E3%82%A2%E3%83%97%E3%83%AA&c=apps">Google Playで検索</a>してみるようになる。<br />
<br />
・<a href="https://play.google.com/store/apps/collection/promotion_30008f2_io_android_wear" target="_blank">特集</a><br />
・<a href="https://play.google.com/store/apps/collection/promotion_3000c6c_wear_health_fitness" target="_blank">ヘルス&フィットネス</a><br />
・<a href="https://play.google.com/store/apps/collection/promotion_3000c7c_travel_local" target="_blank">トラベル&地域</a><br />
・<a href="https://play.google.com/store/apps/collection/promotion_3000c69_wear_social" target="_blank">ソーシャル</a><br />
・<a href="https://play.google.com/store/apps/collection/promotion_3000c6a_wear_tools" target="_blank">ツール</a><br />
・<a href="https://play.google.com/store/apps/collection/promotion_3000c6b_wear_communication" target="_blank">コミュニケーション</a><br />
・<a href="https://play.google.com/store/apps/collection/promotion_3000c6d_wear_productivity" target="_blank">生産性向上</a><br />
・<a href="https://play.google.com/store/apps/collection/promotion_3000c7e_wear_misc" target="_blank">さらに</a><br />
<br />
でも、探しても似たようなアプリばっかりで、自分の問題を解決してくれるアプリは見つからない。<br />
<br />
そう感じたら、自分でアプリを作ろう。それは、世界にただ一つのアプリで、あなたと同じ問題を抱えている人にとっては役に立つアプリで、世界をよりよい方向へ変えるアプリになるだろう。<br />
<br />
<h3>
アプリの開発の準備</h3>
<div>
<br /></div>
前置きが長くなってしまったが、アプリの開発を始めよう。<br />
<br />
まずは、Androidアプリの開発者の本家のサイトを見ないことには始まらない。<br />
<a href="http://developer.android.com/wear/index.html" target="_blank">Android Developers Android Wear</a><br />
英語に、躊躇しない人なら、ここを一通り見るだけで十分だろう。<br />
<br />
以下、英語の苦手な人へ<br />
<br />
<h4>
開発環境の構築方法</h4>
<h4>
</h4>
@ITでの記事を見ながら構築していくのがいいだろう。<br />
<a href="http://www.atmarkit.co.jp/ait/articles/1409/05/news044.html" target="_blank">ウェアラブル端末用Android Wearアプリ開発の基礎知識 (1/4)</a><br />
<br />
<br />
<h3>
<b>開発の参考サイト</b></h3>
<br />
開発環境の構築はできたら、アプリ開発といきたい所だが、何を見て開発するかが、問題。<br />
ひとまず、日本人のAndroidアプリ開発者で<a href="http://y-anz-m.blogspot.jp/" target="_blank">この人</a>を知らなかったらモグリのサイトから。<br />
<a href="http://y-anz-m.blogspot.jp/2014/07/android-wear-1.html" target="_blank">Android Wear アプリ開発 その1</a><br />
<a href="http://y-anz-m.blogspot.jp/2014/07/android-wear-2.html" target="_blank">Android Wear アプリ開発 その2</a><br />
<a href="http://y-anz-m.blogspot.jp/2014/07/android-wear-developers-perspective.html" target="_blank">Android Wear: The developer's perspective</a><br />
<a href="http://y-anz-m.blogspot.jp/2014/07/android-wear-ambient-onmeasure-onlayout.html" target="_blank">Android Wear : ambient 時は onMeasure() や onLayout() は呼ばれない。</a><br />
<a href="http://y-anz-m.blogspot.jp/2014/07/android-wear_7.html" target="_blank">Android Wear のデザイン関係のセッション</a><br />
<a href="http://y-anz-m.blogspot.jp/2014/07/samsung-gear-live-lg-g-watch.html" target="_blank">Samsung Gear Live と LG G Watch のセンサーリスト</a><br />
と、見てみたけど、Androidアプリの開発が出来る事が前提になっているなあ。最近、<a href="http://y-anz-m.blogspot.jp/" target="_blank">yanzm</a>さんの翻訳量が落ちてきているんだよなあ。<br />
<br />
という訳で、他の頑張っている人を紹介。<br />
<br />
まず、デザイン(設計って意味ですね)について<br />
<a href="http://firespeed.org/diary.php?diary=kenz-1762" target="_blank">Android Wearのためのデザイン 目次</a><br />
この辺を見て、どんな機能を持たせるか、どんな画面構成にするかをまずは考えるとよい。<br />
<br />
アプリの設計ができたら、実装をする。<br />
<a href="http://firespeed.org/diary.php?diary=kenz-1744" target="_blank">ウェアラブル向けアプリを作る 目次</a><br />
を参考にしながら、実装するのがいいだろう。<br />
<br />
Android Wearは、「<a href="https://plus.google.com/+kenjimatsuoka/posts" target="_blank">kenji matsuoka</a>」にお世話になるのかな。<br />
<br />ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-61028025097231094482013-04-26T22:22:00.002+09:002013-05-18T23:07:24.848+09:00Androidアプリの画面をdpでデザインする: Design layout of Android App with dpAndroidでは、1ピクセルの大きさが、機種によって大きく異なる。<br />
そのため、一辺の長さを100ピクセルに指定してサムネイルの画像を表示すると、機種によっては大きさが半分ぐらいになってしまう。<br />
<br />
では、機種に依存せずに、同じ見た目の大きさにするにはどうしたらよいのだろうか?<br />
そのためには、ピクセルの単位で大きさを指定するのではなく、dip、pxと文字数を合わせてdpと呼ばれる事が多い、の単位で大きさを指定すればよい。<br />
dipは、device independent pixcel(端末非依存ピクセル)の略で、1辺の大きさが1/160インチの仮想的なピクセルである。<br />
<br />
前述のサムネイルの大きさがまちまちになる問題を避けるには、100ピクセルと言ったサイズを指定するのではなく、50dpと言うようにサイズを指定すればよい。そうすれば、見た目の大きさはすべての端末で同じ大きさになり、問題は解決する。<br />
<br />
しかし、である。Androidは、端末の画面サイズも機種によりまちまちである。<br />
例えば、50dpのサムネイルは横に幾つまではみ出さずに表示できるのだろうか?と言う疑問に突き当たる。<br />
そこで、各種端末の画面の大きさをdp単位で求めてみたのが下表である。<br />
<br />
<table border="1" rules="all"><caption><b>表: 端末毎のdp単位で求めた画面サイズ</b></caption> <tbody>
<tr> <th>機種: Model</th><th>ディスプレイサイズ: Display Size</br>(inch)</th><th>幅: Width (px)</th><th>高さ: Height (px)</th><th>dpi</th><th>幅: Width (dp)</th><th>高さ: Height (dp)</th> </tr>
<tr align="center"> <td align="left">HTC Desire</td><td>3.7</td><td>480</td><td>800</td><td>252</td><td>305</td><td>508</td> </tr>
<tr align="center"> <td align="left">Xperia</td><td>4.0</td><td>480</td><td>854</td><td>245</td><td>314</td><td>558</td> </tr>
<tr align="center"> <td align="left">Galaxy S</td><td>4.0</td><td>480</td><td>800</td><td>233</td><td>329</td><td>549</td> </tr>
<tr align="center"> <td align="left">Galaxy Nexus</td><td>4.7</td><td>720</td><td>1280</td><td>312</td><td>369</td><td>655</td> </tr>
<tr align="center"> <td align="left">Xperia Z</td><td>5.0</td><td>1080</td><td>1920</td><td>441</td><td>392</td><td>697</td> </tr>
<tr align="center"> <td align="left">Galaxy Note</td><td>5.3</td><td>800</td><td>1280</td><td>285</td><td>449</td><td>719</td> </tr>
<tr align="center"> <td align="left">Galaxy Note II</td><td>5.5</td><td>720</td><td>1280</td><td>267</td><td>431</td><td>767</td> </tr>
<tr align="center"> <td align="left">Galaxy Mega 6.3</td><td>6.3</td><td>720</td><td>1280</td><td>233</td><td>494</td><td>879</td> </tr>
<tr align="center"> <td align="left">Galaxy Tab</td><td>7.0</td><td>600</td><td>1024</td><td>170</td><td>566</td><td>966</td> </tr>
<tr align="center"> <td align="left">Nexus 7</td><td>7.0</td><td>800</td><td>1280</td><td>216</td><td>594</td><td>950</td> </tr>
<tr align="center"> <td align="left">Optimus Pad</td><td>8.9</td><td>768</td><td>1280</td><td>168</td><td>733</td><td>1,221</td> </tr>
<tr align="center"> <td align="left">Nexus 10</td><td>10.0</td><td>1600</td><td>2560</td><td>302</td><td>848</td><td>1,357</td> </tr>
</tbody> </table><br />
上記の表を見ると、縦画面の場合、HTC DesireからGalaxy Sまでは6つ、Galaxy NexusからXperia Zまでは7つ、Galaxy Noteは8つということが分かる。<br />
<br />
このように、大きさをdp単位で指定し、各端末の画面サイズはdp単位の大きさを持つと考えるて、画面のレイアウトを考えればよい。<br />
<br />
結構面倒な気もするが、画面の大きさがまちまちなのは、PCのブラウザの画面も同じなので、レイアウトの考え方は、ブラウザと同じように考えればよい。<br />
<br />
ブラウザで横幅のレイアウトを考えるとき、%指定で幅をしていすれば上手く行く事が多い。Androidの場合、大きさを0dpと指定し、weightで幅の割合を指定すると、同様の事ができる。このように、HTMLやCSSでのレイアウトのテクニックをAndroidのレイアウトのXMLファイルで応用できないかを考えるとよい。実際、XMLファイルで指定できる属性は、HTMLでも名前が違うだけで同様の属性がある事が多い。ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-39123409586230416052013-02-08T08:29:00.002+09:002013-05-18T23:07:51.257+09:00課金APIの概略 - Androidのアプリ内課金(In-App Billing)のまとめ (その2)<h2><span style="font-size: large;">課金API概略</span></h2><br />
開発者のアプリは、端末にインストールされているGoogle Playアプリによって公開されているAPIを使って、課金サービスにアクセスする。<br />
Google Playアプリは、課金リクエストとその応答を、Google Playサーバーと開発者のアプリの間で運ぶ。開発者のアプリは直接Google Playのサーバーと通信する事はなく、課金要求は、プロセス間通信(IPC)を介して、Google Playアプリへ送られる。<br />
<br />
アプリ課金は、Google Playを介して配布されたアプリの中でのみ実装できる。また、課金要求を完了するには、Google Playアプリがネットワークを通じてGoogle Playサーバーにアクセスする必要がある。<br />
<br />
APIの仕様は、Version 2とVersion 3とで大きく異なる。大きな相違点は以下の通り。<br />
<br />
<ul><li>Version 2は非同期で処理されるが、Version 3では同期で処理される点である。</li>
<li>Version 2は、Android 1.6以降でサポートされるが、Version 3は、Android 2.2以降でサポートされる。</li>
</ul><br />
<h2><span style="font-size: large;"> Version 3 APIの概略</span></h2><div><br />
</div><h3><span style="font-size: small;">購入フロー</span></h3><div><span style="font-size: small;"><br />
</span></div><div><span style="font-size: small;">購入の典型的な流れは以下の通り。</span></div><div><ol><li><span style="background-color: #f9f9f9; color: #006600; font-family: 'courier new', courier, monospace;"><span style="font-size: 14px; line-height: 21px;"><b>IInAppBillingService#isBillingSupported</b></span></span><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 21px;">のリクエストを</span><span style="background-color: #f9f9f9; font-size: 14px; line-height: 21px;"><span style="font-family: inherit;">Google Playに送って、端末がアプリ課金APIをサポートしているかどうかを決定する。</span></span></li>
<li><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;"><span style="line-height: 21px;">次に、アプリ開始時もしくはユーザーがログインしたタイミングで、<span style="color: #006600; font-weight: bold;">IInAppBillingService#</span></span><span style="color: #006600;">getPurchases</span></span><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;">のリクエストを送って、ユーザーが製品を購入済みかどうかをチェックする。Google Playは、購入済みの製品のIDを含むBundleを返す。</span></li>
<li><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;">大抵の場合、購入可能なアイテムの情報をユーザーに示す必要がある。Google PlayのDevelopper Consoleで定義した製品の詳細情報を問い合わせるには、</span></span><span style="background-color: #f9f9f9; color: #006600; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;"><span style="font-weight: bold; line-height: 21px;">IInAppBillingService#</span>getSkuDetails</span><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;">を送ればよい。Google Playは、価格、タイトル、説明、製品タイプを含むBundleを返す。</span></li>
<li><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;">製品がユーザーによって購入されていなければ、即座に購入を開始できる。購入するには、まず、product ID等を含む</span></span><span style="background-color: #f9f9f9; color: #006600; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;"><span style="font-weight: bold; line-height: 21px;">IInAppBillingService#</span>getBuyIntent</span><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;">を送って購入のためのIntentをGoogle Playから取得する。product IDを指定するため、開発者はDevelopper Consoleで新しい製品を定義したときに、product IDをメモしておく必要がある。その後の流れは以下の通り。</span></li>
<ol><li><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;">Google Playは購入を開始するためのPendingIntentを含むBundleを返す。</span></span></li>
<li><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;">アプリは、PendingIntentをActivity#</span></span><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;">startIntentSenderForResultを呼び出して、開始させる。</span></li>
<li><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;">購入のフローが完了したら、Google Playは、Activity#onActivityResultに応答のIntentを送ってくる。</span></li>
</ol></ol><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;"><div><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;"><br />
</span></span></div></span></span><h4><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;">購入製品の消費</span></span></h4><ol></ol></div><div><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;"><br />
</span></span></div><div><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;">ユーザーが購入した製品を消費した事にした場合の流れは以下の通り。</span></span></div><div><ol><li><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;"><span style="background-color: #f9f9f9;"><span style="line-height: 21px;"><span style="color: #006600; font-weight: bold;">IInAppBillingService#</span></span><span style="color: #006600;">getPurchases</span></span><span style="background-color: #f9f9f9;">のリクエストを送って、ユーザーが製品を購入済みかどうかをチェックする。</span></span></span></li>
<li><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;">購入していれば、</span></span><span style="background-color: #f9f9f9; color: #006600; font-family: 'courier new', courier, monospace; font-size: 14px; font-weight: bold; line-height: 21px;">IInAppBillingService#</span><span style="background-color: #f9f9f9; color: #006600; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;">consumePurchase</span><span style="background-color: #f9f9f9; font-family: 'courier new', courier, monospace; font-size: 14px; line-height: 14px;">を呼び出して、消費した事にする。</span></li>
</ol></div><h4><span style="font-family: courier new, courier, monospace;"><span style="font-size: 14px; line-height: 14px;"><br />
</span></span></h4>ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-29566668602069085742013-02-01T19:45:00.003+09:002013-05-18T23:07:37.936+09:00アプリ内課金の製品タイプ - Androidのアプリ内課金(In-App Billing)のまとめ (その1)Androidのアプリ内課金の日本語の情報が、古い情報しか見当たらないので、現状(2013年2月)をまとめておく。<br />
<br />
<h2><span style="font-size: x-large;">APIのバージョン</span></h2>現状で、最初に考えるべき事は、課金のAPIのバージョンを決めることである。<br />
現在の段階では、APIのバージョンは以下の通り。<br />
<ul><li>Version 3(推奨)</li>
<li>Version 2</li>
</ul>バージョンの違いによって、販売できる製品(product)、課金APIの処理方式に違いがある。<br />
結論を先に書くと、定期的に自動課金をする場合(購読タイプの製品)は、Version 2を選択するしかない。(数週間後には、改善されるかもしれない)<br />
そうでなければ、コーディングが楽な処理方式のVersion 3を選択するべきである。<br />
<br />
<h2><span style="font-size: x-large;">販売できる製品タイプ</span></h2><h3><span style="font-size: large;">Version 3の場合</span></h3><div><span style="font-size: large;"><br />
</span></div><h4>管理タイプ製品(managed)</h4><div><br />
現在のところ、これしかない。これは、Googleによって購入履歴が管理されている。管理の単位はGoogle Playのユーザーアカウント毎である。</div><div><br />
</div><div>Googleによって管理される事により、アプリは、どのような場合でも、ユーザーが製品を購入したかどうかをAPIを通じて知る事ができる。例え、アプリが再インストールされた場合や別端末で購入した場合であってもである。</div><div><br />
</div><div>Version 3の場合はVersion 2と異なり、管理タイプ製品には消費(consume)機能がある。</div><div>通常、管理タイプは、一度購入すると二度と購入することができない。この機能は、一度だけ課金したい場合、例えば、広告を外すとか上位機能を有効にするとかに有用な機能である。</div><div>しかし、何度も購入できる製品の場合、例えばゲームで使う薬草やコイン等の場合は、二度と購入できないのでは困る。そのような場合は、課金タイプに対して、消費APIを呼び出す事により再度購入できるようになる。<br />
<br />
</div><h3><span style="font-size: large;">Version 2の場合</span></h3><div><span style="font-size: large;"><br />
</span></div><div>販売できる製品タイプは以下の通り。</div><div><ul><li>管理タイプ製品(managed)</li>
<li>非管理タイプ製品(unmanaged)</li>
<li>購読タイプ製品(subuscription)</li>
</ul><br />
<h4>管理タイプ製品</h4></div><div><br />
</div><div>Google Playのユーザーアカウント毎にに一度だけ購入できるタイプの製品である。広告を外すとか、上位機能を有効にするとかの場合に使う製品である。</div><div>ユーザーが管理タイプの製品を購入すると、Google Playでは、ユーザー毎に各アイテムの購入情報が永続的に管理される。</div><div>もし、ユーザーが一度購入した製品を購入しようとしても、Google Play側で「既に購入済み」のエラーを表示して再購入を予防する。</div><div>このタイプは、ユーザーがアプリを再インストールしたり、データを消去したり、別の新しい端末にインストールした時でも、購入情報をリストアできるため、便利である。</div><div><br />
</div><h4>非管理タイプ製品</h4><div><br />
</div><div>Google Playには、購入情報が保存されないタイプの製品である。つまり、後でGoogle Playに購入情報を問い合わせる事ができない。非管理タイプは、開発者側で購入情報を管理する必要がある。</div><div>また、Google Playは、ユーザーが何度も同じ製品を購入することを阻止しない。</div><div>非管理タイプは、消費されてしまうアイテム、つまりゲームの薬草や燃料などを売るのに向いていいる。このようなアイテムは、アプリの中で消費され、何度も購入するものだからである。</div><div><br />
</div><h4>購読タイプ製品</h4><div><br />
</div><div>これは、開発者が指定した間隔で課金される製品である。ユーザーが購読タイプを購入すると、Google Playとその課金システムは、指定された間隔と金額でユーザーに請求する。一度、ユーザーが購入すると、Google Playは、ユーザーの同意や行動がなくても、永続的に課金を続ける。</div><div>ユーザーは、いつでも購入をキャンセルする事ができる。</div><div>購読は、管理タイプ製品のみ適用できる。一度ユーザーが購入すると、払い戻しの機会はない。払い戻しを求めるユーザーは、開発者に直接連絡しなければならない。</div>ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-19846642297592839962011-05-05T20:59:00.003+09:002011-05-05T23:47:33.087+09:00Androidで端末がスリープ中でも定期的にバックグラウンド処理を実行する<span class="Apple-style-span" style="font-weight: normal;">
結論から言うと、AlarmManagerとPowerManager.WakeLockを組み合わせて使えばよい。<br /></span>
<span class="Apple-style-span" font-weight: normal;">具体的には、まず、AlarmManagerを使用して、定期的にBroadcastのIntentを投げる。AlarmManager.RTC_WAKEUPを指定して、端末がスリープ中でもBroadcastが行われるようにしておく。</span>
<span class="Apple-style-span" style="font-size: small;">
<pre>public class Foo {
private static final long INTERVAL = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
public void setBroadcast() {
Intent intent = new Intent(this, BarReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), INTERVAL, pendingIntent);
}
}</pre></span>
<span class="Apple-style-span" style="font-weight: normal;">
次に、BroadcastReceiverを継承したクラスで、BroadcastのIntentを受け取るようにする。端末がスリープ状態だった場合、onReceiveを抜けると、端末が再びスリープ状態に戻るのが仕様なので、 PowerManager.WakeLock#acquier() で、端末がスリープ状態に移行しないようにしておく。(BarReceiverのインスタンスよりも長い期間存在する必要があるので、static変数にしてある) そして、バックグラウンド処理を実行するサービスを起動する。</span>
<span class="Apple-style-span" style="font-size: small;">
<pre>public class BarReceiver extends BroadcastReceiver {
private static PowerManager.WakeLock wl;
@Override
public void onReceive(Context context, Intent arg1) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "BarReceiver");
wl.acquire();
Intent intent = new Intent(context, BazService.class);
context.startService(intent);
}
public static void releaseWakeLock() {
if (wl != null) {
wl.release();
}
}
}</pre></span>
<span class="Apple-style-span" style="font-weight: normal;">
サービスでは、バックグラウンド処理を実行し、最後にPowerManager.WakeLock#release()が実行されるようにして、端末が再びスリープ状態に戻れるようにしておく。
</span>
<span class="Apple-style-span" style="font-size: small;">
<pre>public class BazService extends Service {
@Override
public void onCreate() {
new Thread(new BazProcess())
.start();
}
private class BazProcess implements Runnable {
@Override
public void run() {
// ここでバックグラウンド処理を実行。
BarReceiver.releaseWakeLock() // 最後に端末がスリープ状態に戻れるようにする。
}
}</pre></span>ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-91198512317429884782011-04-23T17:54:00.000+09:002011-04-23T17:54:09.280+09:00Ubuntuでハイバネートできない問題を解決するUbuntu 10.10をEee PC 1215Nにインストールした直後の状態だと、ハイバネートできない。<br />
<br />
<span class="Apple-style-span" style="color: #333333; font-family: monospace; font-size: 13px; line-height: 19px;">/etc/pm/config.d/unload_module</span>のファイルに以下を記述すればOK。<br />
<div><span class="Apple-style-span" style="color: #333333; font-family: monospace; font-size: 13px; line-height: 19px;"><div><br />
</div><div>SUSPEND_MODULES="xhci-hcd"</div><div><br />
</div><div><span class="Apple-style-span" style="color: black; font-family: 'VL PGothic'; font-size: small; line-height: normal;">この問題は、USB 3.0をサポートしているボードを搭載していると起きる。</span></div><div><span class="Apple-style-span" style="color: black; font-family: 'VL PGothic'; font-size: small; line-height: normal;"><br />
</span></div><div><span class="Apple-style-span" style="color: black; font-family: 'VL PGothic'; font-size: small; line-height: normal;"><a href="https://wiki.ubuntu.com/MaverickMeerkat/ReleaseNotes/ja#%E8%B5%B7%E5%8B%95%E3%83%BB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%83%BB%E5%88%9D%E5%9B%9E%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AE%E6%8C%99%E5%8B%95">リリースノート</a>にも記載済み。</span></div></span></div>ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-83765745965212172432011-04-23T16:07:00.001+09:002011-04-23T16:09:40.961+09:00UbuntuのSynapticでEclipseとPleiadesをインストールした時のメモ<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Synapitcで、eclipseとpleiadesのパッケージを指定してインストールすればOK。</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">インストール後、/usr/lib/eclipse/eclipse.iniファイルに以下を追加</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: x-small; line-height: 20px;">-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar</span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: x-small; line-height: 20px;"><br />
</span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; line-height: 20px;">その後、以下を一度実行しておく。(インストール後、一度もEclipseを起動していなければ不要のはず)</span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: x-small;"><span class="Apple-style-span" style="line-height: 20px;">$ eclipse -clean</span></span></div><div><span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: x-small;"><span class="Apple-style-span" style="line-height: 20px;"><br />
</span></span></div>ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0tag:blogger.com,1999:blog-504833588421722757.post-8480890518930916302011-04-23T14:25:00.000+09:002011-04-23T14:25:45.997+09:00UbuntuでAndroidの実機をデバッガで接続するための設定どこにパラメータがあるのか忘れるのでメモ<br />
<br />
root権限で、<span class="Apple-style-span" style="color: #007000; font-family: monospace; font-size: 13px; line-height: 13px;">/etc/udev/rules.d/51-android.rule</span>を編集(ファイルがなければ作成)<br />
<br />
以下のような、記述を追加する。「0bb4」の部分はベンダの会社により異なる。(OEMの場合はどうなるんだろう)<br />
<span class="Apple-style-span" style="color: #007000; font-family: monospace; font-size: 13px; line-height: 13px;">SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"</span><br />
<br />
詳しい内容や、パラメータについては、以下を参考に。<br />
<br />
<a href="http://developer.android.com/intl/ja/guide/developing/device.html">http://developer.android.com/intl/ja/guide/developing/device.html</a>ettemhttp://www.blogger.com/profile/07161968875272625366noreply@blogger.com0