CallActivity.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. package me.yoqi.mobile.safe;
  2. import java.util.ArrayList;
  3. import android.app.AlertDialog;
  4. import android.app.TabActivity;
  5. import android.content.BroadcastReceiver;
  6. import android.content.ContentProviderOperation;
  7. import android.content.ContentValues;
  8. import android.content.Context;
  9. import android.content.DialogInterface;
  10. import android.content.DialogInterface.OnClickListener;
  11. import android.content.Intent;
  12. import android.content.IntentFilter;
  13. import android.content.OperationApplicationException;
  14. import android.database.Cursor;
  15. import android.net.Uri;
  16. import android.os.Bundle;
  17. import android.os.RemoteException;
  18. import android.provider.Contacts.Phones;
  19. import android.provider.ContactsContract;
  20. import android.provider.ContactsContract.CommonDataKinds.Phone;
  21. import android.provider.ContactsContract.CommonDataKinds.StructuredName;
  22. import android.provider.ContactsContract.Data;
  23. import android.provider.ContactsContract.RawContacts;
  24. import android.view.LayoutInflater;
  25. import android.view.Menu;
  26. import android.view.MenuItem;
  27. import android.view.View;
  28. import android.widget.ArrayAdapter;
  29. import android.widget.Button;
  30. import android.widget.EditText;
  31. import android.widget.LinearLayout;
  32. import android.widget.ListView;
  33. import android.widget.RelativeLayout;
  34. import android.widget.TabHost;
  35. import android.widget.TabHost.OnTabChangeListener;
  36. import android.widget.Toast;
  37. import me.yoqi.mobile.db.DbAdapter;
  38. import me.yoqi.mobile.info.Call_Forbid_Info;
  39. import me.yoqi.mobile.tool.BroadCastTool;
  40. public class CallActivity extends TabActivity implements OnTabChangeListener {
  41. private me.yoqi.mobile.db.DbAdapter mDbAdapter;
  42. private Cursor mCursorTab1;
  43. private Cursor mCursorTab2;
  44. private ListView mListViewTab1;
  45. private ListView mListViewTab2;
  46. private static final int MENU_RUBBISH_BACK = Menu.FIRST;
  47. private static final int MENU_RUBBISH_REPLY = Menu.FIRST+1;
  48. private static final int MENU_RUBBISH_CALL = Menu.FIRST+2;
  49. private static final int MENU_RUBBISH_DELETE = Menu.FIRST+3;
  50. private static final int MENU_RUBBISH_CLEAR = Menu.FIRST+4;
  51. private static final int MENU_FORBID_REPLY = Menu.FIRST+5;
  52. private static final int MENU_FORBID_CALL = Menu.FIRST+6;
  53. private static final int MENU_FORBID_DELETE = Menu.FIRST+7;
  54. private static final int MENU_FORBID_CLEAR = Menu.FIRST+8;
  55. private static final int MENU_FORBID_ADD = Menu.FIRST+9;
  56. private static final int MENU_FORBID_ADD_FIRST = Menu.FIRST+10;
  57. @Override
  58. protected void onCreate(Bundle savedInstanceState) {
  59. super.onCreate(savedInstanceState);
  60. setContentView(R.layout.tabhost_public);
  61. initFindViewById();
  62. TabHost mTabHost=getTabHost();
  63. mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("拦截记录",getResources().getDrawable(R.drawable.tab_icon_1)).setContent(R.id.tabhost_public_listview));
  64. mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("黑名单",getResources().getDrawable(R.drawable.tab_icon_2)).setContent(R.id.tabhost_public_listview_tab2));
  65. mTabHost.setOnTabChangedListener(this);
  66. mTabHost.setCurrentTab(0);
  67. mDbAdapter = new DbAdapter(CallActivity.this);
  68. mDbAdapter.open();
  69. initTab1Data();
  70. }
  71. private MyBroadCastReceiver mMBCR;
  72. private IntentFilter mIF;
  73. @Override
  74. protected void onResume(){
  75. super.onResume();
  76. mIF = new IntentFilter();
  77. mIF.addAction(BroadCastTool.CALL_RECEIVED_ACTION);
  78. mMBCR = new MyBroadCastReceiver();
  79. this.registerReceiver(mMBCR, mIF);
  80. }
  81. @Override
  82. protected void onDestroy(){
  83. super.onDestroy();
  84. this.unregisterReceiver(mMBCR);
  85. mDbAdapter.close();
  86. }
  87. /** 打電話*/
  88. Intent mIntent;
  89. private void actionCALL(int position, Cursor c,String column){
  90. c.moveToPosition(position);
  91. Uri uri = Uri.parse("tel:"+c.getString(c.getColumnIndex(column)));
  92. mIntent = new Intent(Intent.ACTION_CALL, uri);
  93. startActivity(mIntent);
  94. }
  95. /**發短信 */
  96. private void actionSMS(int position, Cursor c,String column){
  97. c.moveToPosition(position);
  98. mIntent = new Intent(Intent.ACTION_VIEW);
  99. mIntent.putExtra("address", c.getString(c.getColumnIndex(column)));
  100. mIntent.setType("vnd.android-dir/mms-sms");
  101. startActivity(mIntent);
  102. }
  103. /** 刪除標記*/
  104. private void delMarkItemData(ListView lv,Cursor c,String table){
  105. int mContant = lv.getCount();
  106. for(int i=0;i!=mContant;i++){
  107. if(lv.getCheckedItemPositions().get(i)){
  108. c.moveToPosition(i);
  109. long rowId = c.getLong(c.getColumnIndex(DbAdapter.TABLE_ID));
  110. mDbAdapter.getDel(rowId, table);
  111. }
  112. }
  113. }
  114. private String getPhoneNumber(int position,Cursor c){
  115. c.moveToPosition(position);
  116. return c.getString(c.getColumnIndex(DbAdapter.CALL_RECORD_PHONE));
  117. }
  118. EditText mCallName;
  119. EditText mCallNumber;
  120. private void addContact(String phone){
  121. LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  122. LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.set_call_record_name, null);
  123. mCallName = (EditText)mLL.findViewById(R.id.EditText01);
  124. mCallNumber = (EditText)mLL.findViewById(R.id.EditText02);
  125. mCallNumber.setText(phone);
  126. new AlertDialog.Builder(this).setTitle("加入联系人").
  127. setView(mLL).
  128. setPositiveButton("确定", new OnClickListener() {
  129. @Override
  130. public void onClick(DialogInterface dialog, int which) {
  131. if(mCallName.getText().toString().length() != 0&&mCallNumber.getText().toString().length() != 0){
  132. ContentValues cv = new ContentValues();
  133. ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
  134. ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
  135. builder.withValues(cv);
  136. operationList.add(builder.build());
  137. builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
  138. builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
  139. builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
  140. builder.withValue(StructuredName.DISPLAY_NAME, mCallName.getText().toString());
  141. operationList.add(builder.build());
  142. builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
  143. builder.withValueBackReference(Phone.RAW_CONTACT_ID, 0);
  144. builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
  145. builder.withValue(Phone.NUMBER, mCallNumber.getText().toString());
  146. builder.withValue(Data.IS_PRIMARY, 1);
  147. operationList.add(builder.build());
  148. try {
  149. getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
  150. } catch (RemoteException e) {
  151. e.printStackTrace();
  152. } catch (OperationApplicationException e) {
  153. e.printStackTrace();
  154. }
  155. Toast.makeText(getApplicationContext(), "成功添加!", Toast.LENGTH_SHORT).show();
  156. }else{
  157. Toast.makeText(getApplicationContext(), "姓名或号码不能为空!", Toast.LENGTH_SHORT).show();
  158. addContact(mCallNumber.getText().toString());
  159. }
  160. }
  161. }).setNegativeButton("取消", null).create().show();
  162. }
  163. /** 多选时打电话只拨打第一个被选中的号码,发短信给第一个被选中的号码发送*/
  164. private void callMethod(ListView lv,String sms_call,Cursor c,String column,String addContact){
  165. if(lv.getCheckedItemPositions().size() >= 1){
  166. for(int i=0;i!=lv.getCount();i++){
  167. if(lv.getCheckedItemPositions().get(i)){
  168. c.moveToPosition(i);
  169. String phone = c.getString(c.getColumnIndex(column));
  170. if(sms_call.equals("sms")){
  171. if("addContact".equals(addContact)){
  172. addContact(phone);
  173. }else{
  174. mIntent = new Intent(Intent.ACTION_VIEW);
  175. mIntent.putExtra("address", phone);
  176. mIntent.setType("vnd.android-dir/mms-sms");
  177. startActivity(mIntent);
  178. }
  179. }else if(sms_call.equals("call")){
  180. if("addContact".equals(addContact)){
  181. addContact(phone);
  182. }else{
  183. Uri uri = Uri.parse("tel:"+phone);
  184. mIntent = new Intent(Intent.ACTION_DIAL, uri);
  185. startActivity(mIntent);
  186. }
  187. }
  188. break;
  189. }
  190. }
  191. }
  192. }
  193. /**-------------------------------初始化基本组件--------------------------------------------------------------------------------------------------*/
  194. private void initFindViewById(){
  195. mListViewTab1 = (ListView)findViewById(R.id.tabhost_public_listview);
  196. mListViewTab2 = (ListView)findViewById(R.id.tabhost_public_listview_tab2);
  197. }
  198. /**-------------------------------点击不同标签时的事件监听 ----------------------------------------------------------------------------------*/
  199. private boolean isCheckedTab1OrTab2 = false;
  200. public void onTabChanged(String tabId) {
  201. if("tab1".equals(tabId)){
  202. isCheckedTab1OrTab2 = false;
  203. initTab1Data();
  204. }else if("tab2".equals(tabId)){
  205. isCheckedTab1OrTab2 = true;
  206. initTab2Data();
  207. }
  208. }
  209. private int i = 0;
  210. /**---------------------------------------------从数据库中获得并加载垃圾短信数据Start-------------------------------------------------*/
  211. private void initTab1Data(){
  212. mCursorTab1=mDbAdapter.getAll(DbAdapter.CALL_RECORD_TABLE_NAME) ;
  213. this.stopManagingCursor(mCursorTab1);
  214. i = 0;
  215. int mCount = mCursorTab1.getCount();
  216. if(mCount >= 0){
  217. mArray = new String[mCount];
  218. if(mCursorTab1.moveToFirst()){
  219. do{
  220. mArray[i] = "垃圾号码:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.CALL_RECORD_PHONE))+"\n"+
  221. "来电时间:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.CALL_RECORD_TIME));
  222. i++;
  223. }while(mCursorTab1.moveToNext());
  224. }
  225. ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(CallActivity.this,android.R.layout.simple_list_item_checked,mArray);
  226. mListViewTab1.setAdapter(mAdapter);
  227. mListViewTab1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
  228. }
  229. }
  230. String[] mArray;
  231. private void initTab2Data(){
  232. mCursorTab2 = mDbAdapter.getAll(DbAdapter.CALL_FORBID_TABLE_NAME);
  233. this.startManagingCursor(mCursorTab2);
  234. i = 0;
  235. int mCount = mCursorTab2.getCount();
  236. if(mCount >= 0){
  237. mArray = new String[mCount];
  238. if(mCursorTab2.moveToFirst()){
  239. do{
  240. mArray[i] = mCursorTab2.getString(mCursorTab2.getColumnIndex(DbAdapter.CALL_FORBID_PHONE));
  241. i++;
  242. }while(mCursorTab2.moveToNext());
  243. }
  244. ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(CallActivity.this,android.R.layout.simple_list_item_checked,mArray);
  245. mListViewTab2.setAdapter(mAdapter);
  246. mListViewTab2.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
  247. }
  248. }
  249. /*---------------------------------------------从数据库中获得并加载垃圾短信数据End----------------------------------------------------*/
  250. /*--------------------------------------------------------------------------------------关于动态菜单Begin---------------------------------------*/
  251. boolean isCreatePreparedOptionMenu1 = true;
  252. boolean isCreatePreparedOptionMenu2 = false;
  253. boolean isCreatePreparedOptionMenu3 = false;
  254. @Override
  255. public boolean onPrepareOptionsMenu(Menu menu) {
  256. if(isCheckedTab1OrTab2 == false){
  257. isCreatePreparedOptionMenu3 = false;
  258. if(mListViewTab1.getCount()>0){
  259. if(isCreatePreparedOptionMenu1){
  260. menu.add(0, MENU_RUBBISH_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
  261. menu.add(0, MENU_RUBBISH_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
  262. menu.add(0, MENU_RUBBISH_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
  263. menu.add(0, MENU_RUBBISH_CLEAR, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
  264. menu.add(0, MENU_RUBBISH_BACK, 0, "加入联系人").setIcon(android.R.drawable.ic_menu_add);
  265. isCreatePreparedOptionMenu1 = false;
  266. }
  267. }else{
  268. menu.removeItem(MENU_RUBBISH_BACK);
  269. menu.removeItem(MENU_RUBBISH_REPLY);
  270. menu.removeItem(MENU_RUBBISH_CALL);
  271. menu.removeItem(MENU_RUBBISH_DELETE);
  272. menu.removeItem(MENU_RUBBISH_CLEAR);
  273. isCreatePreparedOptionMenu1 = true;
  274. }
  275. }else{
  276. menu.removeItem(MENU_RUBBISH_BACK);
  277. menu.removeItem(MENU_RUBBISH_REPLY);
  278. menu.removeItem(MENU_RUBBISH_CALL);
  279. menu.removeItem(MENU_RUBBISH_DELETE);
  280. menu.removeItem(MENU_RUBBISH_CLEAR);
  281. isCreatePreparedOptionMenu1 = true;
  282. }
  283. if(isCheckedTab1OrTab2 == true){
  284. if(mListViewTab2.getCount()>0){
  285. if(!isCreatePreparedOptionMenu2){
  286. menu.add(0, MENU_FORBID_ADD, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
  287. menu.add(0, MENU_FORBID_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
  288. menu.add(0, MENU_FORBID_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
  289. menu.add(0, MENU_FORBID_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
  290. menu.add(0, MENU_FORBID_CLEAR, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
  291. isCreatePreparedOptionMenu2 = true;
  292. }
  293. menu.removeItem(MENU_FORBID_ADD_FIRST);
  294. isCreatePreparedOptionMenu3 = false;
  295. }else{
  296. if(!isCreatePreparedOptionMenu3){
  297. menu.add(0, MENU_FORBID_ADD_FIRST, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
  298. isCreatePreparedOptionMenu3 = true;
  299. }
  300. menu.removeItem(MENU_FORBID_REPLY);
  301. menu.removeItem(MENU_FORBID_CALL);
  302. menu.removeItem(MENU_FORBID_DELETE);
  303. menu.removeItem(MENU_FORBID_CLEAR);
  304. menu.removeItem(MENU_FORBID_ADD);
  305. isCreatePreparedOptionMenu2 = false;
  306. }
  307. }else{
  308. menu.removeItem(MENU_FORBID_REPLY);
  309. menu.removeItem(MENU_FORBID_CALL);
  310. menu.removeItem(MENU_FORBID_DELETE);
  311. menu.removeItem(MENU_FORBID_CLEAR);
  312. menu.removeItem(MENU_FORBID_ADD);
  313. menu.removeItem(MENU_FORBID_ADD_FIRST);
  314. isCreatePreparedOptionMenu2 = false;
  315. }
  316. return super.onPrepareOptionsMenu(menu);
  317. }
  318. @Override
  319. public boolean onOptionsItemSelected(MenuItem item) {
  320. int positionTab1 = mListViewTab1.getSelectedItemPosition();
  321. int positionTab2 = mListViewTab2.getSelectedItemPosition();
  322. switch(item.getItemId()){
  323. case MENU_RUBBISH_REPLY:
  324. if(positionTab1 != -1){
  325. actionSMS(positionTab1,mCursorTab1,DbAdapter.CALL_RECORD_PHONE);
  326. }else{
  327. callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.CALL_RECORD_PHONE,"");
  328. }
  329. break;
  330. case MENU_RUBBISH_CALL:
  331. if(positionTab1 != -1){
  332. actionCALL(positionTab1,mCursorTab1,DbAdapter.CALL_RECORD_PHONE);
  333. }else{
  334. callMethod(mListViewTab1,"call",mCursorTab1,DbAdapter.CALL_RECORD_PHONE,"");
  335. }
  336. break;
  337. case MENU_RUBBISH_DELETE:
  338. if(positionTab1 != -1){
  339. mCursorTab1.moveToPosition(positionTab1);
  340. long rowId = mCursorTab1.getLong(mCursorTab1.getColumnIndex(DbAdapter.TABLE_ID));
  341. mDbAdapter.getDel(rowId, DbAdapter.CALL_RECORD_TABLE_NAME);
  342. }else{
  343. delMarkItemData(mListViewTab1,mCursorTab1,DbAdapter.CALL_RECORD_TABLE_NAME);
  344. }
  345. initTab1Data();
  346. break;
  347. case MENU_RUBBISH_CLEAR:
  348. mDbAdapter.deleteTable(DbAdapter.CALL_RECORD_TABLE_NAME);
  349. initTab1Data();
  350. break;
  351. case MENU_RUBBISH_BACK:
  352. if(positionTab1 != -1){
  353. addContact(getPhoneNumber(positionTab1, mCursorTab1));
  354. }else{
  355. callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.CALL_RECORD_PHONE,"addContact");
  356. }
  357. break;
  358. case MENU_FORBID_ADD:
  359. case MENU_FORBID_ADD_FIRST:
  360. addForbidPhone();
  361. break;
  362. case MENU_FORBID_REPLY:
  363. if(positionTab2 != -1){
  364. actionSMS(positionTab2,mCursorTab2,DbAdapter.CALL_FORBID_PHONE);
  365. }else{
  366. callMethod(mListViewTab2,"sms",mCursorTab2,DbAdapter.CALL_FORBID_PHONE,"");
  367. }
  368. break;
  369. case MENU_FORBID_CALL:
  370. if(positionTab2 != -1){
  371. actionCALL(positionTab2,mCursorTab2,DbAdapter.CALL_FORBID_PHONE);
  372. }else{
  373. callMethod(mListViewTab2,"call",mCursorTab2,DbAdapter.CALL_FORBID_PHONE,"");
  374. }
  375. break;
  376. case MENU_FORBID_DELETE:
  377. if(positionTab2 != -1){
  378. mCursorTab2.moveToPosition(positionTab2);
  379. long rowId = mCursorTab2.getLong(mCursorTab2.getColumnIndex(DbAdapter.TABLE_ID));
  380. mDbAdapter.getDel(rowId, DbAdapter.CALL_FORBID_TABLE_NAME);
  381. }else{
  382. delMarkItemData(mListViewTab2,mCursorTab2,DbAdapter.CALL_FORBID_TABLE_NAME);
  383. }
  384. initTab2Data();
  385. break;
  386. case MENU_FORBID_CLEAR:
  387. mDbAdapter.deleteTable(DbAdapter.CALL_FORBID_TABLE_NAME);
  388. initTab2Data();
  389. break;
  390. }
  391. return super.onOptionsItemSelected(item);
  392. }
  393. /*--------------------------------------------------------------------------------------关于动态菜单End----------------------------------------------*/
  394. /*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器Begin------------------*/
  395. class MyBroadCastReceiver extends BroadcastReceiver{
  396. @Override
  397. public void onReceive(Context context, Intent intent) {
  398. if(intent.getAction().equals(BroadCastTool.CALL_RECEIVED_ACTION)){
  399. initTab1Data();
  400. }
  401. }
  402. }
  403. /*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器End---------------------*/
  404. /**---------------------------------------------------------------------------------------添加黑名单的Dialog-------------------------------------------*/
  405. EditText mForbidPhone ;
  406. private void addForbidPhone(){
  407. LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  408. RelativeLayout mRL = (RelativeLayout)mLI.inflate(R.layout.message_forbid_add, null);
  409. mForbidPhone = (EditText)mRL.findViewById(R.id.new_forbid_phone);
  410. Button mButton=(Button)mRL.findViewById(R.id.get_system_contact);
  411. mButton.setOnClickListener(new View.OnClickListener() {
  412. @Override
  413. public void onClick(View v) {
  414. showMulitAlertDialog();
  415. }
  416. });
  417. new AlertDialog.Builder(CallActivity.this).setTitle("添加黑名单").setView(mRL)
  418. .setPositiveButton("确定", new OnClickListener(){
  419. public void onClick(DialogInterface arg0, int arg1) {
  420. String mNewForbidPhone = mForbidPhone.getText().toString();
  421. if(mNewForbidPhone.length() < 3){
  422. Toast.makeText(CallActivity.this, "输入错误!", Toast.LENGTH_SHORT).show();
  423. }else{
  424. String mStr[] = mNewForbidPhone.split(";");
  425. for(int i = 0;i != mStr.length;i++){
  426. String phone = mStr[i].split(":").length == 1?mStr[i].split(":")[0]:mStr[i].split(":")[1];
  427. if(!(mDbAdapter.getPhone(phone, 4)).moveToFirst()){
  428. Call_Forbid_Info mCFI = new Call_Forbid_Info();
  429. mCFI.setCall_forbid_phone(phone);
  430. mDbAdapter.getAdd(mCFI);
  431. }else{
  432. Toast.makeText(CallActivity.this, "号码"+phone+"已存在!", Toast.LENGTH_SHORT).show();
  433. }
  434. }
  435. initTab2Data();
  436. Toast.makeText(CallActivity.this, "添加成功!", Toast.LENGTH_SHORT).show();
  437. }
  438. }
  439. }).setNegativeButton("取消", null).show();
  440. }
  441. private ListView mLV;
  442. @SuppressWarnings("deprecation")
  443. private void showMulitAlertDialog(){
  444. Cursor mCursor=getContentResolver().query(Phones.CONTENT_URI, new String[]{"_id","name","number"}, null, null, "number desc");
  445. startManagingCursor(mCursor);
  446. if(mCursor.moveToFirst()){
  447. int m = 0;
  448. String mContant[] = new String[mCursor.getCount()];
  449. do{
  450. String phoneNumber = mCursor.getString(mCursor.getColumnIndex(Phones.NUMBER));
  451. mContant[m] = mCursor.getString(mCursor.getColumnIndex(Phones.NAME))+":"+(phoneNumber.length() == 13?phoneNumber.substring(2):phoneNumber);
  452. m++;
  453. }while(mCursor.moveToNext());
  454. initListData(mContant);
  455. }
  456. }
  457. String checkInfo;
  458. private void initListData(final String[] contant){
  459. AlertDialog mAlertDialog=new AlertDialog.Builder(this).setMultiChoiceItems(contant,
  460. new boolean[contant.length],
  461. new DialogInterface.OnMultiChoiceClickListener() {
  462. @Override
  463. public void onClick(DialogInterface dialog, int which, boolean isChecked) {
  464. }
  465. }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
  466. @Override
  467. public void onClick(DialogInterface dialog, int which) {
  468. checkInfo = "";
  469. for(int i=0;i!=contant.length;i++){
  470. if(mLV.getCheckedItemPositions().get(i)){
  471. checkInfo += mLV.getAdapter().getItem(i).toString()+";";
  472. }
  473. }
  474. mForbidPhone.setText(checkInfo.substring(0, checkInfo.length()));
  475. }
  476. }).setNegativeButton("取消", null).create();
  477. mLV=mAlertDialog.getListView();
  478. mAlertDialog.show();
  479. }
  480. }