ともさんのHP >プロブラミング >自作JavaLibrary >日課管理アプリの自作
日課管理アプリの自作
世の中には目覚まし時計というものがあって、私も愛用しています。
最近、仕事が落ち着いて、残業がなくなったので、毎日を規則正しくすごそうと思っているのですが、これがなかなか難しい。
「これから○×する時間ですよ」
とお音声で教えてくれる時計があると便利だなと思うようになりました。
目覚まし時計だけでは規則正しい生活は出来ない
よく考えてみると、目覚まし時計って片手落ちですよね。
「起きる時間ですよ」だけでは睡眠時間が不足しがちになって、ストレスたまるし、目覚まし時計をうらんでしまいます。
「もう寝る時間ですよ」も教えてくれたら、睡眠時間がきちんと確保できて、より規則正しい生活ができるようになります。
睡眠だけではなくて、日課の時間も教えてくれると、もっと良いです。
私の最近の朝の日課は、
起きたら朝ごはんとお弁当を作る。シャワーを浴びて軽く体操、ネットで英会話を聞く。
毎週の習慣は、
月曜日水泳、火曜日DVDで映画を見る、水曜日ホームページ作成・・・
でも、つい忘れてしまいがちです。
習慣を時計に登録して、時刻になったら促してくれるようにすれば、より良い生活が送れそうです。
ボケーとしていたり、無意味にネット検索したりする時間って、考えてみるとけっこう長いのです。
JAVAで日課を管理するアプリを作ろう
「時計」という形ではなく、PC上で動くソフトウエアという形で実現します。その方が簡単だし、いろいろ出来ますから。
PCだと、起動している間しかメッセージが出ませんが、24時間動かしているホームサーバーがあれば問題ありません。
通知方法はPCなので音ではなく、音声、音楽、画像、メールが使えます。データベースで設定を管理すれば、
日課だけでなく、週間予定、特定の日のスケジュールも登録できます。
日課管理アプリの仕組み
下のような構造にします。データベースに、いつ何をするかを入力しておき、日課管理アプリがこのデータベースを読み込んで
指定の時刻に指定の動作をします。
日課管理アプリの製作
で、実際に作ってみました。とりあえずは音声だけ出力することにします。
「日課管理アプリ」というよりは多機能時計という感じですかね。
使ってみた感想ですが、寝る時刻を教えてくれるのがとてもよいです。
ついつい「もう少し起きていよう」→「もう少し寝ていよう」という循環に陥りやすいので、寝ることを促してくれるのは
効果があります。
音声だけでなく、寝る時間には好きなリラックスできる音楽を流すようにしています。これを聞くと納得して「さあ、寝よう」
という気持ちになります。
日課管理アプリ製作に使った道具
音声ファイルの作成
こちら
で作りました。
テキストを入力すると読み上げてくれて、音声を保存することも出来ます。
無料ですが、IDパスワードを設定したり、アンケートに答えないと使えなかったりします。
JAVAで音声ファイルを再生するclass
こちら 自作クラスです。
データベースにアクセスするクラス
こちら
同じく自作クラス。参考程度にご覧ください。
指定時刻に音声メッセージを流すJAVAプログラムソース
以下が実際に作成したプログラムのソースです。
動かすにはデータベースと音声ファイルも必要です。
package tomojavalib.exec;
import java.util.Calendar;
import tomojavalib.comm.DbsComm;
import tomojavalib.util.PlayMusic;
public class NikkaTokei implements Runnable
{
Thread timer;
PlayMusic pm = new PlayMusic();
DbsComm dbc = null;
String member[] = { "bunrui" , "nen" , "tuki" , "hi" , "h" , "m" , "kaime" , "youbi" , "onsei" , "message" , "meilh" , "meiln" };
String dbs = "nikka";
boolean dbsflug[] = null;
public static void main(String[] args)
{ NikkaTokei nk = new NikkaTokei(); }
public NikkaTokei()
{
//データベースの準備
//dbc = new DbsComm( dbs , member );
//タイマー起動
timer = new Thread(this);
timer.start();
}
//実行関数
public void run()
{
int min = 0, nowmin = 0;
int day =0,nowday =0;
//無限ループ
do{
//5秒休憩
try{ timer.sleep(5000);}catch(InterruptedException e){}
Calendar c = Calendar.getInstance(); //現在時刻のカレンダー作成
nowmin = c.get( Calendar.MINUTE);
nowday = c.get( Calendar.DATE);
//日が更新されたときの処理
if(day != nowday){
getDbs( c );
System.out.print( nowday+"日" );
day = nowday;
}
//分が更新されたときの処理
if(min != nowmin){
System.out.print( nowmin+"分" );
min = nowmin;
doInfo( c );
//String tmps = "c:\\mousugunerujikan2.wav";
//tmps = "c:\\共月亭で逢いましょう.wav";
//pm.play( tmps );do{}while( pm.flug );pm.flug = true;
}
}while(true);
}
public void getDbs( Calendar c )
{
dbc = new DbsComm( dbs , member );
try{
dbc.getAll();
}catch (Exception e){ e.printStackTrace(); }
dbsflug = new boolean[dbc.datano] ;
for(int i=0;i<dbc.datano;i++)
{
dbsflug[i] = false ;
if(dbc.data[i][0].equals("平日")){
if( c.get( Calendar.DAY_OF_WEEK)>1 ){if(c.get(Calendar.DAY_OF_WEEK) < 7 ){ dbsflug[i]=true;}}
}else if(dbc.data[i][0].equals("土日")){
if( c.get( Calendar.DAY_OF_WEEK)==1 ){dbsflug[i]=true;}
if( c.get( Calendar.DAY_OF_WEEK)==7 ){dbsflug[i]=true;}
}else if(dbc.data[i][0].equals("全日")){
dbsflug[i]=true;
}else if(dbc.data[i][0].equals("曜日")){
if(dbc.data[i][7].equals("日")){if( c.get( Calendar.DAY_OF_WEEK)==1 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("月")){if( c.get( Calendar.DAY_OF_WEEK)==2 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("火")){if( c.get( Calendar.DAY_OF_WEEK)==3 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("水")){if( c.get( Calendar.DAY_OF_WEEK)==4 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("木")){if( c.get( Calendar.DAY_OF_WEEK)==5 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("金")){if( c.get( Calendar.DAY_OF_WEEK)==6 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("土")){if( c.get( Calendar.DAY_OF_WEEK)==7 ){dbsflug[i]=true;}}
}else if(dbc.data[i][0].equals("毎月指定日")){
if( c.get( Calendar.DATE) == Integer.parseInt(dbc.data[i][3]) ){dbsflug[i]=true;}
}else if(dbc.data[i][0].equals("毎月第○□曜日")){
if( c.get( Calendar.DAY_OF_WEEK_IN_MONTH) == Integer.parseInt(dbc.data[i][6])){
if(dbc.data[i][7].equals("日")){if( c.get( Calendar.DAY_OF_WEEK)==1 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("月")){if( c.get( Calendar.DAY_OF_WEEK)==2 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("火")){if( c.get( Calendar.DAY_OF_WEEK)==3 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("水")){if( c.get( Calendar.DAY_OF_WEEK)==4 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("木")){if( c.get( Calendar.DAY_OF_WEEK)==5 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("金")){if( c.get( Calendar.DAY_OF_WEEK)==6 ){dbsflug[i]=true;}}
else if(dbc.data[i][7].equals("土")){if( c.get( Calendar.DAY_OF_WEEK)==7 ){dbsflug[i]=true;}}
}
}else if(dbc.data[i][0].equals("月末")){
if( c.getActualMaximum(Calendar.DATE)==c.get(Calendar.DATE)){dbsflug[i]=true;}
}else if(dbc.data[i][0].equals("毎年指定日")){
if( c.get( Calendar.MONTH) == (Integer.parseInt(dbc.data[i][2])-1) ){
if( c.get( Calendar.DATE) == Integer.parseInt(dbc.data[i][3]) ){dbsflug[i]=true;}}
}else if(dbc.data[i][0].equals("指定年月日")){
if( c.get( Calendar.YEAR) == Integer.parseInt(dbc.data[i][1]) ){
if( (c.get( Calendar.MONTH)+1) == Integer.parseInt(dbc.data[i][2]) ){
if( c.get( Calendar.DATE) == Integer.parseInt(dbc.data[i][3]) ){dbsflug[i]=true;}}}
}
// System.out.println( c.getActualMaximum(Calendar.MONTH) );
// System.out.println( c.get( Calendar.DAY_OF_WEEK_IN_MONTH) );
// System.out.println( i + " " + dbc.data[i][0] + " - " +dbsflug[i] );
}
return;
}
public void doInfo( Calendar c )
{
int m = c.get( Calendar.MINUTE );
int h = c.get( Calendar.HOUR_OF_DAY );
for(int i=0;i<dbc.datano;i++)
{
if(dbsflug[i]) {
if( h == Integer.parseInt(dbc.data[i][4]) ) {
if( m == Integer.parseInt(dbc.data[i][5]) ) {
//音声処理
if( dbc.data[i][8] != null )
{
System.out.println("onsei");
pm.play( dbc.data[i][8] );do{}while( pm.flug );pm.flug = true;
}
}}}
}
return;
}
}//end of class
データベースの中身
下の画像のようなデータベースを組んでいます。
最終更新日: 2012-09-20 20:09:40
ともさんのHP >プロブラミング >自作JavaLibrary >日課管理アプリの自作
ツイート