Sách

Thứ Năm, 7 tháng 5, 2020

Android: hàm insert danh bạ vào máy (android create new contact programming)


    public static void insertPhoneContact(String displayName, String number, Context context) {
        /*context is App or Activity*/
        ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
        int contactIndex = operations.size();
        //Newly Inserted contact
        // A raw contact will be inserted ContactsContract.RawContacts table in contacts database.
        operations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)//Step1
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build());

        //Display name will be inserted in ContactsContract.Data table
        operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)//Step2
                .withValueBackReference(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, contactIndex)
                .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName)
                .build());

        //Mobile number will be inserted in ContactsContract.Data table
        operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)//Step 3
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactIndex)
                .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                .build());
        boolean isSuccess = false;
        try {
            // We will do batch operation to insert all above data
            //Contains the output of the app of a ContentProviderOperation.
            //It is sure to have exactly one of uri or count set
            ContentProviderResult[] contentProvider = context.getContentResolver()
                    .applyBatch(ContactsContract.AUTHORITY, operations); //apply above data insertion into contacts list
            Log.e("insertPhoneContact", "result: " + contentProvider);
            isSuccess = contentProvider != null && contentProvider.length > 0;
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (OperationApplicationException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("insertPhoneContact displayName: " + displayName + ", number:  " + number + ", isSuccess: " + isSuccess);
    }