博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 备忘录之简单实现
阅读量:7052 次
发布时间:2019-06-28

本文共 16738 字,大约阅读时间需要 55 分钟。

hot3.png

首先创建保存备忘录信息的表:

DbHelper.java

package com.cjq.androidbwl;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;/** *  * @author cjianquan * @since 2014年10月31日 */public class DbHelper extends SQLiteOpenHelper {	public DbHelper(Context context, String name, CursorFactory factory,			int version) {		super(context, name, factory, version);		// TODO Auto-generated constructor stub	}	@Override	public void onCreate(SQLiteDatabase db) {		StringBuilder sql = new StringBuilder();		sql.append("create table if not exists tb_bwl(")		.append("id integer primary key autoincrement,")		.append("title varchar(50),")		.append("content varchar(200),")		.append("createDate varchar(10),")		.append("noticeDate varchar(10),")		.append("noticeTime varchar(5) )");		db.execSQL(sql.toString());			}	@Override	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {		// TODO Auto-generated method stub	}}

MainActivity.java 

package com.cjq.androidbwl;import java.util.Calendar;import android.app.Activity;import android.app.AlarmManager;import android.app.Dialog;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.content.Context;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.AdapterView.OnItemClickListener;import android.widget.ImageButton;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.TimePicker;import android.widget.Toast;/** *  * @author cjianquan * @since 2014年10月31日 */public class MainActivity extends Activity {		private AlarmManager alarmManager=null;	Calendar cal=Calendar.getInstance();	final int DIALOG_TIME = 0; //设置对话框id		private DbHelper dbhelper;	private SQLiteDatabase db;  		SimpleCursorAdapter adapter = null;	ListView lv;	/* (non-Javadoc)	 * @see android.app.Activity#onCreate(android.os.Bundle)	 */	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);				dbhelper = new DbHelper(this, "db_bwl", null, 1);		db = dbhelper.getReadableDatabase();				Cursor cursor = db.query("tb_bwl", new String[]{"id as _id","title","content","noticeDate","noticeTime"}, null, null, null, null,null);				lv = (ListView)findViewById(R.id.lv_bwlList);				adapter = new SimpleCursorAdapter(this, R.layout.list_item_bwl, cursor, 				new String[]{"title","noticeDate","noticeTime","content"}, 				new int[]{R.id.title,R.id.noticeDate,R.id.noticeTime,R.id.content});		//		ArrayAdapter
adapter = new ArrayAdapter
(this, android.R.layout.simple_expandable_list_item_1, getDatas()); lv.setAdapter(adapter); this.registerForContextMenu(lv); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView
parent, View view, int position, long id) { String title = ((TextView)view.findViewById(R.id.title)).getText().toString(); String content = ((TextView)view.findViewById(R.id.content)).getText().toString(); String noticeDate = ((TextView)view.findViewById(R.id.noticeDate)).getText().toString(); String noticeTime = ((TextView)view.findViewById(R.id.noticeTime)).getText().toString(); Intent intent = new Intent(); intent.setClass(MainActivity.this,AddBwlActivity.class); Bundle bundle = new Bundle(); bundle.putLong("id", id); bundle.putString("title", title); bundle.putString("content", content); bundle.putString("noticeDate", noticeDate); bundle.putString("noticeTime", noticeTime); intent.putExtras(bundle); startActivity(intent); } }); //添加备忘录按钮 ImageButton btnAdd = (ImageButton)findViewById(R.id.btnAdd); btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,AddBwlActivity.class); startActivity(intent); } }); // //创建两个Intent,一个是用于AlarmReceiver类处理的,一个是用于广播的// AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);// Intent intent = new Intent(MainActivity.this,AlarmReceiver.class);// intent.setAction("ALARM_ACTION");// PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);// // //设置真正能让alarm起作用的参数// //设置alarm是以何种方式发生的,这里用的是以UTC时间为基准,并在alarm发生时同时唤醒设备的模式。// am.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),pendingIntent);// am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10*1000, 60*60*1000, pendingIntent); } //长按的上下文菜单 public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInfo){ menu.setHeaderIcon(R.drawable.alarm); menu.add(0,3,0,"修改"); menu.add(0,4,0,"删除"); } public boolean onContextItemSelected(MenuItem item){ AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)item.getMenuInfo(); switch(item.getItemId()){ case 3: String title = ((TextView)menuInfo.targetView.findViewById(R.id.title)).getText().toString(); String content = ((TextView)menuInfo.targetView.findViewById(R.id.content)).getText().toString(); String noticeDate = ((TextView)menuInfo.targetView.findViewById(R.id.noticeDate)).getText().toString(); String noticeTime = ((TextView)menuInfo.targetView.findViewById(R.id.noticeTime)).getText().toString(); Intent intent = new Intent(); intent.setClass(this,AddBwlActivity.class); Bundle bundle = new Bundle(); bundle.putLong("id", menuInfo.id); bundle.putString("title", title); bundle.putString("content", content); bundle.putString("noticeDate", noticeDate); bundle.putString("noticeTime", noticeTime); intent.putExtras(bundle); startActivity(intent); break; case 4: dbhelper = new DbHelper(this, "db_bwl", null, 1); db = dbhelper.getWritableDatabase(); int status = db.delete("tb_bwl", "id=?", new String[]{""+menuInfo.id}); if(status!=-1){ //删除后更新listview Cursor cursor = db.query("tb_bwl", new String[]{"id as _id","title","content","noticeDate","noticeTime"}, null, null, null, null,null); adapter.changeCursor(cursor);// adapter.notifyDataSetChanged(); Toast.makeText(this, "删除成功", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(this, "删除失败", Toast.LENGTH_LONG).show(); } break; } return true; } @Override protected Dialog onCreateDialog(int id) { Dialog dialog=null; switch (id) { case DIALOG_TIME: dialog=new TimePickerDialog( this, new TimePickerDialog.OnTimeSetListener(){ public void onTimeSet(TimePicker timePicker, int hourOfDay,int minute) { Calendar c=Calendar.getInstance();//获取日期对象 c.setTimeInMillis(System.currentTimeMillis()); //设置Calendar对象 c.set(Calendar.HOUR, hourOfDay); //设置闹钟小时数 c.set(Calendar.MINUTE, c.get(Calendar.MINUTE)+1); //设置闹钟的分钟数 c.set(Calendar.SECOND, 0); //设置闹钟的秒数 c.set(Calendar.MILLISECOND, 0); //设置闹钟的毫秒数 Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); //创建Intent对象// intent.setAction("ALARM_ACTION"); PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); //创建PendingIntent //参数说明:http://www.eoeandroid.com/blog-119358-2995.html alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+30000, pi); //设置闹钟,当前时间就唤醒 Toast.makeText(MainActivity.this, "闹钟设置成功", Toast.LENGTH_LONG).show();//提示用户 } }, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true); break; } Log.e("AndroidBWL", "onCreateDialog end..."); return dialog; } @Override protected void onResume() { super.onResume(); Cursor cursor = db.query("tb_bwl", new String[]{"id as _id","title","content","noticeDate","noticeTime"}, null, null, null, null,null); adapter.changeCursor(cursor); } }

