Android6.0当新建的联系人名字已经存在时,需要弹出提示框:(...)点击yes后,仍然可以保存,点击no则取消

本文介绍了一个Android应用中处理联系人重复保存的功能实现。通过查询数据库检查联系人是否存在,如果存在则弹出对话框询问用户是否继续保存,否则直接保存联系人。

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

平台下 packages/apps/Contacts/ 里面

/src/com/android/contacts/editor/ContactEditorBaseFragment.java 中

import android.widget.LinearLayout;
 import android.widget.ListPopupWindow;
 import android.widget.Toast;
-
+import android.content.DialogInterface;
+import android.app.AlertDialog;
+import android.view.WindowManager;
 import com.mediatek.contacts.ExtensionManager;
 import com.mediatek.contacts.editor.ContactEditorUtilsEx;
 import com.mediatek.contacts.editor.SubscriberAccount;
@@ -148,9 +150,9 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
     private static final String KEY_NEED_QUIT_EDIT = "isQuitEdit";
     private static final String KEY_SIM_DATA = "simData";
     private static final String KEY_OLD_SIM_DATA = "oldsimData";
-
+    private AlertDialog mSmileyDialog;
     private static final String KEY_ENABLED = "enabled";
-
+    private boolean mIsSave = false;
     // Aggregation PopupWindow
     private static final String KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID =
             "aggregationSuggestionsRawContactId";
@@ -894,8 +896,49 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.menu_save:
-                Log.d(TAG, "[onOptionsItemSelected]save");
-                return save(SaveMode.CLOSE, /* backPressed =*/ true);
+                String name = "";
+                for (int n = 0; n < mState.size(); n++) { 
+                    RawContactDelta field = mState.get(n);
+                    ArrayList<ValuesDelta> dataname = field.getMimeEntries("vnd.android.cursor.item/name");
+                    if(dataname != null){
+                        for (int m = 0; m < dataname.size(); m++) { 
+                            name = dataname.get(m).getAsString("data1");
+                            Log.i("rmy", "name = "+name);
+                        }
+                    }
+                }              
+
+                String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER };
+                final Cursor cursor = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projection,ContactsContract.Contacts.DISPLAY_NAME + " = '"+name+"'", null, null);
+                Log.i("rmy", "cursor.getCount()="+cursor.getCount());
+                if(cursor.getCount() != 0){
+                    new AlertDialog.Builder(mContext)
+                        .setCancelable(false)
+                        .setTitle(R.string.contacts_repeat_save_dialog_title)
+                        .setMessage(R.string.contacts_repeat_save_dialog_message)
+                        .setPositiveButton("yes", new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int which) {
+                                Log.i("rmy", "true");
+                                Log.i("rmy", "IsSave()="+IsSave());
+                                mIsSave = IsSave();
+                                //public boolean save(int saveMode, boolean backPressed) {
+                                //}
+                                dialog.dismiss();
+                                cursor.close();
+                            }
+                        })
+                        .setNegativeButton("no", new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int which) {
+                                Log.i("rmy", "false");
+                                dialog.dismiss();
+                                cursor.close();
+                            }
+                        })
+                        .show();
+                }else if(cursor.getCount() == 0){
+                    mIsSave = IsSave();
+                }
+                return mIsSave;
             case R.id.menu_discard:
                 return revert();
             case R.id.menu_delete:
@@ -924,6 +967,10 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
         return false;
     }
 
+    public boolean IsSave() {
+        return save(SaveMode.CLOSE, /* backPressed =*/ true);
+    }
+
     @Override
     public boolean revert() {
         Log.d(TAG, "[revert]");


在配置一下 xml 文件
/res/values/strings.xml

<!-- Quick contact display name with phonetic name -->
     <string name="quick_contact_display_name_with_phonetic"><xliff:g id="display_name">%s</xliff:g> (<xliff:g id="phonetic_name">%s</xliff:g>)</string>
+
+    <string name="contacts_repeat_save_dialog_title">Prompt</string>
+    <string name="contacts_repeat_save_dialog_message">The contact already exists, continue saving?</string>
 </resources>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值