คู่มือนักพัฒนาซอฟต์แวร์นี้อธิบายวิธีเพิ่มประสิทธิภาพแอปในการใช้รายชื่อติดต่อ จากโปรไฟล์งาน หากคุณไม่ได้ใช้ Contacts API ของ Android ก่อนหน้านี้ โปรดอ่านผู้ให้บริการรายชื่อติดต่อเพื่อทำความคุ้นเคยกับ API
ภาพรวม
อุปกรณ์ที่มีโปรไฟล์งานจะเก็บรายชื่อติดต่อไว้ในเครื่องแยกต่างหาก ไดเรกทอรีสำหรับโปรไฟล์งานและโปรไฟล์ส่วนตัว โดยค่าเริ่มต้น เมื่อแอปทำงานใน โปรไฟล์ส่วนตัวนั้นก็จะไม่แสดงข้อมูลติดต่อของที่ทำงาน อย่างไรก็ตาม แอปสามารถ เข้าถึงข้อมูลติดต่อจากโปรไฟล์งาน ตัวอย่างเช่น แอปที่ นี่คือแอปพลิเคชัน Android Contacts ของ Google ซึ่งจะแสดงทั้ง รายชื่อติดต่อจากไดเรกทอรีงานในผลการค้นหา
ผู้ใช้มักต้องการใช้อุปกรณ์และแอปส่วนตัวในการทำงาน โดยการใช้ รายชื่อติดต่อในโปรไฟล์งาน แอปของคุณอาจกลายเป็นส่วนหนึ่งของวันทำงานของผู้ใช้ได้
ประสบการณ์ของผู้ใช้
พิจารณาว่าแอปอาจนำเสนอข้อมูลติดต่อจากโปรไฟล์งานอย่างไร วิธีที่ดีที่สุดขึ้นอยู่กับลักษณะของแอปและเหตุผลที่ผู้คน ใช้แต่ขอให้คำนึงถึงสิ่งต่อไปนี้
- แอปของคุณควรรวมรายชื่อติดต่อในโปรไฟล์งานโดยค่าเริ่มต้นหรือหากผู้ใช้ เลือกใช้ไหม
- การรวมหรือแยกรายชื่อติดต่อในโปรไฟล์งานและโปรไฟล์ส่วนตัวจะส่งผลต่อ การใช้งานของผู้ใช้อย่างไร
- การแตะรายชื่อติดต่อในโปรไฟล์งานโดยไม่ตั้งใจจะส่งผลอย่างไร
- สิ่งที่จะเกิดขึ้นกับอินเทอร์เฟซของแอปเมื่อรายชื่อติดต่อในโปรไฟล์งานไม่ได้อยู่ ว่างไหม
แอปควรระบุรายชื่อติดต่อในโปรไฟล์งานอย่างชัดเจน บางทีคุณอาจได้รับป้าย ผู้ที่คุณติดต่อด้วยโดยใช้ไอคอนที่ทำงานที่คุ้นเคย เช่น กระเป๋าเอกสาร
ในตัวอย่างนี้ แอป Google Contacts (แสดงในรูปที่ 1) ทำสิ่งต่อไปนี้เพื่อ แสดงรายชื่อติดต่อในโปรไฟล์ที่ทำงานและโปรไฟล์ส่วนตัวผสมกัน
- แทรกส่วนหัวย่อยเพื่อแยกส่วนงานและส่วนส่วนตัวของรายการ
- ป้ายแสดงข้อมูลติดต่อที่ทำงานด้วยไอคอนกระเป๋าเอกสาร
- เปิดรายชื่อติดต่อที่ทำงานในโปรไฟล์งานเมื่อแตะ
หากผู้ที่ใช้อุปกรณ์ปิดโปรไฟล์งาน แอปของคุณจะทำไม่ได้ ค้นหาข้อมูลติดต่อจากโปรไฟล์งานหรือรีโมตขององค์กร ไดเรกทอรีรายชื่อติดต่อ คุณสามารถทำสิ่งต่อไปนี้ได้ ทั้งนี้ขึ้นอยู่กับวิธีที่คุณใช้รายชื่อติดต่อในโปรไฟล์งาน เว้นรายชื่อติดต่อเหล่านี้ไว้เงียบๆ หรือคุณอาจต้องปิดใช้อินเทอร์เฟซผู้ใช้
สิทธิ์
ถ้าแอปของคุณทำงานร่วมกับรายชื่อติดต่อของผู้ใช้อยู่แล้ว คุณจะเห็นข้อมูลต่อไปนี้
READ_CONTACTS
(หรืออาจจะเป็น
WRITE_CONTACTS
) ที่คุณขอใน
ไฟล์ Manifest ของแอป เนื่องจากบุคคลคนเดียวกันใช้โปรไฟล์ส่วนตัวและที่ทำงาน
คุณไม่จำเป็นต้องมีสิทธิ์เพิ่มเติมในการเข้าถึงข้อมูลรายชื่อติดต่อจากงานดังกล่าว
โปรไฟล์
ผู้ดูแลระบบไอทีสามารถ บล็อก โปรไฟล์งานที่แชร์ข้อมูลติดต่อกับโปรไฟล์ส่วนตัว หากฝ่ายไอที ผู้ดูแลระบบบล็อกการเข้าถึง การค้นหาผู้ติดต่อของคุณจะแสดงเป็นผลลัพธ์ที่ว่างเปล่า บัญชี แอปไม่จำเป็นต้องจัดการกับข้อผิดพลาดบางอย่างเมื่อผู้ใช้ปิดการทำงาน โปรไฟล์ ผู้ให้บริการเนื้อหาไดเรกทอรีจะยังคงส่งคืนข้อมูลเกี่ยวกับพร็อพเพอร์ตี้ ไดเรกทอรีรายชื่อติดต่อที่ทำงานของผู้ใช้ (ดูส่วนไดเรกทอรี) หากต้องการทดสอบสิทธิ์เหล่านี้ โปรดดูการพัฒนาและการทดสอบ
การค้นหารายชื่อติดต่อ
คุณสามารถรับรายชื่อติดต่อจากโปรไฟล์งานโดยใช้ API และกระบวนการเดียวกับที่ ที่แอปของคุณใช้ในการดึงรายชื่อติดต่อไว้ในโปรไฟล์ส่วนตัว URI ขององค์กรสำหรับ ระบบรองรับรายชื่อติดต่อใน Android 7.0 (API ระดับ 24) ขึ้นไป คุณต้องทำ การปรับต่อไปนี้ใน URI
- ตั้งค่า URI ผู้ให้บริการเนื้อหาเป็น
Contacts.ENTERPRISE_CONTENT_FILTER_URI
และระบุชื่อผู้ติดต่อเป็นสตริงการค้นหา - ตั้งค่าไดเรกทอรีรายชื่อติดต่อเพื่อค้นหา ตัวอย่างเช่น
ENTERPRISE_DEFAULT
ค้นหารายชื่อติดต่อในการทำงาน ร้านค้าในพื้นที่ของโปรไฟล์
การเปลี่ยน URI จะทำงานกับกลไกของผู้ให้บริการเนื้อหาใดก็ได้ เช่น
CursorLoader
- เหมาะสำหรับการโหลดข้อมูลรายชื่อติดต่อลงในอินเทอร์เฟซผู้ใช้เนื่องจาก
การเข้าถึงข้อมูลจะเกิดขึ้นในชุดข้อความของผู้ปฏิบัติงาน เพื่อให้เข้าใจง่าย ตัวอย่างใน
เป็นไกด์ที่โทร ContentResolver.query()
ต่อไปนี้คือวิธีค้นหา
รายชื่อติดต่อในไดเรกทอรีรายชื่อติดต่อในเครื่องของโปรไฟล์งาน
Kotlin
// First confirm the device user has given permission for the personal profile. // There isn't a separate work permission, but an IT admin can block access. val readContactsPermission = ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.READ_CONTACTS) if (readContactsPermission != PackageManager.PERMISSION_GRANTED) { return } // Fetch Jackie, James, & Jason (and anyone else whose names begin with "ja"). val nameQuery = Uri.encode("ja") // Build the URI to look up work profile contacts whose name matches. Query // the default work profile directory which is the locally-stored contacts. val contentFilterUri = ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI .buildUpon() .appendPath(nameQuery) .appendQueryParameter( ContactsContract.DIRECTORY_PARAM_KEY, ContactsContract.Directory.ENTERPRISE_DEFAULT.toString() ) .build() // Query the content provider using the generated URI. var cursor = getContentResolver() .query( contentFilterUri, arrayOf( ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.Contacts.DISPLAY_NAME_PRIMARY ), null, null, null ) // Print any results found using the work profile contacts' display name. cursor?.use { while (it.moveToNext()) { Log.i(TAG, "Work profile contact: ${it.getString(2)}") } }
Java
// First confirm the device user has given permission for the personal profile. // There isn't a separate work permission, but an IT admin can block access. int readContactsPermission = ContextCompat.checkSelfPermission( getBaseContext(), Manifest.permission.READ_CONTACTS); if (readContactsPermission != PackageManager.PERMISSION_GRANTED) { return; } // Fetch Jackie, James, & Jason (and anyone else whose names begin with "ja"). String nameQuery = Uri.encode("ja"); // Build the URI to look up work profile contacts whose name matches. Query // the default work profile directory which is the locally stored contacts. Uri contentFilterUri = ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI .buildUpon() .appendPath(nameQuery) .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(ContactsContract.Directory.ENTERPRISE_DEFAULT)) .build(); // Query the content provider using the generated URI. Cursor cursor = getContentResolver().query( contentFilterUri, new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.Contacts.DISPLAY_NAME_PRIMARY }, null, null, null); if (cursor == null) { return; } // Print any results found using the work profile contacts' display name. try { while (cursor.moveToNext()) { Log.i(TAG, "Work profile contact: " + cursor.getString(2)); } } finally { cursor.close(); }
ไดเรกทอรี
องค์กรจำนวนมากใช้ไดเรกทอรีระยะไกล เช่น Microsoft Exchange หรือ LDAP
ที่มีข้อมูลติดต่อของทั้งองค์กร แอปของคุณช่วยได้
ผู้ใช้สื่อสารและแชร์ข้อมูลกับเพื่อนร่วมงานที่อยู่ในองค์กร
ไดเรกทอรี โปรดทราบว่าโดยปกติแล้วไดเรกทอรีเหล่านี้จะมีรายชื่อติดต่อหลายพันรายการ
และแอปของคุณต้องใช้การเชื่อมต่อเครือข่าย
ที่ใช้งานอยู่เพื่อค้นหาด้วย คุณสามารถใช้
ผู้ให้บริการเนื้อหา Directory
เพื่อรับไดเรกทอรีที่ผู้ให้บริการเนื้อหา
บัญชีของผู้ใช้และหาข้อมูลเพิ่มเติมเกี่ยวกับไดเรกทอรีแต่ละรายการ
ค้นหา Directory.ENTERPRISE_CONTENT_URI
ให้ดึงไดเรกทอรีจากโปรไฟล์ส่วนตัวและงาน
แสดงผลพร้อมกัน ระบบรองรับการค้นหาไดเรกทอรีโปรไฟล์งานใน
Android 7.0 (API ระดับ 24) ขึ้นไป แอปของคุณยังต้องให้ผู้ใช้ให้สิทธิ์
สิทธิ์ READ_CONTACTS
ในการทำงานร่วมกับรายชื่อติดต่อ
ไดเรกทอรี
เนื่องจาก Android จัดเก็บข้อมูลรายชื่อติดต่อเป็นข้อมูลธุรกิจในพื้นที่ประเภทต่างๆ
ไดเรกทอรีระยะไกล คลาส Directory
มีเมธอดที่คุณสามารถเรียกใช้เพื่อค้นหาเพิ่มเติม
เกี่ยวกับไดเรกทอรี:
isEnterpriseDirectoryId()
- เรียกใช้วิธีการนี้เพื่อดูว่าไดเรกทอรีมาจากบัญชีโปรไฟล์งานหรือไม่
โปรดทราบว่าผู้ให้บริการเนื้อหา
ENTERPRISE_CONTENT_URI
ส่งคืนรายชื่อติดต่อ ไดเรกทอรีสำหรับโปรไฟล์ส่วนตัวและโปรไฟล์งานไว้ด้วยกัน isRemoteDirectoryId()
- เรียกใช้เมธอดนี้เพื่อดูว่าไดเรกทอรีเป็นแบบระยะไกลหรือไม่ ไดเรกทอรีระยะไกล อาจเป็นร้านค้าติดต่อขององค์กรหรือเครือข่ายสังคมของผู้ใช้
ตัวอย่างต่อไปนี้จะแสดงวิธีที่คุณสามารถใช้วิธีการเหล่านี้เพื่อกรองโปรไฟล์งาน ไดเรกทอรี:
Kotlin
// First, confirm the device user has given READ_CONTACTS permission. // This permission is still needed for directory listings ... // Query the content provider to get directories for BOTH the personal and // work profiles. val cursor = getContentResolver() .query( ContactsContract.Directory.ENTERPRISE_CONTENT_URI, arrayOf(ContactsContract.Directory._ID, ContactsContract.Directory.PACKAGE_NAME), null, null, null ) // Print the package name of the work profile's local or remote contact directories. cursor?.use { while (it.moveToNext()) { val directoryId = it.getLong(0) if (ContactsContract.Directory.isEnterpriseDirectoryId(directoryId)) { Log.i(TAG, "Directory: ${it.getString(1)}") } } }
Java
// First, confirm the device user has given READ_CONTACTS permission. // This permission is still needed for directory listings ... // Query the content provider to get directories for BOTH the personal and // work profiles. Cursor cursor = getContentResolver().query( ContactsContract.Directory.ENTERPRISE_CONTENT_URI, new String[]{ ContactsContract.Directory._ID, ContactsContract.Directory.PACKAGE_NAME }, null, null, null); if (cursor == null) { return; } // Print the package name of the work profile's local or remote contact directories. try { while (cursor.moveToNext()) { long directoryId = cursor.getLong(0); if (ContactsContract.Directory.isEnterpriseDirectoryId(directoryId)) { Log.i(TAG, "Directory: " + cursor.getString(1)); } } } finally { cursor.close(); }
ตัวอย่างนี้จะดึงข้อมูลรหัสและชื่อแพ็กเกจสำหรับไดเรกทอรี วิธีแสดงผู้ใช้
ที่ช่วยให้ผู้ใช้เลือกแหล่งที่มาของไดเรกทอรีรายชื่อติดต่อ คุณอาจต้อง
ดึงข้อมูลเพิ่มเติมเกี่ยวกับไดเรกทอรี หากต้องการดูช่องข้อมูลเมตาอื่นๆ ที่
อาจมีให้อ่านข้อมูลอ้างอิงของชั้นเรียน Directory
การค้นหาในโทรศัพท์
แอปค้นหาได้
PhoneLookup.CONTENT_FILTER_URI
เพื่อให้มีประสิทธิภาพ
ให้ค้นหาข้อมูลรายชื่อติดต่อสำหรับหมายเลขโทรศัพท์ คุณสามารถดูผลการค้นหาจาก
ทั้งผู้ให้บริการติดต่อส่วนบุคคลและของโปรไฟล์งาน ถ้าคุณแทนที่ URI นี้ด้วย
PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI
URI เนื้อหาของโปรไฟล์งานนี้พร้อมใช้งานใน Android 5.0 (API ระดับ 21) หรือ
สูงขึ้น
ตัวอย่างต่อไปนี้แสดงแอปที่ค้นหา URI เนื้อหาของโปรไฟล์งานเพื่อ กำหนดค่าอินเทอร์เฟซผู้ใช้สำหรับสายเรียกเข้า
Kotlin
fun onCreateIncomingConnection( connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest ): Connection { var request = request // Get the telephone number from the incoming request URI. val phoneNumber = this.extractTelephoneNumber(request.address) var displayName = "Unknown caller" var isCallerInWorkProfile = false // Look up contact details for the caller in the personal and work profiles. val lookupUri = Uri.withAppendedPath( ContactsContract.PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, Uri.encode(phoneNumber) ) val cursor = getContentResolver() .query( lookupUri, arrayOf( ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup.CUSTOM_RINGTONE ), null, null, null ) // Use the first contact found and check if they're from the work profile. cursor?.use { if (it.moveToFirst() == true) { displayName = it.getString(1) isCallerInWorkProfile = ContactsContract.Contacts.isEnterpriseContactId(it.getLong(0)) } } // Return a configured connection object for the incoming call. val connection = MyAudioConnection() connection.setCallerDisplayName(displayName, TelecomManager.PRESENTATION_ALLOWED) // Our app's activity uses this value to decide whether to show a work badge. connection.setIsCallerInWorkProfile(isCallerInWorkProfile) // Configure the connection further ... return connection }
Java
public Connection onCreateIncomingConnection ( PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) { // Get the telephone number from the incoming request URI. String phoneNumber = this.extractTelephoneNumber(request.getAddress()); String displayName = "Unknown caller"; boolean isCallerInWorkProfile = false; // Look up contact details for the caller in the personal and work profiles. Uri lookupUri = Uri.withAppendedPath( ContactsContract.PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = getContentResolver().query( lookupUri, new String[]{ ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup.CUSTOM_RINGTONE }, null, null, null); // Use the first contact found and check if they're from the work profile. if (cursor != null) { try { if (cursor.moveToFirst() == true) { displayName = cursor.getString(1); isCallerInWorkProfile = ContactsContract.Contacts.isEnterpriseContactId(cursor.getLong(0)); } } finally { cursor.close(); } } // Return a configured connection object for the incoming call. MyConnection connection = new MyConnection(); connection.setCallerDisplayName(displayName, TelecomManager.PRESENTATION_ALLOWED); // Our app's activity uses this value to decide whether to show a work badge. connection.setIsCallerInWorkProfile(isCallerInWorkProfile); // Configure the connection further ... return connection; }
การค้นหาอีเมล
แอปของคุณสามารถรับข้อมูลติดต่อส่วนตัวหรือที่ทำงานสำหรับอีเมลด้วยการค้นหา
Email.ENTERPRISE_CONTENT_LOOKUP_URI
การค้นหา URL นี้จะเป็นการค้นหารายชื่อติดต่อส่วนบุคคลเพื่อหาข้อมูลที่ตรงกันทั้งหมดก่อน ถ้า
ผู้ให้บริการไม่ตรงกับรายชื่อติดต่อส่วนตัวใดๆ แล้วผู้ให้บริการจะค้นหา
รายชื่อติดต่อสำหรับงานที่ตรงกัน URI นี้พร้อมใช้งานใน Android 6.0 (API ระดับ 23)
หรือสูงกว่า
วิธีค้นหาข้อมูลติดต่อสำหรับอีเมลมีดังนี้
Kotlin
// Build the URI to look up contacts from the personal and work profiles that // are an exact (case-insensitive) match for the email address. val emailAddress = "somebody@example.com" val contentFilterUri = Uri.withAppendedPath( ContactsContract.CommonDataKinds.Email.ENTERPRISE_CONTENT_LOOKUP_URI, Uri.encode(emailAddress) ) // Query the content provider to first try to match personal contacts and, // if none are found, then try to match the work contacts. val cursor = contentResolver.query( contentFilterUri, arrayOf( ContactsContract.CommonDataKinds.Email.CONTACT_ID, ContactsContract.CommonDataKinds.Email.ADDRESS, ContactsContract.Contacts.DISPLAY_NAME ), null, null, null ) ?: return // Print the name of the matching contact. If we want to work-badge contacts, // we can call ContactsContract.Contacts.isEnterpriseContactId() with the ID. cursor.use { while (it.moveToNext()) { Log.i(TAG, "Matching contact: ${it.getString(2)}") } }
Java
// Build the URI to look up contacts from the personal and work profiles that // are an exact (case-insensitive) match for the email address. String emailAddress = "somebody@example.com"; Uri contentFilterUri = Uri.withAppendedPath( ContactsContract.CommonDataKinds.Email.ENTERPRISE_CONTENT_LOOKUP_URI, Uri.encode(emailAddress)); // Query the content provider to first try to match personal contacts and, // if none are found, then try to match the work contacts. Cursor cursor = getContentResolver().query( contentFilterUri, new String[]{ ContactsContract.CommonDataKinds.Email.CONTACT_ID, ContactsContract.CommonDataKinds.Email.ADDRESS, ContactsContract.Contacts.DISPLAY_NAME }, null, null, null); if (cursor == null) { return; } // Print the name of the matching contact. If we want to work-badge contacts, // we can call ContactsContract.Contacts.isEnterpriseContactId() with the ID. try { while (cursor.moveToNext()) { Log.i(TAG, "Matching contact: " + cursor.getString(2)); } } finally { cursor.close(); }
แสดงรายชื่อติดต่อที่ทำงาน
แอปที่ทำงานในโปรไฟล์ส่วนตัวจะแสดงการ์ดรายชื่อติดต่อในโปรไฟล์งานได้
โทร
ContactsContract.QuickContact.showQuickContact()
นิ้ว
Android 5.0 ขึ้นไป เพื่อเปิดแอป Contacts ในโปรไฟล์งานและแสดง
บัตรของรายชื่อติดต่อ
ในการสร้าง URI ที่ถูกต้องสำหรับโปรไฟล์งาน คุณต้องเรียกใช้
ContactsContract.Contacts.getLookupUri()
และผ่านการตรวจสอบ
รหัสรายชื่อติดต่อและคีย์การค้นหา ตัวอย่างต่อไปนี้แสดงวิธีรับ URI
จากนั้นแสดงการ์ด
Kotlin
// Query the content provider using the ENTERPRISE_CONTENT_FILTER_URI address. // We use the _ID and LOOKUP_KEY columns to generate a work-profile URI. val cursor = getContentResolver() .query( contentFilterUri, arrayOf(ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY), null, null ) // Show the contact details card in the work profile's Contacts app. The URI // must be created with getLookupUri(). cursor?.use { if (it.moveToFirst() == true) { val uri = ContactsContract.Contacts.getLookupUri(it.getLong(0), it.getString(1)) ContactsContract.QuickContact.showQuickContact( activity, Rect(20, 20, 100, 100), uri, ContactsContract.QuickContact.MODE_LARGE, null ) } }
Java
// Query the content provider using the ENTERPRISE_CONTENT_FILTER_URI address. // We use the _ID and LOOKUP_KEY columns to generate a work-profile URI. Cursor cursor = getContentResolver().query( contentFilterUri, new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, }, null, null, null); if (cursor == null) { return; } // Show the contact details card in the work profile's Contacts app. The URI // must be created with getLookupUri(). try { if (cursor.moveToFirst() == true) { Uri uri = ContactsContract.Contacts.getLookupUri( cursor.getLong(0), cursor.getString(1)); ContactsContract.QuickContact.showQuickContact( getActivity(), new Rect(20, 20, 100, 100), uri, ContactsContract.QuickContact.MODE_LARGE, null); } } finally { cursor.close(); }
ความพร้อมใช้งาน
ตารางต่อไปนี้จะสรุปเวอร์ชัน Android ที่รองรับโปรไฟล์งาน ข้อมูลติดต่อในโปรไฟล์ส่วนตัว
เวอร์ชันของ Android | การสนับสนุน |
---|---|
5.0 (API ระดับ 21) | ค้นหาหมายเลขโทรศัพท์ในรายชื่อติดต่อที่ทำงานโดยใช้ PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI |
6.0 (API ระดับ 23) | ค้นหาชื่อผู้ติดต่อของที่ทำงานสำหรับอีเมลโดยใช้ Email.ENTERPRISE_CONTENT_LOOKUP_URI |
7.0 (API ระดับ 24) | ค้นหาชื่อผู้ติดต่อของที่ทำงานจากไดเรกทอรีงานโดยใช้ Contacts.ENTERPRISE_CONTENT_FILTER_URI แสดงรายการไดเรกทอรีทั้งหมดในโปรไฟล์ของที่ทำงานและโปรไฟล์ส่วนตัวโดยใช้ Directory.ENTERPRISE_CONTENT_URI |
การพัฒนาและการทดสอบ
หากต้องการสร้างโปรไฟล์งาน ให้ทำตามขั้นตอนต่อไปนี้
- ติดตั้งแอป Test DPC
- เปิดแอปตั้งค่า Test DPC (ไม่ใช่ไอคอนแอป Test DPC)
- ทำตามวิธีการบนหน้าจอเพื่อตั้งค่าโปรไฟล์ที่มีการจัดการ
- ในโปรไฟล์งาน ให้เปิดแอปรายชื่อติดต่อและเพิ่มรายชื่อติดต่อตัวอย่าง
หากต้องการจำลองผู้ดูแลระบบไอทีที่บล็อกการเข้าถึงรายชื่อติดต่อในโปรไฟล์งาน ให้ทำตามขั้นตอนต่อไปนี้
- เปิดแอป Test DPC ในโปรไฟล์งาน
- ค้นหาการตั้งค่าปิดใช้การค้นหารายชื่อติดต่อข้ามโปรไฟล์ หรือ การตั้งค่าปิดใช้หมายเลขผู้โทรข้ามโปรไฟล์
- เปลี่ยนการตั้งค่าเป็นเปิด
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบแอปด้วยโปรไฟล์งาน โปรดอ่านทดสอบแอปสําหรับ ความเข้ากันได้กับโปรไฟล์งาน
แหล่งข้อมูลเพิ่มเติม
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับรายชื่อติดต่อหรือโปรไฟล์งาน โปรดดูแหล่งข้อมูลต่อไปนี้
- โปรไฟล์งานมีแนวทางปฏิบัติแนะนำเพิ่มเติมสำหรับการทำงาน โปรไฟล์
- ดึงข้อมูลรายการรายชื่อติดต่อ จะแนะนำขั้นตอนที่จำเป็นในการแสดงรายชื่อติดต่อในแอป
- ผู้ให้บริการรายชื่อติดต่อจะอธิบาย ของฐานข้อมูลรายชื่อติดต่อ