◆ アラームの設定

Tapia Tapia
アラームを設定します。設定後TAPIAが笑顔で時間を知らせてくれます。AndroidのAPIを使用します。

◆◇◆◇◆サンプルコード:設定した時間をTAPIAが教えてくれます◆◇◆◇◆

1) ボタンを追加する

サンプルコード「0.ボタンを追加する」を参考に作成します

2) layoutを追加する

レイアウト作成① tapia-sample\app\src\main\res\layout直下へ「alarm_layout.xml」を作成します。時間をセットする時に使います。
Tapia
レイアウト作成② サンプルコード「5.TAPIAの表情を操作する」を参考にlayout「animation_layout.xml」を作成します。このレイアウトはセットした時間を知らせるときに使います。

3) Activityに以下処理を追加する

public class AlarmActivity extends TapiaActivity {

    private AlarmManager aManager;
    private Calendar  calendar;
    private TimePicker  tPicker;
    private SharedPreferences sPrefe;
    private int  c_hour;
    private int c_minute;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alarm_layout);

        // 現在時刻の取得
        calendar = Calendar.getInstance();//カレンダークラスのオブジェクトを生成する
        calendar.setTimeInMillis(System.currentTimeMillis());//日付取得

        //現在の時刻を変数にセット
        c_hour = calendar.get(Calendar.HOUR_OF_DAY);
        c_minute = calendar.get(Calendar.MINUTE);

        final Button alarmSetB = (Button)findViewById(R.id.Bt1);//保存ボタン
        final ImageView alarmBackB = (ImageView)findViewById(R.id.btnBack);//戻るボタン

        // 前回TimePickerで設定・保存した時刻を取得
        sPrefe = PreferenceManager.getDefaultSharedPreferences(this);
        getSdPreferences(); // 保存した時刻を取得

        // 以前保存した時刻または、現在の時刻を表示
        tPicker = (TimePicker)findViewById(R.id.timePicker1);
        tPicker.setIs24HourView(true);
        tPicker.setCurrentHour(c_hour);
        tPicker.setCurrentMinute(c_minute);

        //「戻る」ボタンを押した時、終了
        alarmBackB.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View arg0) {
                finish();
            }
        });

        //「保存」ボタンを押した時、時間を保存
        alarmSetB.setOnClickListener( new Button.OnClickListener() {
            public void onClick(View arg0) {
                // アラームの設定・保存
                startAlarm();
            }
        });
    }
    public void startAlarm() {

        aManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

        calendar = Calendar.getInstance();//カレンダークラスのオブジェクトを生成
        calendar.setTimeInMillis(System.currentTimeMillis());//現在時刻設定

        // TimePicker の時刻を取得
        tPicker = (TimePicker)findViewById(R.id.timePicker1);
        c_hour = tPicker.getCurrentHour();
        c_minute = tPicker.getCurrentMinute();

        // TimePicker で取得した時刻をカレンダーに設定
        calendar.set(Calendar.HOUR_OF_DAY, c_hour);
        calendar.set(Calendar.MINUTE, c_minute );

        //セットした時間が現在より前だった場合、翌日アラームが起動するように設定
        if(calendar.getTimeInMillis()< System.currentTimeMillis()){
            calendar.add(Calendar.DAY_OF_YEAR,1);
        }

        // アラームに登録
        aManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), getPendingIntent());

        // 時刻を保存
        SharedPreferences.Editor editor = sPrefe.edit();
        editor.putInt( "cal_hour", c_hour );
        editor.putInt( "cal_minute", c_minute );
        editor.commit();

    }

    private PendingIntent getPendingIntent() {

        // セットした時間に起動するActivityを設定
        Intent intent = new Intent( getApplicationContext(), AlarmNotificationActivity.class );
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT );
        return pendingIntent;
    }

    private void getSdPreferences() {
        // 保存した時刻を取得
        c_hour = sPrefe.getInt("cal_hour", c_hour);
        c_minute = sPrefe.getInt("cal_minute", c_minute);
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}
  

4) 時間になったときに起動するActivityを作成する。以下処理を追加する

//セットした時間になるとこのActivityが起動する。ここではタピアが笑顔で「時間です」と教えてくれる
public class AlarmNotificationActivity extends TapiaActivity  {
    TapiaAnimation tapiaAnimation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.animation_layout);

        ImageView tapiaEyes = (ImageView) findViewById(R.id.top);
        ImageView bBack =(ImageView) findViewById(R.id.btn1);

        //日本語の設定をする
        TapiaApp.setCurrentLanguage(Language.LanguageID.JAPANESE);
        //TapiaActivity.ttsProviderクラスのインスタンスを取得する
        ttsProvider = TapiaApp.currentLanguage.getTTSProvider();

        //アニメーションのインスタンスを作成する
        tapiaAnimation = new TapiaAnimation(this,tapiaEyes);
        //笑顔をセット
        tapiaAnimation.startAnimation(SMILING,true);

        //「戻る」を押した時終了する
        bBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        //時間になるとタピアが「はーい、〇〇さん」と話しかける
        try {
            ttsProvider.say("はーい、〇〇さん");
            tapiaAnimation.setBackground(R.drawable.gradient_pink);
        } catch (LanguageNotSupportedException e) {
            e.printStackTrace();
        }

        //時間になった事をタピアが動きながら教えてくれる。戻るボタンを押すと止まる。
        ttsProvider.setOnSpeechCompleteListener(new TTSProvider.OnSpeechCompleteListener() {
            @Override
            public void onSpeechComplete() {
                //アニメーション終了後、上に15度動く
                TapiaRobot.rotate(activity, TapiaRobot.RotateOrientation.UP,15 , new TapiaRobot.OnRotationFinishListener() {

                    @Override
                    public void onRotationFinish() {
                        try {
                            ttsProvider.say("時間です。時間になりましたよ。「戻る」ボタンを押して止めて下さいね。");
                        } catch (LanguageNotSupportedException e) {
                            e.printStackTrace();
                        }
                        //上へ動いた後、下に15度動く
                        TapiaRobot.rotate(activity, TapiaRobot.RotateOrientation.DOWN,15 , null);
                    }
                });
            }
        });
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
    @Override
    protected void onPause() {
        super.onPause();
        tapiaAnimation.stopAnimation();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }
}