閱讀57 返回首頁    go 阿裏雲 go 技術社區[雲棲]


用藥提醒程序設計(原創)(定時、定時3次、按用戶定時,前半小時2分鍾提醒一次,後一個半小時10分鍾提醒一次)

思路大致是這樣的:

1.用戶手動輸入(模擬服務器發來的消息),將用藥提醒時間存入SQLITE數據庫,同時,每隔2分鍾的間隔錄入一個時間點,持續錄入15個(即30分鍾),每隔10分鍾的間隔錄入一個時間點,持續錄入9個(即90分鍾),共計2小時,24個標記位狀態都列為0;

2.如果到了時間點,響起鬧鈴,用戶取消,所有的標誌位都重新置為1;

3.如果到了SQLITE錄入時間點3小時以後的時間,所有的標誌位重新置為0;

4.監聽進程一直獲取當前的時間,如果當前的時間到了數據庫記錄的時間點,並且標誌位是0,則會響起鬧鈴。


將來的擴展:

1.數據庫要增加用戶字段,因為一個報警設備有多個用戶,並且每個用戶最多可以設置三個時間點,入庫過程之中是這樣的存儲結構。

   id     time    user

   0     13:43   zzk

   1     13;45   tom

   2    20:00   tom

   3     21:00  tom

2.時間點存儲如下所示,根據不同的用戶,分別新建不一樣的文件:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="10:01">1</string>
<string name="10:03">1</string>
<string name="10:23">1</string>
<string name="09:53">1</string>
<string name="09:51">1</string>
<string name="10:13">1</string>
<string name="09:41">1</string>
<string name="11:13">1</string>
<string name="11:23">1</string>
<string name="11:33">1</string>
<string name="10:53">1</string>
<string name="11:03">1</string>
<string name="10:33">1</string>
<string name="10:43">1</string>
<string name="09:39">1</string>
<string name="09:37">1</string>
<string name="09:35">1</string>
<string name="09:33">1</string>
<string name="09:43">1</string>
<string name="09:57">1</string>
<string name="09:45">1</string>
<string name="09:55">1</string>
<string name="09:47">1</string>
<string name="09:49">1</string>
<string name="09:59">1</string>
</map>


3.以下貼代碼:

DB工具包:

package com.zzk.util;

