分享

Android项目小结

 elementneos 2016-01-10

一、闹铃功能介绍:

1、为每条备忘添加闹铃

2、备忘内容和闹铃信息存在SQL中

3、可删除每天记录和闹铃或者删除所有

4、到点闹铃启动,包括锁屏时和重开机

5、在桌面的创建一个widget类似便签那样的东西显示记录

二、看下效果图:



三、关于SQL部分不再细写,可查看Android应用开发一栏:

添加闹铃和备忘:

1、设置日期:

  1. dateBtn.setOnClickListener(new OnClickListener() {  
  2.   
  3.                 @Override  
  4.                 public void onClick(View v) {  
  5.                     mCalendar = Calendar.getInstance();  
  6.                     // TODO Auto-generated method stub  
  7.                     new DatePickerDialog(EditTime.this,  
  8.                             new DatePickerDialog.OnDateSetListener() {  
  9.                                 public void onDateSet(DatePicker view,  
  10.                                         int year, int monthOfYear,  
  11.                                         int dayOfMonth) {  
  12.   
  13.                                     mAlarmCalendar.set(Calendar.YEAR, year);  
  14.                                     mAlarmCalendar.set(Calendar.MONTH,  
  15.                                             monthOfYear);  
  16.                                     mAlarmCalendar.set(Calendar.DAY_OF_MONTH,  
  17.                                             dayOfMonth);  
  18.                                     EditTime.this.year = year;  
  19.                                     EditTime.this.month = monthOfYear;  
  20.                                     EditTime.this.day = dayOfMonth;  
  21.                                     dateBtn.setText(year + "年" + (month + 1)  
  22.                                             + "月" + day + "日");  
  23.                                     System.out.println(year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日");  
  24.                                 }  
  25.                             }, year, month, day).show();  
  26.                 }  
  27.             });  

2、设置时间:

  1. timeBtn.setOnClickListener(new OnClickListener() {  
  2.   
  3.                 @Override  
  4.                 public void onClick(View v) {  
  5.                     mCalendar = Calendar.getInstance();  
  6.                     new TimePickerDialog(EditTime.this,  
  7.                             new TimePickerDialog.OnTimeSetListener() {  
  8.                                 public void onTimeSet(TimePicker view,  
  9.                                         int hourOfDay, int minute) {  
  10.                                     mAlarmCalendar.set(Calendar.HOUR_OF_DAY,  
  11.                                             hourOfDay);  
  12.                                     mAlarmCalendar.set(Calendar.MINUTE, minute);  
  13.                                     mAlarmCalendar.set(Calendar.SECOND, 0);  
  14.                                     mAlarmCalendar.set(Calendar.MILLISECOND, 0);  
  15.                                     EditTime.this.hour = hourOfDay;  
  16.                                     EditTime.this.minute = minute;  
  17.                                     timeBtn.setText(hour + "时" + minute + "分");                                   
  18.                                     System.out.println(hourOfDay+"时"+minute+"分");  
  19.                                 }  
  20.                             }, hour, minute, false).show();  
  21.                 }  
  22.             });  

3、广播闹铃:

  1. setBtn.setOnClickListener(new OnClickListener() {  
  2.   
  3.                 @Override  
  4.                 public void onClick(View v) {  
  5.                     // TODO Auto-generated method stub  
  6.                     //写进数据库  
  7.                     addData();  
  8.                     /* 获取闹钟管理的实例 */  
  9.   
  10.                     mAlarm = (AlarmManager) getSystemService(Service.ALARM_SERVICE);  
  11.                     Intent intent = new Intent(EditTime.this,  
  12.                             AlarmReceiver.class);  
  13.                     PendingIntent pendingIntent = PendingIntent.getBroadcast(  
  14.                             EditTime.this, AlarmIndex, intent, 0);// 第二个参数为区别不同闹铃的唯一标识  
  15.                     /* 设置闹钟 */  
  16.                     mAlarm.set(AlarmManager.RTC_WAKEUP,  
  17.                             mAlarmCalendar.getTimeInMillis(), pendingIntent);  
  18.                     finish();  
  19.                 }  
  20.             });  

4、广播接收BroadcastReceiver:

  1. public class AlarmReceiver extends BroadcastReceiver {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.         // TODO Auto-generated method stub        
  5.         Intent i = new Intent(context, Alarm.class);  
  6.         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//这一句很重要,不然会出错  
  7.         context.startActivity(i);  
  8.     }  
  9. }  

记得注册:

  1. <receiver  
  2.             android:name=".AlarmReceiver"  
  3.             android:process=":remote" />  

