基于android原生联系人app实现新建联系人时添加生日字段,并且插入日历提醒

联系人字段有Name,Photo,Email,Event等类型,联系人app支持新建联系人时根据这些类型扩展新的字段,添加一个Event类型的字段就可以实现添加生日信息,Event类型的字段支持设置事件的名字和事件的时间,添加好后点击就会跳到日历中
实现见FallbackAccountType.java 里的addDataKindEvent。
添加好后会显示在联系人信息的最下面,如果想显示在上面可以修改QuickContactActivity.java里的LEADING_MIMETYPES添加Event.CONTENT_ITEM_TYPE,生日信息就会和电话显示在一起。
点击生日信息会跳转到日历中,但不会在日历中插入提醒事件,如果想在生日时收到提醒通知,可以在保存联系人时插入提醒到日历
数据库中,代码在ContactSaveService.java里的updateBirthdayNotify,用日历数据库中的hasExtendedProperties字段存储这个提醒对应的联系人id,在更新联系人时更新对应的日历提醒

patch如下:

diff --git a/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml b/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml
index 2c5b382..1499a2a 100644
--- a/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml
+++ b/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml
@@ -53,6 +53,7 @@
     <uses-permission android:name="android.permission.READ_CALL_LOG"/>
     <uses-permission android:name="android.permission.READ_SMS"/>
     <uses-permission android:name="android.permission.READ_CALENDAR"/>
+    <uses-permission android:name="android.permission.WRITE_CALENDAR"/>
     <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL"/>
     <!-- Following used for Contact metadata syncing -->
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
diff --git a/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java b/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java
index 9b8d5a5..032e9a0 100644
--- a/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java
+++ b/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java
@@ -44,8 +44,10 @@ import android.os.Looper;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.SystemProperties;
+import android.provider.CalendarContract;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.AggregationExceptions;
+import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.Contacts;
@@ -72,10 +74,12 @@ import com.android.contacts.model.CPOWrapper;
 import com.android.contacts.model.RawContactDelta;
 import com.android.contacts.model.RawContactDeltaList;
 import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
 import com.android.contacts.model.account.AccountWithDataSet;
 import com.android.contacts.preference.ContactsPreferences;
 import com.android.contacts.util.ContactDisplayUtils;
 import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.DateUtils;
 import com.android.contacts.util.PermissionsUtil;
 import com.android.contactsbind.FeedbackHelper;
 
@@ -86,7 +90,9 @@ import com.mediatek.contacts.ContactSaveServiceEx;
 import com.mediatek.contacts.util.Log;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Collection;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -557,6 +563,84 @@ public class ContactSaveService extends IntentService {
         }
         return serviceIntent;
     }
+    
+    // fangao cyj add for contact birthday start
+    private void updatecalendar(final long rawContactId, String datestr, String title) {
+        long date = 0;
+        boolean everyYear = false;
+        if (datestr != null) {
+            everyYear = datestr.startsWith("--");
+            final Calendar cal = DateUtils.parseDate(datestr, false);
+            if (cal != null) {
+                final Date nextAnniversary = DateUtils.getNextAnnualDate(cal);
+                date = nextAnniversary.getTime();
+            }
+        }
+        long hasExtendedProperties = rawContactId + 100;
+        Intent i = new Intent("fangao.intent.action.BIRTHDAY_NOTIFY");
+        i.setPackage("com.android.providers.calendar");
+        i.putExtra("contactId", hasExtendedProperties);
+        i.putExtra("date", date);
+        i.putExtra("title", title);
+        i.putExtra("everyYear", everyYear);
+        sendBroadcast(i);
+    }
+    

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值