/* import相關class */
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DailyBgDB extends SQLiteOpenHelper
{
  /* 變量聲明 */
  private final static String DATABASE_NAME = "dailyBG_db";
  private final static int DATABASE_VERSION = 1;
  private final static String TABLE_NAME = "dailySetting_table";
  public final static String FIELD1 = "DailyId";
  public final static String FIELD2 = "DailyTm";
  public SQLiteDatabase sdb;
  
  /* 構造符 */
  public DailyBgDB(Context context)
  {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    sdb= this.getWritableDatabase();
  }

  @Override
  public void onCreate(SQLiteDatabase db)
  {
    /* Table不存在就創建table */
    String sql = "CREATE TABLE IF NOT EXISTS "+TABLE_NAME+"("+FIELD1
        +" INTEGER primary key, "+FIELD2+" TEXT)";
    db.execSQL(sql);
    
    /* 初始的資料到DB */
    sdb=db;
//    insert(0,99);
//    insert(1,99);
//    insert(2,99);
//    insert(3,99);
//    insert(4,99);
//    insert(5,99);
//    insert(6,99);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
  {
  }

  public Cursor select()
  {
    Cursor cursor=sdb.query(TABLE_NAME,null,null,null,null,null,null);
    return cursor;
  }
  /* select時有where條件要用否method */
  public Cursor select(String selection,String[] selectionArgs)
  {
    String[] columns = new String[] { FIELD2 };     
    Cursor cursor=sdb.query(TABLE_NAME,columns,selection,selectionArgs,
                            null,null,null);
    return cursor;
  } 

  public long insert(int value1,String value2)
  {
    /* 將新增的值放入ContentValues */
    ContentValues cv = new ContentValues();
    cv.put(FIELD1, value1);
    cv.put(FIELD2, value2);
    long row = sdb.insert(TABLE_NAME, null, cv);
    return row;
  }

  public void delete(int id)
  {
    String where = FIELD1 + " = ?";
    String[] whereValue ={ Integer.toString(id) };
    sdb.delete(TABLE_NAME, where, whereValue);
  }

  public void update(int id, int value)
  {
    String where = FIELD1 + " = ?";
    String[] whereValue ={ Integer.toString(id) };
    /* 將修改的值放入ContentValues */
    ContentValues cv = new ContentValues();
    cv.put(FIELD2, value);
    sdb.update(TABLE_NAME, cv, where, whereValue);
  }
  
  
  
}


頁麵:
package net.blogjava.mobile;



import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.zzk.util.DailyBgDB;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;

public class Main extends Activity implements OnClickListener {
	private TextView tvAlarmRecord;
	private SharedPreferences sharedPreferences;
	private SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
	private DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
	private DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
	private AlarmManager alarmManager;
	private PendingIntent pendingIntent;
	public String setTime;
	
	  /* 聲明定義的數據庫變量DailyBgDB */
	private DailyBgDB db;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button btnAddAlarm = (Button) findViewById(R.id.btnAddAlarm);
		tvAlarmRecord = (TextView) findViewById(R.id.tvAlarmRecord);

		btnAddAlarm.setOnClickListener(this);
		sharedPreferences = getSharedPreferences("alarm_record",
				Activity.MODE_PRIVATE);

		alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		Intent intent = new Intent(this, AlarmReceiver.class);
		// 創建封裝BroadcastReceiver 的pendingIntent對象
		pendingIntent = PendingIntent.getBroadcast(this, 0,
				intent, 0);
		// 開始定時器,每1分鍾執行一次,5s
		alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 0, 10000,
				pendingIntent);
		// alarmManager.cancel(pendingIntent);
		Button cancel = (Button) findViewById(R.id.button1);
		cancel.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				Log.e("setTime", "" + setTime);
				updateAlarm(setTime,1);
			}
		});
	}

	@Override
	public void onClick(View v) {
		View view = getLayoutInflater().inflate(R.layout.alarm, null);

		final TimePicker timePicker = (TimePicker) view
				.findViewById(R.id.timepicker);
		timePicker.setIs24HourView(true);

		// 顯示設置時間點的對話框
		new AlertDialog.Builder(this).setTitle("設置提醒時間").setView(view)
				.setPositiveButton("確定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						String timeStr = String.valueOf(timePicker
								.getCurrentHour())
								+ ":"
								+ String.valueOf(timePicker.getCurrentMinute());
						// 將時間點添加到 TextView 組件中
						tvAlarmRecord.setText(tvAlarmRecord.getText()
								.toString() + "\n" + timeStr);
						// count++;

						/*
						 * View view2 = new View(Main.this);
						 * view2.setLayoutParams(new
						 * LayoutParams(LayoutParams.FILL_PARENT,1));
						 * view2.setBackgroundColor(Color.RED); LinearLayout
						 * linearLayout =
						 * (LinearLayout)getLayoutInflater().inflate
						 * (R.layout.main, null); linearLayout.addView(view2);
						 */
						Log.e("hour", "" + timePicker.getCurrentHour());
						Log.e("minute", "" + timePicker.getCurrentMinute());
						Log.e("time point:", "--------" + timeStr);
						setTime = timeStr;
						setAlarm(timeStr);
						//將定時信息入數據庫
						//saveData(1,setTime);
						saveData(1,setTime);
					}
				}).setNegativeButton("取消", null).show();
	}
	
	//timeStr是時間(小時+分鍾)
	public void setAlarm(String timeStr) {
		Date date = null;
		String str = null;
		Calendar cal = Calendar.getInstance();
		Date dateNow = cal.getTime();
		str = format2.format(dateNow) + " " + timeStr;
		try {
			date = format1.parse(str);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		long t = date.getTime();
		System.out.println(t);

		for (int i = 0; i <= 14; i++) {
			Date now3 = new Date(t + 1000 * 60 * 2 * i); // 每兩分鍾輸出一次
			String time3 = formatter.format(now3);
			System.out.println("十分鍾後的時間是:" + time3);
			// 保存時間點
			sharedPreferences.edit().putString(time3, 0+"")
					.commit();
			
		}

		System.out.println("---------------30分鍾以後的時間是---------");

		for (int i = 0; i <= 9; i++) {
			Date now4 = new Date(t + 1000 * 60 * 2 * 15 + 1000
					* 60 * 10 * i);

			String time4 = formatter.format(now4);
			System.out.println("十分鍾後的時間是:" + time4);
			// 保存時間點
			sharedPreferences.edit().putString(time4, 0+"")
					.commit();
		}
	}
	
	//timeStr是時間(小時+分鍾)
	public void updateAlarm(String timeStr,int type) {
		Date date = null;
		String str = null;
		Calendar cal = Calendar.getInstance();
		Date dateNow = cal.getTime();
		str = format2.format(dateNow) + " " + timeStr;
		try {
			date = format1.parse(str);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		long t = date.getTime();
		System.out.println(t);

		for (int i = 0; i <= 14; i++) {
			Date now3 = new Date(t + 1000 * 60 * 2 * i); // 每兩分鍾輸出一次
			String time3 = formatter.format(now3);
			System.out.println("十分鍾後的時間是:" + time3);
			// 保存時間點
			sharedPreferences.edit().putString(time3, type+"")
					.commit();
			
		}

		System.out
				.println("---------------30分鍾以後的時間是---------");

		for (int i = 0; i <= 9; i++) {
			Date now4 = new Date(t + 1000 * 60 * 2 * 15 + 1000
					* 60 * 10 * i);

			String time4 = formatter.format(now4);
			System.out.println("十分鍾後的時間是:" + time4);
			// 保存時間點
			sharedPreferences.edit().putString(time4, type+"")
					.commit();
		}
	}
	
	  /* 儲存設定值吹DB的method */
	  private void saveData(int id,String value){
	    db=new DailyBgDB(Main.this);
	    db.insert(id,value);
	    db.close();
	  }
}


監聽程序:

package net.blogjava.mobile;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.zzk.util.DailyBgDB;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.util.Log;

public class AlarmReceiver extends BroadcastReceiver
{
	private static int num = 0;  
	
	  /* 聲明定義的數據庫變量DailyBgDB */
	private DailyBgDB db;
	private SharedPreferences sharedPreferences;
	private SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
	private DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
	private DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
	
	@Override
	public void onReceive(Context context, Intent intent)
	{
	    sharedPreferences = context.getSharedPreferences(
				"alarm_record", Activity.MODE_PRIVATE);
		String hour = String.valueOf(Calendar.getInstance().get(
				Calendar.HOUR_OF_DAY));
		String minute = String.valueOf(Calendar.getInstance().get(
				Calendar.MINUTE));
		if(minute.length()==1){
			minute="0"+minute;
		}
		
		
		/***
		 * 監控程序
		 * 第一步、獲取數據庫中的時間
		 * 第二步,將數據庫中的時間換算成兩小時以後的時間
		 * 第三步,如果當前時間到了兩小時以後的時間,更新XML
		 */
		/* 儲存設定值吹DB的method */
		db=new DailyBgDB(context);
		
		//獲取數據庫中的時間
		Cursor cur=db.select("DailyId=1", null);
		while(cur.moveToNext()) {
			cur.getInt(0);
			//Log.e("----1-------", cur.getString(cur.getColumnIndex("DailyId")));
			Log.e("----2-------", cur.getString(0));
			if(get2HourLaterTime(cur.getString(0)).equalsIgnoreCase(hour + ":" + minute)) {
				updateAlarm(cur.getString(0), 0);
			}
			cur.close();
		}

		
		Log.e("ActionBroadCast", "New Message !" + num++);
		// 從XML 文件夾獲得描述當前時間點的value
		String time = sharedPreferences.getString(hour + ":" + minute, null);
		if (time != null) {
			if(time.equalsIgnoreCase("0")) {
				Log.e("value", time);
				// 播放聲音
				MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.ring);
				mediaPlayer.start();
			}

		}
		
		db.close();

	}
	
	
	//timeStr是時間(小時+分鍾)
	public void updateAlarm(String timeStr,int type) {
		Date date = null;
		String str = null;
		Calendar cal = Calendar.getInstance();
		Date dateNow = cal.getTime();
		str = format2.format(dateNow) + " " + timeStr;
		try {
			date = format1.parse(str);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		long t = date.getTime();
		System.out.println(t);

		for (int i = 0; i <= 14; i++) {
			Date now3 = new Date(t + 1000 * 60 * 2 * i); // 每兩分鍾輸出一次
			String time3 = formatter.format(now3);
			System.out.println("十分鍾後的時間是:" + time3);
			// 保存時間點
			sharedPreferences.edit().putString(time3, type+"")
					.commit();
			
		}

		System.out
				.println("---------------30分鍾以後的時間是---------");

		for (int i = 0; i <= 9; i++) {
			Date now4 = new Date(t + 1000 * 60 * 2 * 15 + 1000
					* 60 * 10 * i);

			String time4 = formatter.format(now4);
			System.out.println("十分鍾後的時間是:" + time4);
			// 保存時間點
			sharedPreferences.edit().putString(time4, type+"")
					.commit();
		}
	}
	
	
	public String get2HourLaterTime(String timeStr) {
		Date date = null;
		String str = null;
		Calendar cal = Calendar.getInstance();
		Date dateNow = cal.getTime();
		str = format2.format(dateNow) + " " + timeStr;
		try {
			date = format1.parse(str);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		long t = date.getTime();
		System.out.println(t);
		
		Date now3 = new Date(t + 1000 * 60 * 60 * 3); 
		//Date now3 = new Date(t + 1000 * 60 *  2); 
		return formatter.format(now3);
	}
	

}



源代碼地址是:


https://download.csdn.net/detail/opzoonzhuzhengke/5817857


最後更新:2017-04-03 16:48:43

  上一篇:go CUDA從入門到精通(二):第一個CUDA程序
  下一篇:go CUDA從入門到精通(四):加深對設備的認識