簡體   English   中英

Nexus 4撥號器-創建不帶電話號碼的聯系人

[英]Nexus 4 dialer - Creating contact without phone number

我正在嘗試以編程方式創建沒有電話號碼的聯系人。 我設法創建了它,但是當我打開撥號器時它崩潰了。 如果我打開聯系人就可以了。

另外,如果我手動添加沒有電話號碼的聯系人,則可以正常進行。

我正在使用Nexus 4-KitKat 4.4.2。

這是我使用的代碼:

/**
   * Add new contact to contacts list and contacts DB.
   * @param contact
   * @param ContactKey
   * @param ctx
   */
   public void addContact(Retrievable contact,String name,String ContactKey ,final Activity ctx){
          initializeDB(ctx);

          if(Groupid== null)
                 Groupid = getGroupId(ctx);
          ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
          ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build());
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
                .build());

      //need to check because if is null it crash dialer in SDK 4.4.2
        if(contact.phone != null && contact.phone !=" "){
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.phone)
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
                .build());
        }
        else{
           ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
         .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
         .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
         .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, new String())
         .build());
        }

        if(contact.phone2 != null && contact.phone2 !=" "){
               ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                       .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.phone2)
                       .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
                       .build());
        }

        if(contact.phone3 != null && contact.phone3 !=" "){
               ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                       .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.phone3)
                       .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
                       .build());
        }
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.fax)
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_FAX_WORK)
                .build());
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET,(" ".equals(contact.getAddress())?contact.location:contact.getAddress()))
             .build());
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY,ctx.getResources().getString(R.string.meuhedet))
             .build());
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                  .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, Long.parseLong(Groupid))
                .build());

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Bitmap photo = BitmapFactory.decodeResource(ctx.getResources(),R.drawable.logo_meuhedet);
        photo.compress(Bitmap.CompressFormat.PNG, 100, baos);
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
           .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
         .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
         .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, baos.toByteArray())
         .build());

          try {
                 ContentProviderResult [] res =ctx.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
                 rawContactID = ContentUris.parseId(res[0].uri);
                 boolean result = db.saveContactsIntoDatabase(rawContactID, contact.index, ContactKey);
                 if(result){
                       ((Activity) ctx).runOnUiThread(new Runnable() {
                              @Override
                              public void run() {
                                     Toast.makeText(ctx, R.string.successfully_saved_contact, Toast.LENGTH_SHORT).show();
                                     }
                        });
                       }
          } catch (Exception e) {
          }
   }

打開撥號器時,我得到以下信息:

FATAL EXCEPTION: AsyncTask #4
Process: com.google.android.dialer, PID: 8233
 java.lang.RuntimeException: An error occured while executing doInBackground()
     at android.os.AsyncTask$3.done(AsyncTask.java:300)
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
     at java.lang.Thread.run(Thread.java:841)
 Caused by: java.lang.IllegalArgumentException: the bind value at index 2 is null
     at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)
     at com.android.dialer.database.DialerDatabaseHelper.insertUpdatedContactsAndNumberPrefix(DialerDatabaseHelper.java:632)
     at com.android.dialer.database.DialerDatabaseHelper.updateSmartDialDatabase(DialerDatabaseHelper.java:784)
     at com.android.dialer.database.DialerDatabaseHelper$SmartDialUpdateAsyncTask.doInBackground(DialerDatabaseHelper.java:481)
     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
     ... 4 more

我試着完全不輸入數字,將null放在空字符串中,然后仍然保持不變。

我們嘗試使用其他撥號器,但一切正常。

撥號程序是否有問題,或者我是否缺少應設置的字段?

正確的方法是不添加數字。 添加null甚至是空字符串都將導致相同的崩潰。

另外,由於您要進行新插入,因此不會更新現有聯系人。 您將需要為此執行newUpdate。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM