版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z****大学智能终端开发课程设计说明书课题名称:姓名:学号:专业:班级:指导教师:2014年12月25日目录第一章概述----------------------------------------------------------------------------第二章需求分析------------------------------------------------------------------------------2.1系统主要内容--------------------------------------------------------------------------2.2根本要求--------------------------------------------------------------2.3设计需要结合使用的技术---------------------------------------------2.4模块的功能性概述---------------------------------------------第三章概要设计---------------------------------------------------------------------3.1系统的功能构造------------------------------------------------------------------3.2系统的模块构造------------------------------------------------------------------------3.3各模块的活动图------------------------------------------------------------------------第四章详细设计----------------------------------------------------------------------4.1布局文件------------------------------------------------------4.2备忘录数据存储的实现--------------------------------------------------------------------4.3备忘录的列表展示--------------------------------------------------------------------------4.4备忘录的维护-------------------------------------------------------------4.5备忘录的定时提醒-------------------------------------------------------------调试分析------------------------------------------------------------------------------第六章设计总结--------------------------------------------------------------------------------第七章参考文献----------------------------------------------------------------------------第八章附录----------------------------------------------------------------------------第一章概述对于很多人来说,随时带个小本子记录一些事情是很有必要的事情,从而出现了备忘录。有了备忘录,可以将自己的工作和生活安排的更有条理,在有限的时间内完成最重要、最紧急的事情。随着智能手机逐渐走进普通人的生活,它正在成为人们获取信息的主要设备,而且智能手机是他们获取信息最方便、最快捷的途径。因此,对于所有拥有的手机的用户来说,可以随时随地便捷的通过手机备忘录来实现重要事情的记录与提醒,省去了随身携带纸笔的麻烦。现如今搭载Android系统平台的手机已占有超过70%的市场份额,所以,在Android系统下的备忘录软件中,用户可以非常方便的查询事件备忘,为工作、出游、生活杂碎事提供整理记录功能。开发一款能在Android系统上使用,且性能卓越的备忘录是非常有必要且前途光明。第二章需求分析2.1、系统主要内容:〔1〕、基于Android系统平台研发出备忘录;〔2〕、通过安装备忘录,防止手机用户遗忘*个时间的重要工作,进展记录并在特定时间通过声音,文字或振动提醒用户;〔3〕、主要模块有:备忘录数据存储、列表浏览、数据维护和定时提醒等模块。2.2、根本要求:〔1〕、基于Android系统平台研发出备忘录,以防止手机用户遗忘*个时间的重要工作,进展记录并在特定时间通过声音,文字或振动提醒用户。〔2〕、主要设计出备忘录数据存储、列表浏览、数据维护和定时提醒等模块。已学习掌握Android系统平台和Java编程技术,并要求软件界面简洁专业,功能完善,真正为用户提供重要工作备忘功能。2.3、设计需要结合使用的技术:〔1〕、Eclipse平台:Eclipse是一个运行插件的平台。可以下载安装EclipseClassic的最新版本。〔2〕、AndroidDeveloperTools:按照安装说明安装AndroidDeveloperTools〔Eclipse插件〕。2.4、模块的功能性概述:〔1〕、备忘录数据存储实现:备忘录的最重要功能就是记录和保存用户容易遗忘的日期和事件,为了持久地将用户的备忘录信息保存下来,需要将这些信息存储在数据库中。备忘录需要保存的信息有:编号〔ID〕、提醒日期(Date1)、提醒时间(Time1)、提醒内容(Content)、是否启用(ON_OFF)、是否声音提醒(ALARM)、创立时间(CREATED)等.〔2〕、备忘录列表展示:用户可能需要创立很多条备忘录信息,并且需要维护这些备忘录信息,例如删除、修改等功能。备忘录的列表展示能使用户界面更加简洁清晰,并带给用户使用方便〔3〕、备忘录维护:备忘录维护是该应用程序的核心局部,提供了添加、修改、删除备忘录信息的功能,提供备忘录动态更新的功能。〔4〕、备忘录定时提醒:备忘录的第一需求是能够有效提醒用户置办已记录的事件,从而到达真正防止遗忘的效果,为了更好的提醒用户在特定时间做*项工作,要设置语音和震动等功能。第三章概要设计3.1、系统的功能构造:开场开场设置是否开启设置日期时间备忘录内容完毕开启闹钟3.2、系统的模块构造:3.3、各模块的活动图:3.3.1、添加备忘录添加日期、时间、闹铃:添加内容:3.3.2、查看备忘录3.3.3修改备忘录修改日期、时间、闹铃:修改内容:3.3.4删除备忘录第四章详细设计4.1、布局文件main.*mlfill_parent:使视图元素占满可用的空间。也可以认为这就是“拉伸〞。4.2、备忘录数据存储的实现为了使备忘录数据表具有通用的数据共享机制,需要通过ContentProvider来实现。这里定义一个TaskListProvider类,该类继承ContentProvider,实现了onCreat、query、getType、insert、delete、update等方法,来支持数据的增、删、查、改等操作。在该类内部还定义了一个DatabaseHelper内部类继承SQLiteHelper,该类提供了常见或翻开数据库、创立或删除表的功能。4.3、备忘录的列表展示:这里通过一个ListActivity来展示备忘录列表,通过选项菜单提供维护数据接口。4.4、备忘录的维护:当用户单击主界面的一个列表时会在上述列表展示中提到的setOnItemClickListener方法中响应,此方法体中定义一个Intent对象,使用setClass方法实现界面跳转到此TaskDetailActivity所对应的界面4.5、备忘录的定时提醒:此功能通过定义Activity发出播送,BroadcastReceiver接收播送,并通过Notification提醒用户。4.5.1定义提醒播送接收器当用户选择了备忘录信息中的“开启闹钟〞选项时,便通过播送的方式启动一个定时闹钟,之后定义一个播送接收器接收播送。4.5.2播送接收器实现如下显示提醒Activity:第五章调试分析程序运行:列表展示:备忘录维护:备忘录定时提醒:总体来说,调试过程中根本没有出现系统性错误,软件强健性良好,测试数据随机采用,根本实现软件要实现的需求。第六章设计总结经过一个多月的学习和研究,本次课程设计终于圆满完成,虽然消耗了许多精力和时间,设计过程中也出现了许多问题,但通过网上资料的查询、图书馆图书的借阅以及同学们的帮助,最终也逐一得到了解决。通过本次课程设计,我了解到实践经历对于学生的重要性。备忘录软件的开发使我对书本上的知识点和理论有了更深一层的了解,使我学会了如何利用所学的知识,把理论结合于实践中,进一步掌握了开发基于Android平台的软件的流程。本次课程设计主要研究了Android平台的架构以及在Android平台上开发备忘录软件,此应用除了具备简单备忘功能外,还具备简单数据处理功能以及闹钟提醒相对高级点的功能。本次课程设计在Android平台以及在该平台上开发手机备忘录软件上做了大量的工作,但仍有许多地方值得进一步探讨研究,如:界面设计如何更加美观简洁,软件的移植性、兼容性如何等。Android开发是一个开放的平台,需要不断进展内容添加和补充,这也就要求我们学生不断学习新知识,从而使软件功能不断扩展。同时,本次课程设计让我对?智能终端开发?这门课程有了更深层次的了解,也让我发现了自我存在的缺乏,今后,在Android开发的学习之路上,我必须更加重视实践与理论的结合,在系统的扩展性方面花费更多的精力去学习。第七章参考文献【1】?零点起飞学Android开发?*诚著,清华大学[2]?Android根底教程?〔美〕伯内特著,*波等译/2009年11月/人民邮电[3]?Android应用程序开发?,王向辉,*国印,沈洁编著/2010年3月/清华大学[4]?Java宝典?,*浏毅等编著/2009年8月/电子工业大学[5]?*ML程序设计使用教程?,*亚飞,汤桂风编著/2010年8月/师*大学[6]?Java编程思想?(美)BruceEckel著,陈昊鹏译/2011年4月/机械工业[7]?Android程序设计根底?郝玉龙/2011年1月/清华大学第八章附录AlarmActivity.java文件package.amaker.ch17.app;importandroid.app.*;importandroid.content.Conte*t;.Uri;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Te*tView;publicclassAlarmActivitye*tendsActivity{ publicstaticfinalintID=1; protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.alarm); //获得Button、Te*tView实例 Buttonbtn=(Button)findViewById(R.id.cancelButton01); Te*tViewtv=(Te*tView)findViewById(R.id.msgTe*tView01); //获得NotificationManager实例 Stringservice=Conte*t.NOTIFICATION_SERVICE; finalNotificationManagernm=(NotificationManager)getSystemService(service); //实例化NotificationNotificationn=newNotification(); //设置显示提示信息,该信息也会在状态栏显示Stringmsg=getIntent().getStringE*tra("msg"); n.tickerTe*t=msg;//显示时间 tv.setTe*t(msg); //设置声音提示n.sound=Uri.parse("file:///sdcard/fallbackring.ogg"); nm.notify(ID,n);//发出通知 //取消通知 btn.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ nm.cancel(ID); finish(); } }); }}TaskDetailActivity.java文件-.zpackage.amaker.ch17.app;importjava.util.Calendar;importandroid.app.*;importandroid.content.*;.Uri;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.*;import.amaker.ch17.app.TaskList.Tasks;publicclassTaskDetailActivitye*tendsListActivity{ //备忘录信息列表privateListViewlistView=null; privateintmYear;//提醒日期 privateintmMonth; privateintmDay; privateintmHour;//提醒时间 privateintmMinute; //日期显示Te*tViewprivateTe*tViewdateName,dateDesc; //时间显示Te*tViewprivateTe*tViewtimeName,timeDesc; //提醒内容Te*tViewprivateTe*tViewcontentName,contentDesc; privateinton_off=0;//是否开启提醒 privateintalarm=0;//是否声音警告 //显示日期、时间对话框常量staticfinalintDATE_DIALOG_ID=0; staticfinalintTIME_DIALOG_ID=1; //保存内容、日期、时间字符串privateStringcontent,date1,time1; privateintid1;//备忘录ID privateCheckedTe*tViewctv1,ctv2;//多项选择框 privateLayoutInflaterli;//布局实例 //初始化方法privatevoidinit(Intentintent){Bundleb=intent.getBundleE*tra("b"); if(b!=null){id1=b.getInt("id");content=b.getString("content"); date1=b.getString("date1"); time1=b.getString("time1"); on_off=b.getInt("on_off"); alarm=b.getInt("alarm");if(date1!=null&&date1.length()>0){String[]strs=date1.split("/");mYear=Integer.parseInt(strs[0]);mMonth=Integer.parseInt(strs[1]);mDay=Integer.parseInt(strs[2]);}if(time1!=null&&time1.length()>0){String[]strs=time1.split(":");mHour=Integer.parseInt(strs[0]);mMinute=Integer.parseInt(strs[1]);}}}publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //获得ListView listView=getListView(); //实例化LayoutInflater li=getLayoutInflater(); //设置ListViewAdapterlistView.setAdapter(newViewAdapter()); //可多项选择listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //获得Calendar实例finalCalendarc=Calendar.getInstance(); //获得当前日期、时间 mYear=c.get(Calendar.YEAR); mMonth=c.get(Calendar.MONTH);mDay=c.get(Calendar.DAY_OF_MONTH);mHour=c.get(Calendar.HOUR_OF_DAY); mMinute=c.get(Calendar.MINUTE); //响应列表单击事件listView.setOnItemClickListener(newOnItemClickListener(){publicvoidonItemClick(AdapterView<?>av,Viewv,intposition,longid){switch(position){ //设置是否开启提醒case0:ctv1=(CheckedTe*tView)v;if(ctv1.isChecked()){on_off=0;}else{on_off=1;}break; //设置提醒日期case1:showDialog(DATE_DIALOG_ID);break; //设置提醒时间case2:showDialog(TIME_DIALOG_ID);break; //设置提醒内容case3: showDialog1("请输入内容:");break; //设置是否开启语音提醒case4:ctv2=(CheckedTe*tView)v;if(ctv2.isChecked()){alarm=0; setAlarm(false);}else{alarm=1;setAlarm(true);}break;default:break;}} }); } protectedvoidonResume(){ super.onResume(); //初始化列表 init(getIntent()); } //ListViewAdatper,该类实现了列表的每一项通过自定义视图实现classViewAdaptere*tendsBaseAdapter{ //列表显示内容 String[]strs={"是否开启","日期","时间","内容","开启闹钟"}; //获得列表列数 publicintgetCount(){ returnstrs.length; } //返回列表项 publicObjectgetItem(intposition){returnposition;} //返回列表ID publiclonggetItemId(intposition){ returnposition; } //获得当前列表项视图{Viewv=li.inflate(R.layout.item_row,null);switch(position){ //是否开启该条备忘录case0:ctv1=(CheckedTe*tView)li.inflate(android.R.layout.simple_list_item_multiple_choice,null); ctv1.setTe*t(strs[position]);if(on_off==0){ctv1.setChecked(false);}else{ctv1.setChecked(true);}returnctv1; //提醒日期case1:dateName=(Te*tView)v.findViewById(R.);dateDesc=(Te*tView)v.findViewById(R.id.desc); dateName.setTe*t(strs[position]);dateDesc.setTe*t(mYear+"/"+mMonth+"/"+mDay);returnv;//提醒时间case2:timeName=(Te*tView)v.findViewById(R.);timeDesc=(Te*tView)v.findViewById(R.id.desc);timeName.setTe*t(strs[position]);timeDesc.setTe*t(mHour+":"+mMinute); returnv; //提醒内容 case3:contentName=(Te*tView)v.findViewById(R.);contentDesc=(Te*tView)v.findViewById(R.id.desc);contentName.setTe*t(strs[position])contentDesc.setTe*t(content);returnv; //是否声音提示case4:ctv2=(CheckedTe*tView)li.inflate(ctv2.setTe*t(strs[position]);if(alarm==0){ ctv2.setChecked(false);}else{ctv2.setChecked(true);}returnctv2;default:break;}returnnull; } //显示对话框protectedDialogonCreateDialog(intid){ switch(id){ //显示日期对话框 caseDATE_DIALOG_ID:returnnewDatePickerDialog(this,mDateSetListener,mYear,mMonth,mDay); //显示时间对话框 caseTIME_DIALOG_ID:returnnewTimePickerDialog(this,mTimeSetListener,mHour,mMinute,false);}returnnull;} finalStringBC_ACTION=".amaker.ch17.TaskReceiver"; //设置通知提示privatevoidsetAlarm(booleanflag){//获得AlarmManager实例finalAlarmManageram=(AlarmManager)getSystemService(ALARM_SERVICE); //实例化IntentIntentintent=newIntent(); //设置Intentaction属性intent.setAction(BC_ACTION);intent.putE*tra("msg",content); //实例化PendingIntentfinalPendingIntentpi=PendingIntent.getBroadcast(getApplicationConte*t(),0,intent,0);//获得系统时间finallongtime1=System.currentTimeMillis();Calendarc=Calendar.getInstance();c.set(mYear,mMonth,mDay,mHour,mMinute);longtime2=c.getTimeInMillis();if(flag&&(time2-time1)>0&&on_off==1){am.set(AlarmManager.RTC_WAKEUP,time2,pi);}else{ am.cancel(pi);}}//设置提示日期对话框 privatevoidshowDialog1(Stringmsg){Viewv=li.inflate(R.layout.item_content,null);contentET.setTe*t(content);newAlertDialog.Builder(this).setView(v).setMessage(msg).setCancelable(false).setPositiveButton("确定",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intid){content=contentET.getTe*t().toString(); contentDesc.setTe*t(content); } }).show(); } //时间选择对话框 privateTimePickerDialog.OnTimeSetListenermTimeSetListener= newTimePickerDialog.OnTimeSetListener(){ publicvoidonTimeSet(TimePickerview,inthourOfDay,intminute){ mHour=hourOfDay; mMinute=minute; timeDesc.setTe*t(mHour+":"+mMinute);} }; //日期选择对话框privateDatePickerDialog.OnDateSetListenermDateSetListener=newDatePickerDialog.OnDateSetListener(){publicvoidonDateSet(DatePickerview,intyear,intmonthOfYear, intdayOfMonth){mYear=year;mMonth=monthOfYear;mDay=dayOfMonth; dateDesc.setTe*t(mYear+"/"+mMonth+"/"+mDay); } }; //保存或修改备忘录信息 protectedvoidonPause(){ super.onPause(); saveOrUpdate(); }; //保存或修改备忘录信息 privatevoidsaveOrUpdate(){ ContentValuesvalues=newContentValues(); values.clear(); values.put(Tasks.CONTENT,contentDesc.getTe*t().toString()); values.put(Tasks.DATE1,dateDesc.getTe*t().toString()); values.put(Tasks.TIME1,timeDesc.getTe*t().toString()); values.put(Tasks.ON_OFF,ctv1.isChecked()?1:0); values.put(Tasks.ALARM,ctv2.isChecked()?1:0); //修改 if(id1!=0){Uriuri=ContentUris.withAppendedId(Tasks.CONTENT_URI,id1);getContentResolver().update(uri,values,null,null); //保存 }else{Uriuri=TaskList.Tasks.CONTENT_URI; getContentResolver().insert(uri,values); } }-.zTaskList.java文件package.amaker.ch17.app;.Uri;vider.BaseColumns;publicfinalclassTaskList{ //授权常量publicstaticfinalStringAUTHORITY=".vider.TaskList";privateTaskList(){}//内部类publicstaticfinalclassTasksimplementsBaseColumns{privateTasks(){}//UripublicstaticfinalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY+"/taskLists");publicstaticfinalStringCONTENT_TYPE="vnd.android.cursor.dir/vnd.amaker.tasklist";publicstaticfinalStringCONTENT_ITEM_TYPE="vnd.android.cursor.item/vnd.amaker.tasklist";//默认排序常量publicstaticfinalStringDEFAULT_SORT_ORDER="createdDESC";//表字段常量publicstaticfinalStringCONTENT="content";publicstaticfinalStringCREATED="created";publicstaticfinalStringDATE1="date1";publicstaticfinalStringTIME1="time1";publicstaticfinalStringON_OFF="on_off";publicstaticfinalStringALARM="alarm";}}TaskListActivity.java文件-.zpackage.amaker.ch17.app;tivity;importandroid.content.ContentUris;importandroid.content.Intent;importandroid.database.Cursor;.Uri;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.*;import.amaker.ch17.app.TaskList.Tasks;publicclassTaskListActivitye*tendsListActivity{ //菜单项常量 privatestaticfinalintNEW=1; privatestaticfinalintDEL=2; //查询列数组 privatestaticfinalString[]PROJECTION=newString[]{ Tasks._ID, //0 Tasks.CONTENT,//1 Tasks.CREATED,//2 Tasks.ALARM, //3 Tasks.DATE1,//4 Tasks.TIME1, //5 Tasks.ON_OFF //6 }; protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //获得Intent finalIntentintent=getIntent(); //设置Uri if(intent.getData()==null){ intent.setData(Tasks.CONTENT_URI); } //获得ListView ListViewlistView=getListView(); //查询所有备忘录信息 Cursorcursor=managedQuery(getIntent().getData(),PROJECTION,null,null,Tasks.DEFAULT_SORT_ORDER); //创立Adapter SimpleCursorAdapteradapter=newSimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cursor,newString[]{Tasks._ID,Tasks.CONTENT},newint[]{android.R.id.te*t1,android.R.id.te*t2}); //将备忘录信息显示到ListView setListAdapter(adapter); //为ListView添加单击事件监听器listView.setOnItemClickListener(newOnItemClickListener(){publicvoidonItemClick(AdapterView<?>av,Viewv,intposition,longid){ //通过ID查询备忘录信息Uriuri=ContentUris.withAppendedId(Tasks.CONTENT_URI,id);Cursorcursor=managedQuery(uri,PROJECTION,null,null,Tasks.DEFAULT_SORT_ORDER);if(cursor.moveToNe*t()){intid1=cursor.getInt(0);Stringcontent=cursor.getString(1);Stringcreated=cursor.getString(2);intalarm=cursor.getInt(3);Stringdate1=cursor.getString(4);Stringtime1=cursor.getString(5);inton_off=cursor.getInt(6);Bundleb=newBundle();b.putInt("id",id1); b.putString("content",content);b.putString("created",created);b.putInt("alarm",alarm);b.putString("date1",date1);b.putString("time1",time1);b.putInt("on_off",on_off); //将备忘录信息添加到Intentin//启动备忘录详细信息Activity intent.setClass(TaskListActivity.this,TaskDetailActivity.class);startActivity(intent);}}});} //创立选项菜单 publicbooleanonCreateOptionsMenu(Menumenu){ menu.add(0,NEW,0,"新建"); menu.add(0,DEL,0,"删除"); returntrue; } //选项菜单项单击方法 publicbooleanonOptionsItemSelected(MenuItemitem){ switch(item.getItemId()){ caseNEW: //启动备忘录详细信息ActivityIntentintent=newIntent();intent.setClass(this,TaskDetailActivity.class);startActivity(intent);returntrue;caseDEL:returntrue;}returnfalse;}}-.z〔5〕TaskListProvider.java文件package.amaker.ch17.app;importjava.util.HashMap;importandroid.content.*;importandroid.database.Cursor;importandroid.database.SQLE*ception;importandroid.database.sqlite.*;.Uri;importandroid.te*t.Te*tUtils;import.amaker.ch17.app.TaskList.Tasks;publicclassTaskListProvidere*tendsContentProvider{//数据库名称常量privatestaticfinalStringDATABASE_NAME="task_list.db";//数据库版本常量privatestaticfinalintDATABASE_VERSION=1;//表名称常量privatestaticfinalStringTASK_LIST_TABLE_NAME="taskLists";//查询列集合privatestaticHashMap<String,String>sTaskListProjectionMap;//查询、更新条件privatestaticfinalintTASKS=1;privatestaticfinalintTASK_ID=2;//Uri工具类privatestaticfinalUriMatchersUriMatcher;//数据库工具类实例privateDatabaseHelpermOpenHelper;//内部工具类,创立或翻开数据库,创立或删除表privatestaticclassDatabaseHelpere*tendsSQLiteOpenHelper{DatabaseHelper(Conte*tconte*t){super(conte*t,DATABASE_NAME,null,DATABASE_VERSION);} //创立表publicvoidonCreate(SQLiteDatabasedb){db.e*ecSQL("CREATETABLE"+TASK_LIST_TABLE_NAME+"("+Tasks._ID+"INTEGERPRIMARYKEY,"+Tasks.DATE1+"TE*T,"+Tasks.TIME1+"TE*T,"+Tasks.CONTENT+"TE*T,"+Tasks.ON_OFF+"INTEGER,"+Tasks.ALARM+"INTEGER,"+Tasks.CREATED+"TE*T"+");");}//删除表publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){db.e*ecSQL("DROPTABLEIFE*ISTStaskLists");onCreate(db);}}//创立或翻开数据库publicbooleanonCreate(){mOpenHelper=newDatabaseHelper(getConte*t());returntrue;}//查询publicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder){SQLiteQueryBuilderqb=newSQLiteQueryBuilder();switch(sUriMatcher.match(uri)){//查询所有caseTASKS:qb.setTables(TASK_LIST_TABLE_NAME);qb.setProjectionMap(sTaskListProjectionMap)break;//根据ID查询caseTASK_ID:qb.setTables(TASK_LIST_TABLE_NAME);qb.setProjectionMap(sTaskListProjectionMap)qb.appendWhere(Tasks._ID+"="+uri.getPathSegments().get(1));break;default: thrownewIllegalArgumentE*ception("Uri错误!"+uri);}//使用默认排序StringorderBy;if(Te*tUtils.isEmpty(sortOrder)){orderBy=TaskList.Tasks.DEFAULT_SORT_ORDER;}else{orderBy=sortOrder;}//获得数据库实例SQLiteDatabasedb=mOpenHelper.getReadableDatabase();//返回游标集合Cursorc=qb.query(db,projection,selection,selectionArgs,null,null,orderBy);c.setNotificationUri(getConte*t().getContentResolver(),uri);returnc;}//获得类型publicStringgetType(Uriuri){switch(sUriMatcher.match(uri)){caseTASKS:returnTasks.CONTENT_TYPE;caseTASK_ID:returnTasks.CONTENT_ITEM_TYPE;default: thrownewIllegalArgumentE*ception("错误的URI:"+uri);}}//保存数据publicUriinsert(Uriuri,ContentValuesinitialValues){if(sUriMatcher.match(uri)!=TASKS){thrownewIllegalArgumentE*ception("错误的URI:"+uri);}ContentValuesvalues;if(initialValues!=null){values=newContentValues(initialValues);}else{values=newContentValues();}//获得数据库实例SQLiteDatabasedb=mOpenHelper.getWritableDatabase();//保存数据返回行IDlongrowId=db.insert(TASK_LIST_TABLE_NAME,Tasks.CONTENT,values);if(rowId>0){UritaskUri=ContentUris.withAppendedId(TaskList.Tasks.CONTENT_URI,rowId);getConte*t().getContentResolver().notifyChange(taskUri,null);returntaskUri;}thrownewSQLE*ception("插入数据失败"+uri);}//删除数据publicintdelete(Uriuri,Stringwhere,String[]whereArgs){ //获得数据库实例SQLiteDatabasedb=mOpenHelper.getWritableDatabase();intcount;switch(sUriMatcher.match(uri)){//根据指定条件删除caseTASKS:count=db.delete(TASK_LIST_TABLE_NAME,where,whereArgs);break;//根据指定条件和ID删除caseTASK_ID:StringnoteId=uri.getPathSegments().get(1);count=db.delete(TASK_LIST_TABLE_NAME,Tasks._ID+"="+noteId+(!Te*tUtils.isEmpty(where)?"AND("+where+')':"),whereArgs);break;default:thrownewIllegalArgumentE*ception("错误的URI"+uri);}getConte*t().getContentResolver().notifyChange(uri,null);returncount;}//更新数据publicintupdate(Uriuri,ContentValuesvalues,Stringwhere,String[]whereArgs){ //获得数据库实例SQLiteDatabasedb=mOpenHelper.getWritableDatabase();intcount;switch(sUriMatcher.match(uri)){//根据指定条件更新caseTASKS:count=db.update(TASK_LIST_TABLE_NAME,values,where,whereArgs);break;//根据指定条件和ID更新caseTASK_ID:StringnoteId=uri.getPathSegments().get(1);count=db.update(TASK_LIST_TABLE_NAME,values,Tasks._ID+"="+noteId+(!Te*tUtils.isEmpty(where)?"AND("+where+')':"),whereArgs);break;default:thrownewIllegalArgumentE*ception("错误的URI"+uri);}getConte*t().getContentResolver().notifyChange(uri,null);returncount;}static{ //Uri匹配工具类sUriMatcher=newUriMatcher(UriMatcher.NO_MATCH);sUriMatcher.addURI(TaskList.AUTHORITY,"taskLists",TASKS);sUriMatcher.addURI(TaskList.AUTHORITY,"taskLists/*",TASK_ID);//实例化查询列集合sTaskListProjectionMap=newHashMap<String,String>();//添加查询列sTaskListProjectionMap.put(Tasks._ID,Tasks._ID);sTaskListProjectionMap.put(Tasks.CONTENT,Tasks.CONTENT);sTaskListProjectionMap.put(Tasks.CREATED,Tasks.CREATED);sTaskListProjectionMap.put(Tasks.ALARM,Tasks.ALARM);sTaskListProjectionMap.put(Tasks.DATE1,Tasks.DATE1);sTaskListProjectionMap.put(Tasks.TIME1,Tasks.TIME1);sTaskListProjectionMap.put(Tasks.ON_OFF,Tasks.ON_OFF);}}TaskReceiver.java文件package.amaker.ch17.app;importandroid.content.*;publicclassTaskReceivere*tendsBroadcastReceiver{ publicvoidonReceive(Conte*tconte*t,Intentintent){ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClass(conte*t,AlarmActivity.class); conte*t.startActivity(intent); }}main.*ml文件<?*mlversion="1.0"encoding="utf-8"?><LinearLayout*mlns:android="schemas.android./apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ListViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:id="+id/itemlist"/></LinearLayout>string.*ml文件<?*mlversion="1.0"encoding="utf-8"?><resources><stringname="hello">HelloWorld,MainActivity!</string><stringname="app_name">Memorandum</string></resources>item_content.*ml文件<?*mlversion="1.0"encoding="utf-8"?><LinearLayout*mlns:android="schemas.android./apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"><EditTe*t android:te*t=" android:id="+id/content"android:layout_width="fill_parent"android:layout_height="50p*"/></LinearLayout>item_row.*ml文件<?*mlversion="1.0"encoding="utf-8"?><LinearLayout*mlns:android="schemas.android./apk/res/android"android:id="+id/vw1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:padding="4p*"android:orientation="horizontal"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"><Te*tViewandroid:id="+id/name"android:te*tSize="18sp"android:te*tStyle="bold"android:layout_width="fill_parent"android:layout_height="wrap_content"/><Te*tViewandroid:id="+id/desc"android:te*tSize="14sp"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年仁怀市大坝镇卫生院公开招聘乡村医生工作备考题库参考答案详解
- 2026年关于中共勐海县委社会工作部编外人员的招聘备考题库及答案详解一套
- 2026年建宁县实验幼儿园顶岗教师招聘备考题库及一套完整答案详解
- 2026年大连理工大学医学部公共服务实验技术人员招聘备考题库及一套参考答案详解
- 2026年【就业】上海复医天健医疗服务产业股份有限公司招聘清洁工备考题库及完整答案详解一套
- 2026年中国电信股份有限公司黎川分公司备考题库含答案详解
- 2026年云南建投第一水利水电建设有限公司招聘备考题库完整答案详解
- 航空公司内控制度
- 如何加强财务内控制度
- 学校采购管理内控制度
- 福建省泉州市2022-2023学年高一上学期期末教学质量监测化学试题(含答案)
- 材料样品确认单
- 初中班会主题课件科学的复习事半功倍(共23张PPT)
- 英语book report简单范文(通用4篇)
- PCB封装设计规范
- 船舶建造 监理
- YY/T 1447-2016外科植入物植入材料磷灰石形成能力的体外评估
- GB/T 9349-2002聚氯乙烯、相关含氯均聚物和共聚物及其共混物热稳定性的测定变色法
- GB/T 8331-2008离子交换树脂湿视密度测定方法
- 美英报刊阅读教程课件
- 幼儿园绘本故事:《十二生肖》 课件
评论
0/150
提交评论