5、重启之后重写闹铃,BootReceiver:

  1. public class BootReceiver extends BroadcastReceiver{  
  2.           
  3.     @Override  
  4.     public void onReceive(Context context, Intent intent) {  
  5.         // TODO Auto-generated method stub  
  6.         String action = intent.getAction();  
  7.         if(action.equals(Intent.ACTION_BOOT_COMPLETED)){  
  8.             Intent i = new Intent(context, BootAlarm.class);  
  9.             i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//这一句很重要,不然会出错  
  10.             context.startActivity(i);  
  11.         }  
  12.     }  
  13. }  
同样需要注册:

  1. <receiver android:name="BootReceiver" >  
  2.             <intent-filter>  
  3.                 <action android:name="android.intent.action.BOOT_COMPLETED" />  
  4.             </intent-filter>  
  5.         </receiver>  

6、开始重写:

  1. dbHelper = new DatabaseHelper(BootAlarm.this, "idea.sql");  
  2.         SQLiteDatabase db = dbHelper.getReadableDatabase();  
  3.         Cursor cursor = db.query("user", null, null, null, null, null, null);  
  4.         btAlarmCalendar = Calendar.getInstance();  
  5.           
  6.             while (cursor.moveToNext()) {  
  7.                 btAlarmCalendar = Calendar.getInstance();  
  8.                 System.out.println("cursor.moveToNext()-->cursor.getInt(0)-->"  
  9.                         + cursor.getInt(0));  
  10.                 time = cursor.getString(cursor.getColumnIndex("mtime"));  
  11.                 year = time.substring(0, time.indexOf("年"));  
  12.                 myear = Integer.valueOf(year).intValue();  
  13.                 month = time.substring(time.indexOf("年")+1, time.indexOf("月"));  
  14.                 mmonth = Integer.valueOf(month).intValue()-1;  
  15.                 day = time.substring(time.indexOf("月")+1, time.indexOf("日"));  
  16.                 mday = Integer.valueOf(day).intValue();  
  17.                 hour = time.substring(time.indexOf("日")+1, time.indexOf("时"));  
  18.                 mhour = Integer.valueOf(hour).intValue();  
  19.                 minute = time.substring(time.indexOf("时")+1, time.indexOf("分"));  
  20.                 mminute = Integer.valueOf(minute).intValue();  
  21.                 System.out.println(myear + "年" + mmonth + "月" + mday + "日"  
  22.                         + mhour + "时" + mminute);  
  23.                 btAlarmCalendar.set(Calendar.YEAR, myear);  
  24.                 btAlarmCalendar.set(Calendar.MONTH, mmonth);  
  25.                 btAlarmCalendar.set(Calendar.DAY_OF_MONTH, mday);  
  26.                 btAlarmCalendar.set(Calendar.HOUR_OF_DAY, mhour);  
  27.                 btAlarmCalendar.set(Calendar.MINUTE, mminute);  
  28.                 btAlarmCalendar.set(Calendar.SECOND, 0);  
  29.                 btAlarmCalendar.set(Calendar.MILLISECOND, 0);  
  30.                 mAlarm = (AlarmManager) getSystemService(Service.ALARM_SERVICE);  
  31.                 intent = new Intent(BootAlarm.this, AlarmReceiver.class);  
  32.                 pendingIntent= PendingIntent.getBroadcast(  
  33.                         BootAlarm.this, cursor.getInt(0), intent, 0);// 第二个参数为区别不同闹铃的唯一标识  
  34.                 /* 设置闹钟 */  
  35.                 mAlarm.set(AlarmManager.RTC_WAKEUP,  
  36.                         btAlarmCalendar.getTimeInMillis(), pendingIntent);  
  37.             }  

这里有个很需要注意的:

  1. intent = new Intent(BootAlarm.this, AlarmReceiver.class);  
  2.                 pendingIntent= PendingIntent.getBroadcast(  
  3.                         BootAlarm.this, cursor.getInt(0), intent, 0);  

若是PendingIntent.getBroadcas,则intent必须为启动的是BroadcastReceiver,不然重写不会成功的。