添加activity

AddBwlActivity.java

package com.cjq.androidbwl;import java.util.Calendar;import java.util.Date;import android.app.Activity;import android.app.AlarmManager;import android.app.DatePickerDialog;import android.app.PendingIntent;import android.app.DatePickerDialog.OnDateSetListener;import android.app.Dialog;import android.app.TimePickerDialog;import android.app.TimePickerDialog.OnTimeSetListener;import android.content.ContentValues;import android.content.Context;import android.content.Intent;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.DatePicker;import android.widget.EditText;import android.widget.TimePicker;import android.widget.Toast;/** *  * @author cjianquan * @since 2014年10月31日 */public class AddBwlActivity extends Activity {		private EditText etDate = null,etTime=null,etTitle=null,etContent=null;	private Button btnSave = null;		static final int DATE_DIALOG_ID = 0;	static final int TIME_DIALOG_ID = 1;		private DbHelper dbhelper;		 Bundle bundle;  	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.add_bwl);				dbhelper = new DbHelper(this, "db_bwl", null, 1);				etTitle = (EditText)findViewById(R.id.etTitle);		etContent = (EditText)findViewById(R.id.etContent);				etDate = (EditText)findViewById(R.id.etDate);		etDate.setOnClickListener(new View.OnClickListener() {						@Override			public void onClick(View view) {				//并会调用 onCreateDialog(int)回调函数来请求一个Dialog  				showDialog(DATE_DIALOG_ID);							}		});				etTime = (EditText)findViewById(R.id.etTime);		etTime.setOnClickListener(new View.OnClickListener() {						@Override			public void onClick(View view) {				//并会调用 onCreateDialog(int)回调函数来请求一个Dialog  				showDialog(TIME_DIALOG_ID);							}		});						btnSave = (Button)findViewById(R.id.btnSave);		btnSave.setOnClickListener(new View.OnClickListener() {						@Override			public void onClick(View view) {								ContentValues value = new ContentValues();  								String title = etTitle.getText().toString();				String content = etContent.getText().toString();				String noticeDate = etDate.getText().toString();				String noticeTime = etTime.getText().toString();								value.put("title", title);				value.put("content", content);				value.put("noticeDate", noticeDate);				value.put("noticeTime", noticeTime);												SQLiteDatabase db = dbhelper.getWritableDatabase();								long id = 0;								long status = 0;				if(bundle!=null){					id = bundle.getLong("id");					 status = db.update("tb_bwl", value, "id=?", new String[]{bundle.getLong("id")+""});  				}else{					status = db.insert("tb_bwl", null, value); 					id = status;				}								if(status!=-1){					setAlarm(id);					Toast.makeText(AddBwlActivity.this, "保存成功", Toast.LENGTH_LONG).show();                  }else{                      Toast.makeText(AddBwlActivity.this, "保存失败", Toast.LENGTH_LONG).show();                  }  			}		});				//获取上一个activity的传值		bundle = this.getIntent().getExtras();		if(bundle!=null){			etDate.setText(bundle.getString("noticeDate"));			etTime.setText(bundle.getString("noticeTime"));			etTitle.setText(bundle.getString("title"));			etContent.setText(bundle.getString("content"));		}			}				private OnDateSetListener dateSetListener = new OnDateSetListener() {				@Override		public void onDateSet(DatePicker datePicker, int year, int month, int day) {						StringBuilder dateStr = new StringBuilder();			dateStr.append(year).append("-")			.append(month+1).append("-")			.append(day);						etDate.setText(dateStr.toString());		}	};			private OnTimeSetListener timeSetListener = new OnTimeSetListener() {				@Override		public void onTimeSet(TimePicker timePicker, int hour, int minute) {									StringBuilder timeStr = new StringBuilder();			timeStr.append(hour).append(":")			.append(minute);						etTime.setText(timeStr.toString());		}	};		/**      * 当Activity调用showDialog函数时会触发该函数的调用     */  	protected Dialog onCreateDialog(int id){		Calendar cal = Calendar.getInstance();		cal.setTime(new Date());		switch(id){		case DATE_DIALOG_ID:			DatePickerDialog dpd = new DatePickerDialog(this,dateSetListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));			dpd.setCancelable(true);			dpd.setTitle("选择日期");			dpd.show();			break;		case TIME_DIALOG_ID:			TimePickerDialog tpd = new TimePickerDialog(this, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true);			tpd.setCancelable(true);			tpd.setTitle("选择时间");			tpd.show();			break;		default:				break;		}		return null;	}		private AlarmManager alarmManager=null;			public void setAlarm(long id){				Log.e("AndroidBWL", "setAlarm start...");						String noticeDate = etDate.getText().toString();		String noticeTime = etTime.getText().toString();				Calendar calendar = Calendar.getInstance();				calendar.set(Integer.parseInt(noticeDate.split("-")[0]), 				Integer.parseInt(noticeDate.split("-")[1])-1, 				Integer.parseInt(noticeDate.split("-")[2]), 				Integer.parseInt(noticeTime.split(":")[0]), 				Integer.parseInt(noticeTime.split(":")[1]));				Log.e("AndroidBWL", ""+(calendar.getTimeInMillis()-System.currentTimeMillis()));								alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);						Intent intent = new Intent(AddBwlActivity.this, AlarmReceiver.class); //创建Intent对象				Bundle bundle = new Bundle();		bundle.putLong("id", id);		bundle.putString("title", etTitle.getText().toString());		bundle.putString("content", etContent.getText().toString());		bundle.putString("noticeDate", etDate.getText().toString());		bundle.putString("noticeTime", etTime.getText().toString());				intent.putExtras(bundle);				//PendingIntent.getBroadcast intent 数据不更新。		//传不同的 action 来解决这个问题		intent.setAction("ALARM_ACTION"+calendar.getTimeInMillis());				PendingIntent pi = PendingIntent.getBroadcast(AddBwlActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); //创建PendingIntent				//参数说明:http://www.eoeandroid.com/blog-119358-2995.html		alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()+5000, pi); //设置闹钟,当前时间就唤醒				Log.e("AndroidBWL", "setAlarm end...");			}}
提醒的广播接收:

AlarmReceiver.java

package com.cjq.androidbwl;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;/** *  * @author cjianquan * @since 2014年10月29日 */public class AlarmReceiver extends BroadcastReceiver {		 private Intent mIntent = null;  	 private PendingIntent mPendingIntent = null;  	 private Notification mNotification = null;  	 private NotificationManager mNotificationManager = null;  	@Override	public void onReceive(Context context, Intent intent) {						Log.e("AndroidBWL", "AlarmReceiver:onReceive");				mIntent = intent;				Bundle bundle = mIntent.getExtras();				mNotificationManager = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);  //        mIntent = new Intent(context,AddBwlActivity.class);          mIntent.setClass(context,AddBwlActivity.class);                mPendingIntent = PendingIntent.getActivity(context, 0, mIntent, 0);          mNotification = new Notification();          mNotification.icon = R.drawable.alarm;          mNotification.tickerText="备忘录";        //设置默认声音、默认振动、和默认闪光灯        mNotification.defaults = Notification.DEFAULT_ALL;        //点击通知后自动取消        mNotification.flags |= Notification.FLAG_AUTO_CANCEL;        mNotification.setLatestEventInfo(context, bundle.getString("title"), bundle.getString("content"), mPendingIntent);          mNotificationManager.notify(1,mNotification); 			}}
AndroidManifest.xml

布局文件:

activity_main.xml

list_item_bwl.xml

add_bwl.xml

设置全局背景图片:

styles.xml

转载于:https://my.oschina.net/u/2552902/blog/543954

你可能感兴趣的文章
表格操作
查看>>
用python读写excel文件
查看>>
【Enterprise Manager 12c】如何在EM 12c中配置Exadata Infiniband告警邮件
查看>>
盆盆的11年Microsoft MVP心路历程
查看>>
利用kickstart实现pxe自动安装
查看>>
推荐一个spring的demo网站
查看>>
如何利用互联网工具调研网站
查看>>
最新 Hadoop 视频分享
查看>>
3_Shell语言———输入输出重定向和管道概述
查看>>
快速了解linux压缩与解压
查看>>
SQL :多条记录取最前面一条或根据条件任取N条。。。。。。
查看>>
再谈javascript 获取服务器控件值的
查看>>
Android官方数据绑定框架DataBinding(三)
查看>>
ioctl 函数
查看>>
JAVA实战教程_JAVA案例开发之JAVA开发微信二维码大数据系统02
查看>>
我的友情链接
查看>>
关于swoole
查看>>
Linux下怎样搭建 SVN 服务器
查看>>
12 种编程语言的起源故事
查看>>
不同数据结构的比较原理
查看>>