Androidアプリから、指定時間後にタイマーとか設定したい場合・・・
やり方は大きく分けて2つあります。
- 全て自前で実装する
- 外部アプリを起動する
1つめの方法もアリだけど、すごく手間と時間がかかって非現実です。
(あと自前で実装するとバグとか不具合の温床にもなりやすい)
そこでアプリから外部のタイマーを呼び出す方法を紹介!
やっぱり自分で実装するより、他アプリの力を借りる方が楽です。
外部タイマーアプリを呼び出す基本手順
その手順とコード例は次の通り
1.まずパーミッションを追加
AndroidManifest.xml を開き、以下のパーミッション を追加
1 |
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> |
これがないと外部タイマーアプリを起動できません。
なので追加するのを忘れずに
2.タイマー起動用のIntentを発行
そうしたら指定時間後にタイマーを起動させるコードを書きます。
ポイントは ACTION_SET_TIME を指定すること
これを Intent#setAction に指定することで、タイマーアプリが存在していれば、指定秒とか指定分後に自動でアラーム起動とかができます。
ここでは10秒後にタイマーアプリを起動する処理を書いてみました。
▼ こんな感じのコードを書けばOK( Activity#onCreate内 )
1 2 3 4 5 6 7 8 9 10 11 |
Intent alarmIntent = new Intent(AlarmClock.ACTION_SET_TIMER); String extraMsg = getString( R.string.label_finished_meditation); alarmIntent.putExtra( AlarmClock.EXTRA_MESSAGE, extraMsg ); alarmIntent.putExtra( AlarmClock.EXTRA_LENGTH, secssForAlerm ); alarmIntent.putExtra( AlarmClock.EXTRA_SKIP_UI, true ); try { startActivity( alarmIntent ); } catch ( ActivityNotFoundException e ) { /// タイマー起動に失敗しないときの処理 /// あるいはタイマーアプリがない時の処理 } |
ここで大事なポイントは次の3つ
- EXTRA_MESSAGE
タイマーアプリ側で表示したいテキスト。これを設定しておかないと、ユーザーが「え?なんでタイマー鳴ってんの? (#^.^#) 」と混乱してしまう。
- EXTRA_LENGTH
タイマーが時間切れになるまでの時間。単位は "秒" でこれ以外の単位は使えない
- EXTRA_SKIP_UI
もしこの値が true ならタイマーのUIを非表示、もし false ならタイマーアプリが即起動する。基本的には true に設定しておくのがいいかも
ちなみに ACTION_SET_TIMER に渡せるパラメーターはこの3つだけです。
あとタイマーの時間設定は 秒数指定のみ ってことも気を付けないとダメですね。
これで指定秒数が経過したあとにアラームが起動するはず
▼ 自分のAndroid端末だとこんなアプリが起動した
普通にアラームが起動するのではなく、上画像のように「タイマー終了だよ」みたいなメッセージまで表示できるので気が利いてます。
ただし!特殊な端末によってはタイマーアプリがない場合もあります。
なので外部アプリが存在しない場合の処理も忘れずに・・・( ActivityNotFoundException の例外処理)
タイマー設定完了後に結果を受け取るには・・・
ただし、今紹介した方法だとタイマー設定したらActivity側では検知不可能
アプリ側で設定結果を受け取ることができません。
なので、ついでに Activity側でタイマー設定の結果を受け取る方法 も紹介します。
その手順とかコード例は次の通り
1.まずActiivty内で適当な リクエストコード を定数宣言
1 |
public static final int REQ_CODE_ALARM = 1; |
2.タイマーIntent を startActivityFroResult から起動
1 2 3 4 5 6 7 8 9 10 11 |
Intent alarmIntent = new Intent(AlarmClock.ACTION_SET_TIMER); String extraMsg = getString( R.string.label_finished_meditation); alarmIntent.putExtra( AlarmClock.EXTRA_MESSAGE, extraMsg ); alarmIntent.putExtra( AlarmClock.EXTRA_LENGTH, secssForAlerm ); alarmIntent.putExtra( AlarmClock.EXTRA_SKIP_UI, true ); try { startActivityForResult( alarmIntent, REQ_CODE_ALARM ); } catch ( ActivityNotFoundException e ) { /// タイマー起動に失敗しないときの処理 /// あるいはタイマーアプリがない時の処理 } |
3.結果を onActivityResult で受け取る
1 2 3 4 5 6 7 8 9 10 11 |
@Override public void onActivityResult( int requestCode, int resultCode, Intent data ) { super.onActivityResult( requestCode, resultCode, data ); switch( requestCode ) { case REQUEST_CODE_ALARM: { /// アラーム設定後の処理を書く... break; } } } |
ここに書くべき処理としては「タイマーを設定しました」みたいなトーストを表示したり、アプリ設定を保存したいとかですね。
タイマーが起動したことを感知したいなら、上の手順でできます。
タイマー呼び出しの手順まとめ
ということで、簡単に手順まとめ
以上、アプリから外部タイマーを起動する方法でした。ではでは(^_^)/~