android开发笔记 下载本文

实现直接拒接来电

经过简单的google/baidu后,发现android没有现成的API去拒接电话。android可以通过注册BroadcastReceiver截取短信,因为这个broadcast是一个ordered broadcast,所以只要优先级比短信接收程序高,就可以提前终止掉这个broadcast receiver。

但是,电话呼入则没有类似的机制。不过,综合网上的一些资料,通过以下大体的步骤,则可以实现拒接电话:

1、注册broadcast receiver,监视手机状态: Java代码

1. 2.

3. 4. 5.

android:name=\ 当手机接收到电话时,则会触发该broadcast receiver。

2、最重要的,就是取得可以控制电话的API。这些API貌似是android内部的接口,并未暴露。具体方式参见该帖子:http://topic.csdn.net/u/20091226 ... d-586a278875c0.html

使用时需要手动添加import: Java代码

1. import com.android.internal.telephony.ITelephony;

import com.android.internal.telephony.ITelephony;

同样的方式,在stackoverflow上也有人大致地提了下:http://stackoverflow.com/questio ...

ck-calls-in-android

值得注意的是,使用这种方式拒接来电,broadcast receiver会被触发两次。第一次是收到来电,第二次则是由于调用endCall拒接了后触发。我们在处理自己的程序逻辑时,可以通过ITelephony.getCallState来区分。该函数返回1表示来电,0表示拒接来电。

最后,这个方法有时候依然会出现系统接听电话的界面,并且,通话记录里也会有拒接电话的记录。这个原因大概也是系统底层在处理这块逻辑时,系统逻辑和通知broadcast receiver的存在先后顺序。这篇文章中分析了部分源码,也算是提个醒:

http://blog.wangling.me/2009/08/why-it-is-impossible-to-intercept-incoming-calls-on-android/

[经验分享] 获取联系人信息和删除联系人

1. /**

2. * 根据提供的ID删除数据库中相对应的项 3. * @param id 4. * @param listId 5. */ 6.

public void delete(String id) { 7. if(id.equals(\) || id == null){ 8. return ; 9. } 10. Uri uri

= ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, Integer.parseInt(id));

11. Uri.Builder b = uri.buildUpon();

12. b.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTE

R,\);

13. uri = b.build();

14. getContentResolver().delete(uri, null, null); 15. } 16.

17.

private ArrayList getContactCompany(String contactId){ 18. // 获取该联系人组织

19. ArrayList companyArrayList = new ArrayList(); 20. Cursor organizationCursor =

getContentResolver().query(Uri.parse(\\),

21. new String[] { \, \, \ }, 22. \ 23. + contactId 24. + \ 25. +

\, 26. null, null); 27. String idd=contactId;

28. int count = organizationCursor.getCount(); 29. if (organizationCursor.getCount() != 0) { 30. if (organizationCursor.moveToNext()) { 31. String company =

organizationCursor.getString(organizationCursor.getColumnIndex(Organization.COMPANY)); 32. String title =

organizationCursor.getString(organizationCursor.getColumnIndex(Organization.TITLE));

33. companyArrayList.add(company); 34. companyArrayList.add(title); 35. } 36. }

37. return companyArrayList; 38. 39. } 40.

41. ** 获取联系人头像 42. *

43. * @param id 用户ID 44. * @return