狠狠撸

狠狠撸Share a Scribd company logo
インテントと永続化
 2012/03/07(水)@PRO&BSC
          樋口 祐紀
  (higuchi_yuki@probsc.jp)
本日の内容
? 青空読手のご绍介
? どうやって作ってるの?
? マネタイズ
? インテント
? 永続化
? デバッグ方法
? 本日の課題
                2
青空読手のご绍介
青空読手のご绍介①
作者一覧やランキングから選択 文庫の表示 もちろんしおり機能も




                                  4
青空読手のご绍介②
               サイズ: 極大 + 太さ: 極太   サイズ: 極小 + 太さ: 極細

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




                                                 5
青空読手のご绍介③


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

  横向き表示にも対応




                             6
mobile ASCII vol.5に
掲載! 2011/7/29発行




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




                       端末                                          国
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
どうやって作ってるの?
どうやって作ってるの!?①
   ? データは青空文庫サイト *1 から
     zipファイルをDL後、解凍
       – 500文庫分のzipファイルへのリン
         クを保持

   ? フォントは「IPA明朝」をダウン
     ロードして利用
   ? SurfaceViewで頑張って描画
       – (背景+本文+ルビ+タイトル
         +ページ数)x 2
*1 … http://www.aozora.gr.jp/   10
どうやって作ってるの!?②
? Twitterによるつぶやき




                   11
どうやって作ってるの!?③
 ? 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
ちなみに、メールの場合はこんな感じ
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
どうやって作ってるの!?④
                                              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
マネタイズ
マネタイズとはなんぞや?




出典:マネタイズ【monetize】の意味 - 国語辞書 - goo辞書 http://goo.gl/RRI8   17
突然ですがクイズです
? 青空読手のユーザの 3% が ?210- で
  購入してくれていたとすると、これまでに私
  の懐にいくら入っていたでしょう?
  A. ?10,000-
  B. ?100,000-
  C. ?1,000,000-
  D. もっと稼げる。そう、iPhone ならね
                            18
実はけっこう稼げるAndroid!?




230,000 (ユーザ) × 3% (購入割合)
      × ?210- × 70% (開発者の取り分)

  =   ?1,014,300-               19
Android有料アプリは苦戦中...
? そこで広告!Androidでは AdMob がメジャー




                                20
DL 数が伸びないことには...
                     ①   ②   ③




① アンドロイダー レビュー記事
② アンドロイダー 青空文庫比較記事
③ au one market 登録               21
昨年度末の盛り上がり!




              22
インテント
インテントって何?
  ? 処理依頼メッセージのこと
      – 例: AK Notepadによる他アプリ機能




     AK Notepadにてテキ    ACTION_SEND イ ン    Twidroidにペーストさ
     ストを入力。メニューから      テ ン トが発行 さ れ 、 対   れる。ポイントは相互連
     Shareを指定すると…      応アプリがリストアップ        携を前提としてない点
出典:使って分かったAndroidとiPhoneの違い http://goo.gl/5nGc             24
Extra Data
IntentとExtraData                                            –
                                                            –
                                                                EXTRA_ALARM_COUNT
                                                                EXTRA_BCC
Activity 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
画面遷移もインテントで実施①
<?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
画面遷移もインテントで実施②
import   android.app.Activity;                サブ画面のActivity:
import   android.os.Bundle;                      src/SubActivity.java
import   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
画面遷移もインテントで実施③
???
                                        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
永続化
携帯電話では頻繁に要永続化
? 他アプリ起動、着呼、バッテリー切れ等々、様々
  な要因によりアプリが終了させられます。
 ? 頻繁に永続化しないと状態を喪失する

? Androidの永続化方法
 1)   共有プリファレンス(XMLによるハッシュマップ)
 2)   内部保存領域
 3)   外部保存領域
 4)   SQLite データベース
 5)   ネットワーク上のストレージ
                                 30
