Goodroid

GoodroidはAndroidアプリ開発のための情報をコラムやブログで紹介するサイトです。


アラームを設定する
ここではアラームを設定する方法を確認していきます。

アラームを設定するためには「 AlarmClock.ACTION_SET_ALARM 」でアクションを指定したインテントを発行する必要があります。サンプルでは、TimePickerで入力した時刻と、EditTextで入力したメッセージをインテントへ指定し、アラームの起動時刻と表示メッセージを設定します。

また、アラームを設定するためには「 AndroidManifest.xml 」で

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

とパーミッションを設定する必要があるので気を付けてください。

AlarmActivity.java
package goodroid.sample.alarm;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.AlarmClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TimePicker;

public class AlarmActivity extends Activity implements OnClickListener{
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // ボタンの取得
        Button btn = (Button)findViewById(R.id.btn);

        // ボタンをリスナーに登録
        btn.setOnClickListener(this);

    }

    // ボタン押下時の処理
    public void onClick(View v) {

// TimePickerインスタンスを取得
TimePicker timePicker = (TimePicker)findViewById(R.id.time_picker);

// 設定時刻の時間を取得
int hour = timePicker.getCurrentHour();

// 設定時刻の分を取得
int min = timePicker.getCurrentMinute();

        // アラームを設定するインテントを取得する
        Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM);

        // アラーム時刻を設定する
        intent.putExtra(AlarmClock.EXTRA_HOUR, hour);
        intent.putExtra(AlarmClock.EXTRA_MINUTES, min);

        // テキストボックスを取得
        EditText editText = (EditText)findViewById(R.id.msg);

        // 入力されたメッセージを取得
        String msg = editText.getText().toString();

        // アラームメッセージを設定する
        intent.putExtra(AlarmClock.EXTRA_MESSAGE, msg);

        // インテントを発行する
        startActivity(intent);

    }
}

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TimePicker
        android:id="@+id/time_picker"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="メッセージ:" />

    <EditText
        android:id="@+id/msg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn"
        android:layout_height="wrap_content"
        android:layout_width="150dp"
        android:layout_gravity="center"
        android:text="設定する" />

</LinearLayout>

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="goodroid.sample.alarm"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".AlarmActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

8行目でパーミッションの設定を行っています。
本ソースを実行すると、下のような画面になります。

実行結果


管理画面のイメージ
※本ソースには含まれません。

10999 views | コメント:2 | 2012-06-19
コメント
Commented by パーミッション at 2017-01-30 17:30:04
[設定する]ボタンを押した瞬間、
「問題が発生したため“○○○(プロジェクト名)”を終了します」
と出て強制終了します。

何が原因でしょうか?
Commented by パーミッション at 2017-01-31 12:50:51
強制終了の問題は解消しました。
こちら側の参照ミスでした。

また別の問題ですが、
2つ目以降にセットしたアラームが反映されません。
設定後、ON/OFFを切り替えるとアラームのアイコンが通常通りセットされて
正常に機能します。
自動でON/OFFを切り替えればいけるような気がします。
コメントの投稿
名前 (必須)

メールアドレス (非公開)

本文(必須)

パスワード (必須)
(半角数字4桁)