34
青空読手とインテント 2011/09/30()@東北支部発信会 樋口 祐紀 (@hyukix / [email protected])

AOZORAYOMITE and Intent

Embed Size (px)

DESCRIPTION

青空読手の諸々の紹介とインテントっていいね!ってお話。 11/09/30(金)第20回日本Androidの会東北支部発信会@仙台AER8Fにて発表した際のスライドです。

Citation preview

Page 1: AOZORAYOMITE and Intent

青空読手とインテント 2011/09/30(金)@東北支部発信会

樋口 祐紀

(@hyukix / [email protected])

Page 2: AOZORAYOMITE and Intent

自己紹介

Page 3: AOZORAYOMITE and Intent

自己紹介

名前: 樋口 祐紀

(ひぐち ゆうき)

年齢: 31歳

(1980/02/08)

出身: 三重県四日市市

所属: (株)PRO&BSC

趣味: 10年前までは...

3

Page 4: AOZORAYOMITE and Intent

Androidとの関わりは...

4

Page 5: AOZORAYOMITE and Intent

青空読手って!?

Page 6: AOZORAYOMITE and Intent

青空読手のご紹介①

6

作者一覧やランキングから選択 文庫の表示 もちろんしおり機能も

Page 7: AOZORAYOMITE and Intent

文字のサイズと太さの指定

サイズ: 極大 + 太さ: 極太 サイズ: 極小 + 太さ: 極細

7

青空読手のご紹介②

Page 8: AOZORAYOMITE and Intent

青空読手のご紹介③

8

横向き表示にも対応

SDカードや本体内の テキストの読み込みも可能

Page 9: AOZORAYOMITE and Intent

mobile ASCII vol.5に掲載!

9

2011/7/29発行

Page 10: AOZORAYOMITE and Intent

PLUTINUM Prize 頂きました!

10

Page 11: AOZORAYOMITE and Intent

ディベロッパーコンソール

11

端 末

1 Samsung Galaxy S 12.5% (14,561)

2 Sharp IS03 10.7% (12,507)

3 Fujitsu Toshiba REGZA Phone T01C 8.8% (10,219)

4 SEMC Xperia X10 6.8% (7,946)

5 Samsung Galaxy Tab 6.5% (7,544)

6 SO-02C 6.4% (7,485)

7 SEMC Xperia Arc 6.3% (7,313)

8 Samsung Galaxy S2 4.3% (4,959)

9 Sharp IS01 3.1% (3,599)

10 Sharp Lynx 3D SH-03C 3.0% (3,455)

1 日本 98.3% (114,643)

2 アメリカ合衆国 0.4% (481)

3 中国 0.3% (321)

4 大韓民国 0.2% (224)

5 台湾 0.2% (214)

6 香港 0.1% (98)

7 タイ 0.1% (84)

8 イギリス 0.1% (71)

9 オーストラリア 0.0% (52)

10 シンガポール 0.0% (51)

Page 12: AOZORAYOMITE and Intent

どうやって作ってるの?

Page 13: AOZORAYOMITE and Intent

どうやって作ってるの!?①

• データは青空文庫サイト*1からzipファイルをDL後、解凍

– 500文庫分のzipファイルへのリンクを保持

• フォントは「IPA明朝」をダウンロードして利用

• SurfaceViewで頑張って描画

– (背景+本文+ルビ+タイトル+ページ数)x 2

13 *1 … http://www.aozora.gr.jp/

Page 14: AOZORAYOMITE and Intent

どうやって作ってるの!?②

• Twitterによるつぶやき

14

Page 15: AOZORAYOMITE and Intent

どうやって作ってるの!?③

• Twitterへのつぶやき投稿はこんなにかんたん!

15

final String msg = " 『坊っちゃん』なう #aozorayomite";