共有プリファレンスの保存
// インスタンス取得
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
共有プリファレンスの読み出し
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
デバッグ方法
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
AlertDialog の使い方
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("title");
builder.setMessage("message");
builder.setPositiveButton("OK", new
DialogInterface.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
本日の課題
? じゃんけんゲームの作成
 – 「グー」「チョキ」「パー」のボタンを押した際に、ランダム
   でアプリ側も手を出し、詳細を決める
 – 10回中、何回勝つかを競うゲーム
 – 最高得点と履歴を永続化して保持
 – 最高得点はメイン画面に、履歴はサブ画面に表示
 – 最高得点をとった際にtwitter / メールで周知できる
 – 上記の他に1つ独自機能を追加
                                   36

More Related Content

Android Lecture #02 @PRO&BSC Inc.

  • 1. インテントと永続化 2012/03/07(水)@PRO&BSC 樋口 祐紀 (higuchi_yuki@probsc.jp)
  • 2. 本日の内容 ? 青空読手のご绍介 ? どうやって作ってるの? ? マネタイズ ? インテント ? 永続化 ? デバッグ方法 ? 本日の課題 2
  • 5. 青空読手のご绍介② サイズ: 極大 + 太さ: 極太 サイズ: 極小 + 太さ: 極細 文字のサイズと太さの指定 5
  • 6. 青空読手のご绍介③ SDカードや本体内の テキストの読み込みも可能 横向き表示にも対応 6
  • 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
  • 10. どうやって作ってるの!?① ? データは青空文庫サイト *1 から zipファイルをDL後、解凍 – 500文庫分のzipファイルへのリン クを保持 ? フォントは「IPA明朝」をダウン ロードして利用 ? SurfaceViewで頑張って描画 – (背景+本文+ルビ+タイトル +ページ数)x 2 *1 … http://www.aozora.gr.jp/ 10
  • 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. ちなみに、メールの場合はこんな感じ 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. どうやって作ってるの!?④ 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
  • 18. 突然ですがクイズです ? 青空読手のユーザの 3% が ?210- で 購入してくれていたとすると、これまでに私 の懐にいくら入っていたでしょう? A. ?10,000- B. ?100,000- C. ?1,000,000- D. もっと稼げる。そう、iPhone ならね 18
  • 19. 実はけっこう稼げるAndroid!? 230,000 (ユーザ) × 3% (購入割合) × ?210- × 70% (開発者の取り分) = ?1,014,300- 19
  • 21. DL 数が伸びないことには... ① ② ③ ① アンドロイダー レビュー記事 ② アンドロイダー 青空文庫比較記事 ③ au one market 登録 21
  • 24. インテントって何? ? 処理依頼メッセージのこと – 例: AK Notepadによる他アプリ機能 AK Notepadにてテキ ACTION_SEND イ ン Twidroidにペーストさ ストを入力。メニューから テ ン トが発行 さ れ 、 対 れる。ポイントは相互連 Shareを指定すると… 応アプリがリストアップ 携を前提としてない点 出典:使って分かったAndroidとiPhoneの違い http://goo.gl/5nGc 24
  • 25. Extra Data IntentとExtraData – – EXTRA_ALARM_COUNT EXTRA_BCC Activity 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. 画面遷移もインテントで実施① <?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. 画面遷移もインテントで実施② import android.app.Activity; サブ画面のActivity: import android.os.Bundle; src/SubActivity.java import 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. 画面遷移もインテントで実施③ ??? 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
  • 30. 携帯電話では頻繁に要永続化 ? 他アプリ起動、着呼、バッテリー切れ等々、様々 な要因によりアプリが終了させられます。 ? 頻繁に永続化しないと状態を喪失する ? Androidの永続化方法 1) 共有プリファレンス(XMLによるハッシュマップ) 2) 内部保存領域 3) 外部保存領域 4) SQLite データベース 5) ネットワーク上のストレージ 30
  • 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. 共有プリファレンスの読み出し 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
  • 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. AlertDialog の使い方 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("title"); builder.setMessage("message"); builder.setPositiveButton("OK", new DialogInterface.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. 本日の課題 ? じゃんけんゲームの作成 – 「グー」「チョキ」「パー」のボタンを押した際に、ランダム でアプリ側も手を出し、詳細を決める – 10回中、何回勝つかを競うゲーム – 最高得点と履歴を永続化して保持 – 最高得点はメイン画面に、履歴はサブ画面に表示 – 最高得点をとった際にtwitter / メールで周知できる – 上記の他に1つ独自機能を追加 36