android 备忘录之简单实现
来源:互联网 发布:java 审批流 开源项目 编辑:程序博客网 时间:2024/06/07 12:45
首先创建保存备忘录信息的表:
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}@Overridepublic 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());}@Overridepublic 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; //设置对话框idprivate DbHelper dbhelper;private SQLiteDatabase db; SimpleCursorAdapter adapter = null;ListView lv;/* (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */@Overrideprotected 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<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, getDatas());lv.setAdapter(adapter);this.registerForContextMenu(lv);lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic 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() {@Overridepublic 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){//删除后更新listviewCursor 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;}@Overrideprotected 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.htmlalarmManager.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;}@Overrideprotected 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; @Overrideprotected 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() {@Overridepublic void onClick(View view) {//并会调用 onCreateDialog(int)回调函数来请求一个Dialog showDialog(DATE_DIALOG_ID);}});etTime = (EditText)findViewById(R.id.etTime);etTime.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//并会调用 onCreateDialog(int)回调函数来请求一个Dialog showDialog(TIME_DIALOG_ID);}});btnSave = (Button)findViewById(R.id.btnSave);btnSave.setOnClickListener(new View.OnClickListener() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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.htmlalarmManager.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; @Overridepublic 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
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cjq.androidbwl" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> <application android:allowBackup="true" android:icon="@drawable/alarm" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.cjq.androidbwl.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.cjq.androidbwl.AlarmActivity" /> <activity android:name="com.cjq.androidbwl.NotifitionActivity" /> <activity android:name="com.cjq.androidbwl.AddBwlActivity" /> <receiver android:name="com.cjq.androidbwl.AlarmReceiver" android:process=":remote"></receiver> </application> <!-- 添加操作振动器的权限--> <uses-permission android:name="android.permission.VIBRATE"></uses-permission> <!-- 添加操作闪光灯的权限 --> <uses-permission android:name="android.permission.FLASHLIGHT"></uses-permission></manifest>
布局文件:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_gravity="right" tools:context=".MainActivity" > <ImageButton android:id="@+id/btnAdd" android:paddingLeft="10dp" android:alpha="70" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/add" /> <ListView android:id="@+id/lv_bwlList" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView></LinearLayout>
list_item_bwl.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:width="0dp" android:orientation="horizontal" android:gravity="right"> <TextView android:id="@+id/title" android:width="0dp" android:layout_weight="1.0" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="20sp" /> <TextView android:id="@+id/noticeDate" android:textSize="10sp" android:width="0dp" android:layout_weight="3.0" android:layout_width="match_parent" android:layout_height="match_parent"/> <TextView android:id="@+id/noticeTime" android:textSize="10sp" android:width="0dp" android:layout_weight="3.0" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> <TextView android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
add_bwl.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="left" android:textSize="25sp" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/title"/> <EditText android:id="@+id/etTitle" android:hint="请输入标题" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="日期"/> <EditText android:id="@+id/etDate" android:hint="请选择日期" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="时间"/> <EditText android:id="@+id/etTime" android:hint="请选择时间" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/content"/> <EditText android:id="@+id/etContent" android:hint="请输入内容" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btnSave" android:text="保存" android:textSize="40sp" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
设置全局背景图片:
styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme.Light"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="android:windowBackground">@drawable/shade</item> </style> </resources>
2 1
- android 备忘录之简单实现
- 简单iOS备忘录App实现
- 备忘录模式之C++实现
- jquery+bootstrap 实现简单备忘录(一)
- jquery+bootstrap 实现简单备忘录(二)
- jquery+bootstrap 实现简单备忘录(三)
- android之ListView简单实现
- scala实现设计模式之备忘录模式
- 行为型模式之备忘录模式实现
- Android之高仿记事本、备忘录、便签
- Android之高仿记事本、备忘录、便签
- android备忘录之---Activity生命周期进阶
- Android 设计模式之备忘录模式
- 【Android】SQLite数据库实例之备忘录
- android 备忘录
- Android备忘录
- android备忘录
- iOS实现简单备忘录程序——TaskList
- PHP为什么会被认为是草根语言?
- HTML5基础扩展——地理位置、本地存储、缓存
- 估计技术宅干的
- Android将程序崩溃信息保存本地文件发送至服务器
- .net CHARTING图表控件免费下载地址
- android 备忘录之简单实现
- LBP原理介绍以及算法实现
- tp自定义函数使用
- “fatal error C1083: ”无法打开包括文件 排查思路
- hdu - 4888 - Redraw Beautiful Drawings(最大流)
- 正向代理、反向代理
- Android 如何收集已发布程序的崩溃信息
- 为奴12年阅读有感
- SEO论坛的发展模式 壮大需要创意