final Uri uri = Uri.parse( http://twitter.com/home/?status= + URLEncoder.encode(msg, "UTF-8"));

final Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

Page 16: AOZORAYOMITE and Intent

どうやって作ってるの!?④

16

def get_or_post(self): pdev = self.request.get('dev').encode('utf-8') pos = self.request.get('os').encode('utf-8') pver = self.request.get('ver').encode('utf-8') ptitle = self.request.get('title').encode('utf-8') pbug = self.request.get('bug').encode('utf-8') report = "dev: " + pdev + "¥n" report += "os: " + pos + "¥n" report += "ver: " + pver + "¥n" report += "title: " + ptitle + "¥n" report += "bug: " + pbug mail.send_mail( sender='[email protected]', to='[email protected]', subject='Bug Report - AozoraYomite', body=report)

【参考サイト】throw Life - Androidアプリのバグ報告システムを考える http://www.adamrocker.com/blog/288/bug-report-system-for-android.html

Page 17: AOZORAYOMITE and Intent

どうやって作ってるの!?⑤

• 青空プロバイダとの連携機能

17

Page 18: AOZORAYOMITE and Intent

突然ですがクイズです

• Twitter / Evernote / メールを利用し、任意の文字列を送信するAndroidアプリを作るのに必要な時間は?

A. 3分

B. 3時間

C. 3日

D. Androidでは無理... だけど...

3秒でできるよ。そう、iPhoneならね 18

Page 19: AOZORAYOMITE and Intent

これだけ書けば解決! public class Test extends Activity {

/** Called when the activity is first created. */

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

new AlertDialog.Builder(this).setMessage("Start activity ?")

.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

Intent intent = new Intent(Intent.ACTION_SEND);

intent.setType("text/plain");

intent.putExtra(Intent.EXTRA_TEXT, "Hello, Android!!");

startActivity(intent);

}

}).setNegativeButton("No", null).show();

}

} 19

Page 20: AOZORAYOMITE and Intent

Evernote

IMoNi

twicca

This is Android!!

20

Page 21: AOZORAYOMITE and Intent

インテントって!?

Page 22: AOZORAYOMITE and Intent

インテントって何?

• 処理依頼メッセージのこと

– 例: AK Notepadによる他アプリ機能

AK Notepadにてテキストを入力。メニューからShareを指定すると…

ACTION_SEND イ ンテントが発行され、対応アプリがリストアップ

Twidroidにペーストされる。ポイントは相互連携を前提としてない点

出典:使って分かったAndroidとiPhoneの違い http://goo.gl/5nGc 22

Page 23: AOZORAYOMITE and Intent

IntentとExtraData Activity Actions

– ACTION_MAIN

– ACTION_VIEW

– ACTION_ATTACH_DATA

– ACTION_EDIT

– ACTION_PICK

– ACTION_CHOOSER

– ACTION_GET_CONTENT

– ACTION_DIAL

– ACTION_CALL

– ACTION_SEND

– ACTION_SENDTO

– ACTION_ANSWER

– ACTION_INSERT

– ACTION_DELETE

– ACTION_RUN

– ACTION_SYNC

– ACTION_PICK_ACTIVITY

– ACTION_SEARCH

– ACTION_WEB_SEARCH

– ACTION_FACTORY_TEST

Broadcast Actions – ACTION_TIME_TICK

– ACTION_TIME_CHANGED

– ACTION_TIMEZONE_CHANGED

– ACTION_BOOT_COMPLETED

– ACTION_PACKAGE_ADDED

– ACTION_PACKAGE_CHANGED

– ACTION_PACKAGE_REMOVED

– ACTION_PACKAGE_RESTARTED

– ACTION_PACKAGE_DATA_CLEARED

– ACTION_UID_REMOVED

– ACTION_BATTERY_CHANGED

– ACTION_POWER_CONNECTED

– ACTION_POWER_DISCONNECTED

– ACTION_SHUTDOWN

Extra Data – EXTRA_ALARM_COUNT

– EXTRA_BCC

– EXTRA_CC

– EXTRA_CHANGED_COMPONENT_NAME

– EXTRA_DATA_REMOVED

– EXTRA_DOCK_STATE

– EXTRA_DOCK_STATE_CAR

– EXTRA_DOCK_STATE_DESK

– EXTRA_DOCK_STATE_UNDOCKED

– EXTRA_DONT_KILL_APP

– EXTRA_EMAIL

– EXTRA_INITIAL_INTENTS

– EXTRA_INTENT

– EXTRA_KEY_EVENT

– EXTRA_PHONE_NUMBER

– EXTRA_REMOTE_INTENT_TOKEN

