MtkCalendar预置一条不可删除的活动

本文介绍如何通过修改Android系统的CalendarProvider,在默认日历中预置一条不可删除的活动,并详细阐述了利用NavicatPremium工具及adb命令进行数据库操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:在默认的日历中预置一条不可删除的活动,并且设定其中的默认参数。

平台:80N

tools:NavicatPremium、adb 

解决方案:通过添加数据库的方式将活动预置到Calendar的数据库中

1.使用adb命令导出默认Calendar的默认数据库
    
2.使用Navicat Premium查看默认数据库并导出main表
    注:一条活动是有多个数据库语句插入到不同表实现的
  先导出默认main表,然后在手机中添加预置的活动,再同样的方式导出main表,与原来的表进行对比,这样的话可以获取所有的插 入语句
  
 3.在CalendarDatabaseHelper.java

修改路径:packages/providers/CalendarProvider/src/com/android/providers/calendar/CalendarDatabaseHelper.java

导包:
        // add 20180113 Calendar Event
           import java.io.BufferedReader;
           import java.io.IOException;
           import java.io.InputStream;
           import java.io.InputStreamReader;
           import java.io.OutputStream;
       // end    

    添加方法:readRaw(int index)
    // add 20180113 Calendar Event
	public String readRaw(int index){
		try {
			//获取文件中的内容
			InputStream inputStream=mContext.getResources().openRawResource(index);
			//将文件中的字节转换为字符
			InputStreamReader isReader=new InputStreamReader(inputStream,"UTF-8");
			//使用bufferReader去读取字符
			BufferedReader reader=new BufferedReader(isReader);
			String out="";
			try {
				while((out=reader.readLine())!=null){
					Log.d("lds","======="+out);
					return out;
				}
			   } catch (IOException e) {	
				   e.printStackTrace();
				   return "";
			   }
		   } catch (UnsupportedEncodingException e) {
		         	e.printStackTrace();
			   return "";
		   }
		   return "";
       }
       //end
        
        插入数据库:
        在onCreate方法中进行插入数据库操作:
         public void onCreate(SQLiteDatabase db) {
           bootstrapDB(db);
		// add liudongsheng 20180113 Calendar Event
		db.execSQL(readRaw(R.raw.sql0));
		db.execSQL(readRaw(R.raw.sql1));
		db.execSQL(readRaw(R.raw.sql2));
		db.execSQL(readRaw(R.raw.sql3));
		// end
           }
在onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法中也进行数据库插入操作

// add 20180113 Calendar Event
		db.execSQL(readRaw(R.raw.sql0));
		db.execSQL(readRaw(R.raw.sql1));
		db.execSQL(readRaw(R.raw.sql2));
		db.execSQL(readRaw(R.raw.sql3));
		// end
        long endWhen = System.nanoTime();
        Log.d(TAG, "Calendar upgrade took " + ((endWhen - startWhen) / 1000000) + "ms");
由于数据语句过长为了方便放到资源文件中,然后用readRaw方法读取资源文件:
         资源文件路径:packages/providers/CalendarProvider/res/raw/
         改文件下的数据库语句是通过Navicat Premium工具获取的
如果是调试版本进行push测试该方法修改是否有效需要修改该文件中的版本,要不可能会无效

// Bump this to the next hundred at each major release.
    static final int DATABASE_VERSION = 606;
 该需求添加的活动需要插入四个数据库
          资源文件路径:packages/providers/CalendarProvider/res/raw/

预置为不可删除:
 路径:vendor/mediatek/proprietary/packages/apps/Calendar/src/com/android/calendar/EventInfoFragment.java
 
         final int itemId = item.getItemId();
+               Log.d("log_calendar","mEventId = " + mEventId);//打印出预置的那条活动的ID
         if (itemId == android.R.id.home) {
             Utils.returnToCalendarHome(mContext);
             mActivity.finish();
@@ -1968,10 +1969,16 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange
         MenuItem edit = mMenu.findItem(R.id.info_action_edit);
         MenuItem changeColor = mMenu.findItem(R.id.info_action_change_color);
         if (delete != null) {
+                       if(mEventId == 8){
+                               mCanModifyCalendar=false;//根据ID隐藏掉删除选项
+                       }
             delete.setVisible(mCanModifyCalendar);
             delete.setEnabled(mCanModifyCalendar);
         }
         if (edit != null) {
+                       if(mEventId == 8){
+                               mCanModifyEvent=false;//根据ID隐藏掉删除选项
+                       }
             edit.setVisible(mCanModifyEvent);
             edit.setEnabled(mCanModifyEvent);
         }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧时旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值