7、到点闹铃响,这是由AlarmReceiver(继承BroadcastReceiver)启动的:

  1. dbHelper = new DatabaseHelper(Alarm.this, "ideal.sql");  
  2.         SQLiteDatabase db = dbHelper.getReadableDatabase();  
  3.         Cursor cursor = db.query("user", null, "_id=?",  
  4.                 new String[] { NoteActivity.Alarming_index + "" }, null, null,  
  5.                 null);  
  6.         if (cursor.moveToFirst()) {  
  7.             mtime = cursor.getString(cursor.getColumnIndex("mtime"));  
  8.             mtext = cursor.getString(cursor.getColumnIndex("mtext"));  
  9.         }  
  10.         db.close();  
  11.         addData();//写进历史记录表中  
  12.         deleteData(NoteActivity.Alarming_index);//删除原来记录  
  13.           
  14.         new AlertDialog.Builder(Alarm.this)  
  15.                 .setIcon(R.drawable.bell)  
  16.                 .setTitle("It's time to do something.")  
  17.                 .setMessage(mtext)  
  18.                 .setPositiveButton("Done",  
  19.                         new DialogInterface.OnClickListener() {  
  20.                             public void onClick(DialogInterface dialog,  
  21.                                     int whichButton) {  
  22.                                 deleteData(NoteActivity.Alarming_index);//再次删除确认  
  23.                                 //关闭闹铃声  
  24.                                 Intent intentSV = new Intent(Alarm.this, MyService.class);  
  25.                                 stopService(intentSV);  
  26.                                 Alarm.this.finish();  
  27.                             }  
  28.                         }).show();  

锁屏时也启动闹铃:

  1. //下面是为了在锁屏时也能启动闹铃  
  2.         getWindow().addFlags(  
  3.                 WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED  
  4.                                 | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);  
  5.         getWindow().addFlags(  
  6.                 WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON  
  7.                                 | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);  
8、置于闹铃音乐可以写一个Service,这个可查看Android学习笔记一栏
9、点击listview可查看记录内容,长按可进行记录的删除,这里不再多写。

10、由于是闹铃,所以必须每一秒中进行更新一下倒计时,这个可以查看Android学习笔记一栏。

11、附:让title每秒显示时间:

  1. public class TimeThread extends Thread {  
  2.     @Override  
  3.     public void run() {  
  4.         do {  
  5.             try {  
  6.                 Thread.sleep(1000);  
  7.                 Message msg = new Message();  
  8.                 msg.what = 1;  
  9.                 mHandler.sendMessage(msg);  
  10.             } catch (InterruptedException e) {  
  11.                 e.printStackTrace();  
  12.             }  
  13.         } while (true);  
  14.     }  
  15. }  
  16.   
  17. private Handler mHandler = new Handler() {  
  18.     @Override  
  19.     public void handleMessage(Message msg) {  
  20.         super.handleMessage(msg);  
  21.         switch (msg.what) {  
  22.         case 1:  
  23.             currentTime = new Date();  
  24.             // long sysTime = System.currentTimeMillis();  
  25.             CharSequence sysTimeStr = DateFormat.format(  
  26.                     "yyyy年MM月dd日hh:mm:ss", currentTime.getTime());  
  27.             EditTime.this.setTitle(sysTimeStr);  
  28.             break;  
  29.   
  30.         default:  
  31.             break;  
  32.         }  
  33.     }  
  34. };  

------------------(修改版)----------------------


12、是否为记录添加闹铃:

  1. isAlarmBtn.setOnClickListener(new OnClickListener() {  
  2.   
  3.                 @Override  
  4.                 public void onClick(View v) {  
  5.                     // TODO Auto-generated method stub  
  6.                     isAlarmNum++;  
  7.                     if (isAlarmNum % 2 == 0) {  
  8.                         isAlarmBtn.setBackgroundResource(R.drawable.checknull);  
  9.                         isAlarm = 0;  
  10.                     } else {  
  11.                         isAlarmBtn.setBackgroundResource(R.drawable.check);  
  12.                         isAlarm = 1;  
  13.                     }  
  14.                 }  
  15.             });  

13、阻止设置时间小于当前时间:

  1. currentTime = new Date();  
  2.                     if (beginTime.getTime() < currentTime.getTime()) {  
  3.                         Toast.makeText(EditTime.this, "设置时间不能小于当前时间!",  
  4.                                 Toast.LENGTH_SHORT).show();  
  5.                     }  

14、添加widget:

AppWidget.java

  1. public class AppWidget extends AppWidgetProvider {  
  2.   
  3.     private DatabaseHelper dbHelper;  
  4.     String[] desk_text;  
  5.     @Override  
  6.     public void onUpdate(Context context, AppWidgetManager appWidgetManager,  
  7.             int[] appWidgetIds) {  
  8.         // TODO Auto-generated method stub  
  9.         super.onUpdate(context, appWidgetManager, appWidgetIds);  
  10.         //读取数据库中的记录  
  11.         dbHelper = new DatabaseHelper(context, "ideal.sql");  
  12.         SQLiteDatabase db = dbHelper.getReadableDatabase();  
  13.         Cursor cursor = db.query("user", null, null, null, null, null, null);  
  14.         int desk_num=0;  
  15.         //桌面的便签只显示6条记录  
  16.         desk_text = new String[6];  
  17.         while(cursor.moveToNext()){  
  18.             if(desk_num == 6){  
  19.                 break;  
  20.             }  
  21.             String temp_text = cursor.getString(cursor.getColumnIndex("mtext"));  
  22.             //控制每条记录显示的长度  
  23.             if(temp_text.length()>7){  
  24.                 temp_text=temp_text.substring(0, 7)+"...";  
  25.             }  
  26.             desk_text[desk_num]=temp_text;  
  27.             System.out.println("desk_text[desk_num]"+desk_text[desk_num]);  
  28.             desk_num++;           
  29.         }  
  30.         db.close();  
  31.         final int Num = appWidgetIds.length;  
  32.         for (int i = 0; i < Num; i++) {  
  33.             int[] mAppWidgetId = appWidgetIds;  
  34.             RemoteViews mRemoteViews = new RemoteViews(context.getPackageName(),  
  35.                     R.layout.widget);  
  36.             mRemoteViews.setTextViewText(R.id.desktop_text, array_to_string(desk_text));  
  37.   
  38.             Intent clickIntent = new Intent(context, NoteActivity.class);  
  39.             PendingIntent pdIntent = PendingIntent.getActivity(context, 0,  
  40.                     clickIntent, 0);  
  41.             mRemoteViews.setOnClickPendingIntent(R.id.widget_layout, pdIntent);  
  42.             appWidgetManager.updateAppWidget(mAppWidgetId, mRemoteViews);  
  43.         }  
  44.     }  
  45.     //onReceive方法用来接收广播,以便更新桌面的便签  
  46.       
  47.     @Override  
  48.     public void onReceive(Context context, Intent intent) {  
  49.         // TODO Auto-generated method stub  
  50.         super.onReceive(context, intent);  
  51.         if(intent.getAction().equals("com.ideal.note.widget")){  
  52.             dbHelper = new DatabaseHelper(context, "ideal.sql");  
  53.         SQLiteDatabase db = dbHelper.getReadableDatabase();  
  54.         Cursor cursor = db.query("user", null, null, null, null, null, null);  
  55.         int desk_num=0;  
  56.         desk_text = new String[6];  
  57.         while(cursor.moveToNext()){  
  58.             if(desk_num == 6){  
  59.                 break;  
  60.             }  
  61.             String temp_text = cursor.getString(cursor.getColumnIndex("mtext"));  
  62.             if(temp_text.length()>7){  
  63.                 temp_text=temp_text.substring(0, 7)+"...";  
  64.             }  
  65.             desk_text[desk_num]=temp_text;  
  66.             System.out.println("desk_text[desk_num]"+desk_text[desk_num]);  
  67.             desk_num++;           
  68.         }  
  69.         db.close();  
  70.         }  
  71.         RemoteViews mRemoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);  
  72.         mRemoteViews.setTextViewText(R.id.desktop_text, array_to_string(desk_text));  
  73.         AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, AppWidget.class), mRemoteViews);         
  74.     }  
  75.       
  76.     //数组转化为字符显示  
  77.     public String array_to_string(String[] array){  
  78.         String temp_str = "";  
  79.         for(int i=0;i<array.length;i++){  
  80.             if(array[i]==null){  
  81.                 break;  
  82.             }else {  
  83.                 temp_str = temp_str+"\n* "+array[i];  
  84.             }  
  85.         }  
  86.         return  temp_str;  
  87.     }  
  88. }  

在其他修改了数据库数据的Activity或者其他地方发送一条广播来让AppWidget执行,如在NoteActivity.java中添加:

  1. Intent mWidgetIntent = new Intent();  
  2.                 mWidgetIntent.setAction("com.ideal.note.widget");  
  3.                 NoteActivity.this.sendBroadcast(mWidgetIntent);  

另,还需在AndroidManifest.xml中添加:

  1. <receiver android:name=".AppWidget">   
  2.             <intent-filter>  
  3.                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>  
  4.                 <action android:name="com.ideal.note.widget"/>  
  5.             </intent-filter>  
  6.             <meta-data  android:name="android.appwidget.provider"  
  7.             android:resource="@xml/appwidget_info"/>   
  8.         </receiver>  

附源码下载地址:http://download.csdn.net/detail/moruna/7969393


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多