– EXTRA_REPLACING

– EXTRA_SHORTCUT_ICON

– EXTRA_SHORTCUT_ICON_RESOURCE

– EXTRA_SHORTCUT_INTENT

– EXTRA_STREAM

– EXTRA_SHORTCUT_NAME

– EXTRA_SUBJECT

– EXTRA_TEMPLATE

– EXTRA_TEXT

– EXTRA_TITLE

– EXTRA_UID

// インテントによるブラウザ起動の例

Uri uri = Uri.parse("http://probsc.jp");

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

23

Page 24: AOZORAYOMITE and Intent

インテントは空も飛ぶんです!

24

Androidでブラウズ

おもむろにクリック!

Chrome to Phone

Page 25: AOZORAYOMITE and Intent

空飛ぶインテントの正体は...

• Cloud to Device Messaging (C2DM)

–サーバからAndroidアプリケーションへの軽量

メッセージの送信を助けるサービス

–メッセージはキューイングされるが順序保証なし

–アプリは常時起動の必要はなく、 Intent

Broadcastをトリガーに起動される

–処理方法はアプリに依存

–Android2.2 (Froyo) が必要

–Googleアカウントの設定と接続が必要

25

Page 26: AOZORAYOMITE and Intent

Mobile Device

App

Sender ID

Application ID

C2DMのアーキテクチャ

26

Third-Party Application Server

Google C2DM Servers

1. (Register) Sender ID / Application

2. Registration ID (定期的に更新)

3. Registration ID (定期的に更新)

4. (POST https://android.apis.google.com/c2dm/send) Registration ID / data.<key>

5. Message

6. Intent

Page 27: AOZORAYOMITE and Intent

青空読手でのインテント活用

• 青空文庫サイトから書籍データをダウンロードするためのアプリ。リーダー機能は備えていない

× • 青空文庫リーダーアプリ。書籍データへのリンクは予め収

録したランキング。任意データ取得は不可

27

Page 28: AOZORAYOMITE and Intent

28

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android=http://schemas.android.com/apk/res/android

package="com.gmail.hyukix.aozorayomite" android:versionName="0.9.8.2"

android:versionCode=“10”>

・・・

<application android:icon=“@drawable/icon” android:label=“@string/app_name”>

<activity android:name=".AozoraYomite" android:label="@string/app_name"

android:screenOrientation=“portrait”>

<intent-filter><action android:name=“android.intent.action.MAIN” />

<category android:name=“android.intent.category.LAUNCHER” /></intent-filter>

</activity>

<activity android:name=".Reader" android:label="@string/app_name"

android:screenOrientation="portrait">

<intent-filter>

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<!-- file://xxxxのようなリクエストを受け付ける -->

<data android:scheme="file" android:mimeType="text/plain" />

</intent-filter>

</activity>

・・・

</application>

・・・

</manifest>

暗黙的インテントを受け取るためのManifest宣言

Page 29: AOZORAYOMITE and Intent

29

package com.gmail.hyukix.aozorayomite;

・・・

public class Reader extends Activity {

・・・

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

・・・

if (Intent.ACTION_VIEW.equals(getIntent().getAction())) {

// 暗黙的インテント

・・・

} else {

// 明示的インテント

・・・

}

・・・

}

・・・

}

Activityでのインテント判定と処理振り分け

Page 30: AOZORAYOMITE and Intent

マネタイズ

Page 31: AOZORAYOMITE and Intent

この1年で…

31 出典:http://www.apple.com/jp/macbookair/

Page 32: AOZORAYOMITE and Intent

DL 数が伸びないことには...

32

① ② ③

① アンドロイダー レビュー記事 ② アンドロイダー 青空文庫比較記事 ③ au one market 登録

Page 33: AOZORAYOMITE and Intent

昨年度末の盛り上がり!

33

Page 34: AOZORAYOMITE and Intent

今後ともどうぞよろしくお願いします

• ハンドアウト

– http://bit.ly/nodakK (3.3MB)

• 青空読手 ver0.9.8.16 (野良アプリ版)

– http://bit.ly/nvkHfM (267KB)

• 青空読手 ver0.9.8.16 (AndroidMarket)

34