Android Lecture #02 @PRO&BSC Inc.

1,112 views

Published on

2012/03/07 に株式会社 PRO&BSC にて行った Android 研修の資料 #2 です。

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,112
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Android Lecture #02 @PRO&BSC Inc.

  1. 1. インテントと永続化 2012/03/07(水)@PRO&BSC 樋口 祐紀 (higuchi_yuki@probsc.jp)
  2. 2. 本日の内容• 青空読手のご紹介• どうやって作ってるの?• マネタイズ• インテント• 永続化• デバッグ方法• 本日の課題 2
  3. 3. 青空読手のご紹介
  4. 4. 青空読手のご紹介①作者一覧やランキングから選択 文庫の表示 もちろんしおり機能も 4
  5. 5. 青空読手のご紹介② サイズ: 極大 + 太さ: 極太 サイズ: 極小 + 太さ: 極細文字のサイズと太さの指定 5
  6. 6. 青空読手のご紹介③ SDカードや本体内の テキストの読み込みも可能 横向き表示にも対応 6
  7. 7. mobile ASCII vol.5に掲載! 2011/7/29発行 7
  8. 8. ディベロッパーコンソール 端末 国1 Samsung Galaxy S 10.00% (12,198) 1 日本 98.23% (119,826)2 Sharp IS03 8.93% (10,890) 2 アメリカ合衆国 0.34% (420)3 Fujitsu Toshiba REGZA Phone T01C 7.17% (8,752) 3 中国 0.31% (384)4 SEMC Xperia Arco 6.09% (7,427) 4 大韓民国 0.20% (238)5 Samsung Galaxy Tab 5.89% (7,190) 5 台湾 0.18% (220)6 Samsung Galaxy S2 5.17% (6,306) 6 タイ 0.09% (112)7 SEMC Xperia Arc 5.15% (6,282) 7 香港 0.09% (109)8 SEMC Xperia X10 4.45% (5,432) 8 イギリス 0.07% (83)9 SEMC Experia Acro 2.62% (3,194) 9 オーストラリア 0.06% (71)10 その他 44.52% (54,312) 10 その他 0.43% (520) 8
  9. 9. どうやって作ってるの?
  10. 10. どうやって作ってるの!?① • データは青空文庫サイト *1 から zipファイルをDL後、解凍 – 500文庫分のzipファイルへのリン クを保持 • フォントは「IPA明朝」をダウン ロードして利用 • SurfaceViewで頑張って描画 – (背景+本文+ルビ+タイトル +ページ数)x 2*1 … http://www.aozora.gr.jp/ 10
  11. 11. どうやって作ってるの!?②• Twitterによるつぶやき 11
  12. 12. どうやって作ってるの!?③ • Twitterへのつぶやき投稿はこんなにかんたん!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); 12
  13. 13. ちなみに、メールの場合はこんな感じIntent intent = new Intent();// アクションとデータタイプを指定intent.setAction(Intent.ACTION_SEND);intent.setType("message/rfc822");// TO、CC、BCC、件名、本文を順に指定intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "foo@example.com" });intent.putExtra(Intent.EXTRA_CC, new String[] { "cc@example.com" });intent.putExtra(Intent.EXTRA_BCC, new String[] { "bcc@example.com" });intent.putExtra(Intent.EXTRA_SUBJECT, "件名");intent.putExtra(Intent.EXTRA_TEXT, "本文の内容");// Intent を発行startActivity(intent); 13
  14. 14. どうやって作ってるの!?④ 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=hyukix@gmail.com, to=hyukix@gmail.com, subject=Bug Report - AozoraYomite, body=report)【参考サイト】throw Life - Androidアプリのバグ報告システムを考えるhttp://www.adamrocker.com/blog/288/bug-report-system-for-android.html 14
  15. 15. どうやって作ってるの!?⑤• 青空プロバイダとの連携機能 15
  16. 16. マネタイズ
  17. 17. マネタイズとはなんぞや?出典:マネタイズ【monetize】の意味 - 国語辞書 - goo辞書 http://goo.gl/RRI8 17
  18. 18. 突然ですがクイズです• 青空読手のユーザの 3% が ¥210- で 購入してくれていたとすると、これまでに私 の懐にいくら入っていたでしょう? A. ¥10,000- B. ¥100,000- C. ¥1,000,000- D. もっと稼げる。そう、iPhone ならね 18
  19. 19. 実はけっこう稼げるAndroid!?230,000 (ユーザ) × 3% (購入割合) × ¥210- × 70% (開発者の取り分) = ¥1,014,300- 19
  20. 20. Android有料アプリは苦戦中...• そこで広告!Androidでは AdMob がメジャー 20
  21. 21. DL 数が伸びないことには... ① ② ③① アンドロイダー レビュー記事② アンドロイダー 青空文庫比較記事③ au one market 登録 21
  22. 22. 昨年度末の盛り上がり! 22
  23. 23. インテント
  24. 24. インテントって何? • 処理依頼メッセージのこと – 例: AK Notepadによる他アプリ機能 AK Notepadにてテキ ACTION_SEND イ ン Twidroidにペーストさ ストを入力。メニューから テ ン トが発行 さ れ 、 対 れる。ポイントは相互連 Shareを指定すると… 応アプリがリストアップ 携を前提としてない点出典:使って分かったAndroidとiPhoneの違い http://goo.gl/5nGc 24
  25. 25. Extra DataIntentとExtraData – – EXTRA_ALARM_COUNT EXTRA_BCCActivity Actions Broadcast Actions – EXTRA_CC– ACTION_MAIN – ACTION_TIME_TICK – EXTRA_CHANGED_COMPONENT_NAME– ACTION_VIEW – ACTION_TIME_CHANGED – EXTRA_DATA_REMOVED– ACTION_ATTACH_DATA – ACTION_TIMEZONE_CHANGED – EXTRA_DOCK_STATE– ACTION_EDIT – ACTION_BOOT_COMPLETED – EXTRA_DOCK_STATE_CAR– ACTION_PICK – ACTION_PACKAGE_ADDED – EXTRA_DOCK_STATE_DESK– ACTION_CHOOSER – ACTION_PACKAGE_CHANGED – EXTRA_DOCK_STATE_UNDOCKED– ACTION_GET_CONTENT – ACTION_PACKAGE_REMOVED – EXTRA_DONT_KILL_APP– ACTION_DIAL – ACTION_PACKAGE_RESTARTED – EXTRA_EMAIL– ACTION_CALL – ACTION_PACKAGE_DATA_CLEA – EXTRA_INITIAL_INTENTS– ACTION_SEND RED – EXTRA_INTENT– ACTION_SENDTO – ACTION_UID_REMOVED – EXTRA_KEY_EVENT– ACTION_ANSWER – ACTION_BATTERY_CHANGED – EXTRA_PHONE_NUMBER– ACTION_INSERT – ACTION_POWER_CONNECTED – EXTRA_REMOTE_INTENT_TOKEN– ACTION_DELETE – ACTION_POWER_DISCONNECT – EXTRA_REPLACING ACTION_RUN ED– – EXTRA_SHORTCUT_ICON ACTION_SYNC – ACTION_SHUTDOWN– – EXTRA_SHORTCUT_ICON_RESOURCE– ACTION_PICK_ACTIVITY – EXTRA_SHORTCUT_INTENT– ACTION_SEARCH – EXTRA_STREAM– ACTION_WEB_SEARCH – EXTRA_SHORTCUT_NAME– ACTION_FACTORY_TEST – EXTRA_SUBJECT // インテントによるブラウザ起動の例 – EXTRA_TEMPLATE Uri uri = Uri.parse("http://probsc.jp"); – EXTRA_TEXT Intent intent = new Intent(Intent.ACTION_VIEW, uri); – EXTRA_TITLE startActivity(intent); – EXTRA_UID 25
  26. 26. 画面遷移もインテントで実施①<?xml version="1.0" encoding="utf-8"?> サブ画面のレイアウト:<LinearLayout res/layout/sub.xml xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/txtMessage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="this is sub activity !!" /> <Button android:id="@+id/btnFinish" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="finish" /></LinearLayout> 26
  27. 27. 画面遷移もインテントで実施②import android.app.Activity; サブ画面のActivity:import android.os.Bundle; src/SubActivity.javaimport android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class SubActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); Button btnFinish = (Button)findViewById(R.id.btnFinish); btnFinish.setOnClickListener(new OnClickListener() { public void onClick(View v) { SubActivity.this.finish(); } }); }} 27
  28. 28. 画面遷移もインテントで実施③・・・ AndroidManifest.xml (一部抜粋)<application android:icon="@drawable/icon" android:label="@string/app_name" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SubActivity" /></application>・・・ メイン画面のActivity: src/MainActivity.java (一部抜粋)Intent intent = new Intent(MainActivity.this, SubActivity.class);startActivity(intent); 28
  29. 29. 永続化
  30. 30. 携帯電話では頻繁に要永続化• 他アプリ起動、着呼、バッテリー切れ等々、様々 な要因によりアプリが終了させられます。 ⇒ 頻繁に永続化しないと状態を喪失する• Androidの永続化方法 1) 共有プリファレンス(XMLによるハッシュマップ) 2) 内部保存領域 3) 外部保存領域 4) SQLite データベース 5) ネットワーク上のストレージ 30
  31. 31. 共有プリファレンスの保存// インスタンス取得SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);// エディタ取得SharedPreferences.Editor editor = pre.edit();// 値を書き込みeditor.putString("key_text", "test");editor.putInt("key_int", 1);editor.putLong("key_long", (long)1.1);editor.putFloat("key_float", (float)1.1);editor.putBoolean("key_bool", true);// editor.clear(); // すべての設定を削除// 保存editor.commit(); 31
  32. 32. 共有プリファレンスの読み出しSharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);/*// 名前付きプリファレンスの取得SharedPreferences pre = getSharedPreferences("pre_key_01",MODE_PRIVATE);*/String strVal = pre.getString("key_text", "none");int intVal = pre.getInt("key_int", 0);long longVal = pre.getLong("key_long", (long)0.0);float floatVal = pre.getFloat("key_float", (float)0.0);boolean boolVal = pre.getBoolean("key_bool", false); 32
  33. 33. デバッグ方法
  34. 34. LogCat の使い方 [ウィンドウ(W)] – [ビューの 表示(V)] – [LogCat] で 下部に「LogCat」ビューが追加 Log.e("error label", "error msg"); Log.w("warning label", "warning msg"); Log.i("info label", "info msg"); Log.d("debug label", "debug msg"); Log.v("verbose label", "verbose msg"); 34
  35. 35. AlertDialog の使い方AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("title");builder.setMessage("message");builder.setPositiveButton("OK", newDialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Toast.makeText(getApplicationContext(), "OK Clicked!!", Toast.LENGTH_LONG).show(); }});builder.setNegativeButton("No", null);AlertDialog dialog = builder.create();dialog.show(); 35
  36. 36. 本日の課題• じゃんけんゲームの作成 – 「グー」「チョキ」「パー」のボタンを押した際に、ランダム でアプリ側も手を出し、詳細を決める – 10回中、何回勝つかを競うゲーム – 最高得点と履歴を永続化して保持 – 最高得点はメイン画面に、履歴はサブ画面に表示 – 最高得点をとった際にtwitter / メールで周知できる – 上記の他に1つ独自機能を追加 36

×