根据联系人获得即将来临的生日

本文介绍了一种方法,用于从Android设备中批量获取联系人的生日信息,并按日期范围筛选出即将来临的生日。通过查询ContactsContract API,可以精确地获取到指定日期范围内的联系人生日。

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

private static final int UPCOMING_COUNT = 10; 
 
 
public static List<BContact> upcomingBirthday(Context ctx) { 
   
String today = new SimpleDateFormat("MM-dd").format(new Date());         
   
List<BContact> firstPart = upcomingBirthday(ctx, today, "12-31", UPCOMING_COUNT); 
   
if (firstPart.size() < UPCOMING_COUNT) { 
        firstPart
.addAll(upcomingBirthday(ctx, "01-01", today, UPCOMING_COUNT - firstPart.size())); 
   
} 
   
return firstPart; 
} 
 
 
public static List<BContact> upcomingBirthday(Context ctx, String fromDate, String toDate, int rows) { 
 
 
Uri dataUri = ContactsContract.Data.CONTENT_URI; 
 
 
String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME,                          
           
ContactsContract.CommonDataKinds.Event.CONTACT_ID, 
           
ContactsContract.CommonDataKinds.Event.START_DATE 
           
}; 
 
 
 
Cursor c = ctx.getContentResolver().query( 
       dataUri
, 
       projection
,  
       
ContactsContract.Data.MIMETYPE + "= ? AND " +  
       
ContactsContract.CommonDataKinds.Event.TYPE + "=" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY +  
       
" AND substr(" + ContactsContract.CommonDataKinds.Event.START_DATE + ",6) >= ?" +  
       
" AND substr(" + ContactsContract.CommonDataKinds.Event.START_DATE + ",6) <= ?" , 
       
new String[] {ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, fromDate, toDate},  
       
"substr("+ ContactsContract.CommonDataKinds.Event.START_DATE +",6)"); 
 
List<BContact> result = new ArrayList<BContact>(); 
 
int i=0; 
 
while (c.moveToNext() && i<rows) { 
      result
.add(new BContact(c.getString(0), c.getString(1), c.getString(2))); 
      i
++; 
 
} 
  c
.close(); 
 
return result; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值