手机黑名单拦截,为什么我的黑名单没有电话号码显示

食源客 2013-11-20 12:25:30
如题,在获取联系人数据后,显示黑名单时,黑名单不显示


[html] view plaincopyprint?
1. <uses-permission android:name="android.permission.CALL_PHONE"/>
2. <!-- 授予读联系人ContentProvider的权限 -->
3. <uses-permission android:name="android.permission.READ_CONTACTS"/>
4. <!-- 授予写联系人ContentProvider的权限 -->
5. <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
6. <!-- 添加访问手机状态的权限 -->
7. <uses-permission android:name="android.permission.READ_PHONE_STATE" />



[java] view plaincopyprint?
1. package WangLi.Service.BlockList;
2.
3. import java.lang.reflect.Method;
4. import java.util.ArrayList;
5.
6. import com.android.internal.telephony.ITelephony;
7.
8. import android.app.Activity;
9. import android.app.AlertDialog;
10. import android.content.DialogInterface;
11. import android.database.Cursor;
12. import android.os.Bundle;
13. import android.os.IBinder;
14. import android.provider.ContactsContract;
15. import android.telephony.PhoneStateListener;
16. import android.telephony.TelephonyManager;
17. import android.view.View;
18. import android.view.View.OnClickListener;
19. import android.view.ViewGroup;
20. import android.widget.BaseAdapter;
21. import android.widget.CheckBox;
22. import android.widget.ListView;
23.
24. public class BlockList extends Activity {
25. // 记录黑名单的List
26. ArrayList<String> blockList = new ArrayList<String>();
27. TelephonyManager tManager;
28. // 监听通话状态的监听器
29. CustomPhoneCallListener cpListener;
30.
31. public class CustomPhoneCallListener extends PhoneStateListener {
32. @Override
33. public void onCallStateChanged(int state, String incomingNumber) {
34. switch (state) {
35. case TelephonyManager.CALL_STATE_IDLE:
36. break;
37. case TelephonyManager.CALL_STATE_OFFHOOK:
38. break;
39. // 当电话呼入时
40. case TelephonyManager.CALL_STATE_RINGING:
41. // 如果该号码属于黑名单
42. if (isBlock(incomingNumber)) {
43. try {
44. Method method = Class.forName(
45. "android.os.ServiceManager").getMethod(
46. "getService", String.class);
47. // 获取远程TELEPHONY_SERVICE的IBinder对象的代理
48. IBinder binder = (IBinder) method.invoke(null,
49. new Object[] { TELEPHONY_SERVICE });
50. // 将IBinder对象的代理转换为ITelephony对象
51. ITelephony telephony = ITelephony.Stub
52. .asInterface(binder);
53. // 挂断电话
54. telephony.endCall();
55. } catch (Exception e) {
56. e.printStackTrace();
57. }
58. }
59. break;
60. }
61. super.onCallStateChanged(state, incomingNumber);
62. }
63. }
64.
65. @Override
66. public void onCreate(Bundle savedInstanceState) {
67. super.onCreate(savedInstanceState);
68. setContentView(R.layout.main);
69. // 获取系统的TelephonyManager管理器
70. tManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
71. cpListener = new CustomPhoneCallListener();
72. // 通过TelephonyManager监听通话状态的改变
73. tManager.listen(cpListener, PhoneStateListener.LISTEN_CALL_STATE);
74. // 获取程序的按钮,并为它的单击事件绑定监听器
75. findViewById(R.id.managerBlock).setOnClickListener(
76. new OnClickListener() {
77. @Override
78. public void onClick(View v) {
79. // 查询联系人的电话号码
80. final Cursor cursor = getContentResolver()
81. .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
82. null, null, null, null);
83. BaseAdapter adapter = new BaseAdapter() {
84. @Override
85. public int getCount() {
86. return cursor.getCount();
87. }
88.
89. @Override
90. public Object getItem(int position) {
91. return position;
92. }
93.
94. @Override
95. public long getItemId(int position) {
96. return position;
97. }
98.
99. @Override
100. public View getView(int position, View convertView,
101. ViewGroup parent) {
102. cursor.moveToPosition(position);
103. CheckBox rb = new CheckBox(BlockList.this);
104. // 获取联系人的电话号码,并去掉中间的中划线
105. String number = cursor
106. .getString(
107. cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
108. .replace("-", "");
109. rb.setText(number);
110. // 如果该号码已经被加入黑名单、默认勾选该号码
111. if (isBlock(number)) {
112. rb.setChecked(true);
113. }
114. return rb;
115. }
116. };
117. // 加载list.xml布局文件对应的View
118. View selectView = getLayoutInflater().inflate(
119. R.layout.list, null);
120. // 获取selectView中的名为list的ListView组件
121. final ListView listView = (ListView) selectView
122. .findViewById(R.id.list);
123. listView.setAdapter(adapter);
124. new AlertDialog.Builder(BlockList.this)
125. .setView(selectView)
126. .setPositiveButton("确定",
127. new DialogInterface.OnClickListener() {
128. @Override
129. public void onClick(
130. DialogInterface dialog,
131. int which) {
132. // 清空blockList集合
133. blockList.clear();
134. // 遍历listView组件的每个列表项
135. for (int i = 0; i < listView
136. .getCount(); i++) {
137. CheckBox checkBox =(CheckBox)listView
138. .getChildAt(i);
139. // 如果该列表项被勾选
140. if (checkBox.isChecked()) {
141. // 添加该列表项的电话号码
142. blockList.add(checkBox
143. .getText()
144. .toString());
145. }
146. }
147. System.out.println(blockList);
148. }
149. }).show();
150. }
151. });
152. }
153.
154. // 判断某个电话号码是否在黑名单之内
155. public boolean isBlock(String phone) {
156. for (String s1 : blockList) {
157. if (s1.equals(phone)) {
158. return true;
159. }
160. }
161. return false;
162. }
163. }




...全文
548 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,475

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