কর্মস্থলের প্রোফাইলের পরিচিতিগুলি

এই ডেভেলপার গাইডে ব্যাখ্যা করা হয়েছে যে কীভাবে আপনি অফিস প্রোফাইল থেকে পরিচিতির ডেটা ব্যবহার করার জন্য আপনার অ্যাপ উন্নত করতে পারেন। আপনি আগে Android-এর পরিচিতি API ব্যবহার না করে থাকলে, API সম্পর্কে জানতে পরিচিতি প্রদানকারী পড়ুন।

এক নজরে

অফিস প্রোফাইল সহ ডিভাইসগুলি অফিস এবং ব্যক্তিগত প্রোফাইলের জন্য আলাদা স্থানীয় ডিরেক্টরিতে পরিচিতিগুলি স্টোর করে। ডিফল্ট হিসেবে, কোনও অ্যাপ ব্যক্তিগত প্রোফাইলে রান করলে, এটি অফিসের পরিচিতি দেখায় না। তবে, কোনও অ্যাপ অফিস প্রোফাইল থেকে পরিচিতির তথ্য অ্যাক্সেস করতে পারে। যেমন, Google-এর Android Contacts অ্যাপ এটি করে, যা সার্চ ফলাফলে ব্যক্তিগত ও অফিস ডিরেক্টরি, দুই ধরনের পরিচিতিই দেখায়।

ব্যবহারকারীরা প্রায়ই কাজের জন্য তাদের ব্যক্তিগত ডিভাইস ও অ্যাপ ব্যবহার করতে চান। অফিস-প্রোফাইল পরিচিতি ব্যবহার করে, আপনার অ্যাপ ব্যবহারকারীর কর্মদিবসের অংশ হয়ে উঠতে পারে।

ব্যবহারকারীর অভিজ্ঞতা

আপনার অ্যাপ কীভাবে অফিস প্রোফাইল থেকে পরিচিতির তথ্য দেখাতে পারে তা বিবেচনা করুন। আপনার অ্যাপের প্রকৃতি এবং লোকজন কেন এটি ব্যবহার করেন তার উপর নির্ভর করে সেরা পদ্ধতিটি বেছে নিন, তবে নিম্নলিখিত বিষয়গুলি বিবেচনা করুন:

  • আপনার অ্যাপে কি ডিফল্ট হিসেবে অফিস প্রোফাইলের পরিচিতি অন্তর্ভুক্ত করা উচিত নাকি ব্যবহারকারীকে চালু করতে হবে?
  • অফিস ও ব্যক্তিগত প্রোফাইলের পরিচিতি মিক্স করা বা আলাদা করার ফলে ব্যবহারকারীর ফ্লোতে কী প্রভাব পড়বে?
  • ভুলবশত অফিস প্রোফাইলের কোনও পরিচিতিতে ট্যাপ করলে কী প্রভাব পড়ে?
  • অফিস প্রোফাইলের পরিচিতি উপলভ্য না থাকলে আপনার অ্যাপের ইন্টারফেসে কী হয়?

আপনার অ্যাপে অফিস প্রোফাইল সংক্রান্ত পরিচিতি স্পষ্টভাবে উল্লেখ করা থাকতে হবে। আপনি পরিচিতিতে ব্রিফকেসের মতো অফিসের পরিচিত আইকন ব্যবহার করে ব্যাজ দিতে পারেন।

স্ক্রিনশটে সার্চ ফলাফল তালিকায় দেখানো হচ্ছে
ছবি ১. Google Contacts অ্যাপ কীভাবে অফিস প্রোফাইলের পরিচিতি আলাদা করে

উদাহরণস্বরূপ, Google Contacts অ্যাপ (ছবি ১-এ দেখানো হয়েছে) অফিস ও ব্যক্তিগত প্রোফাইলের পরিচিতি একসাথে দেখানোর জন্য নিম্নলিখিত কাজগুলি করে:

  1. তালিকার অফিস ও ব্যক্তিগত বিভাগ আলাদা করতে একটি সাবহেডার যোগ করে।
  2. ব্রিফকেস আইকন সহ অফিসের পরিচিতি ব্যাজ করে।
  3. ট্যাপ করা হলে, অফিস প্রোফাইলে অফিসের পরিচিতি খোলে।

ডিভাইস ব্যবহারকারী ব্যক্তি অফিস প্রোফাইল বন্ধ করে দিলে, আপনার অ্যাপ অফিস প্রোফাইল বা সংস্থার রিমোট পরিচিতি ডিরেক্টরি থেকে পরিচিতির তথ্য খুঁজতে পারবে না। আপনি কীভাবে অফিস-প্রোফাইল পরিচিতি ব্যবহার করেন তার উপর নির্ভর করে, আপনি এইসব পরিচিতি নিঃশব্দে বাদ দিতে পারেন অথবা আপনাকে ইউজার ইন্টারফেস কন্ট্রোল বন্ধ করতে হতে পারে।

অনুমতি

আপনার অ্যাপ যদি আগে থেকেই ব্যবহারকারীর পরিচিতির সাথে কাজ করে, তাহলে আপনার কাছে তাদের READ_CONTACTS (বা সম্ভবত WRITE_CONTACTS) অনুমতি থাকবে যা আপনি আপনার অ্যাপ ম্যানিফেস্ট ফাইলে অনুরোধ করেছেন। একই ব্যক্তি ব্যক্তিগত প্রোফাইল এবং অফিস প্রোফাইল ব্যবহার করেন বলে, অফিস প্রোফাইল থেকে পরিচিতির ডেটা অ্যাক্সেস করার জন্য আপনার আর কোনও অনুমতির প্রয়োজন নেই।

আইটি অ্যাডমিন ব্যক্তিগত প্রোফাইলের সাথে অফিস প্রোফাইলের পরিচিতির তথ্য শেয়ার করা ব্লক করতে পারবেন। কোনও আইটি অ্যাডমিন অ্যাক্সেস ব্লক করলে, আপনার পরিচিতি সার্চের ফলাফল খালি দেখায়। ব্যবহারকারী অফিস প্রোফাইল বন্ধ করে দিলে, আপনার অ্যাপকে নির্দিষ্ট সমস্যা ম্যানেজ করতে হবে না। ডিরেক্টরি কন্টেন্ট প্রোভাইডার ব্যবহারকারীর অফিসের পরিচিতি ডিরেক্টরি সম্পর্কে তথ্য প্রদান করা চালিয়ে যায় (ডিরেক্টরি বিভাগ দেখুন)। এইসব অনুমতি পরীক্ষা করতে, ডেভেলপমেন্ট ও পরীক্ষা বিভাগ দেখুন।

পরিচিতি সার্চ

আপনার অ্যাপ ব্যক্তিগত প্রোফাইলে পরিচিতি পেতে যে API এবং প্রসেস ব্যবহার করে, একই API এবং প্রসেস ব্যবহার করে আপনি অফিস প্রোফাইল থেকে পরিচিতি পেতে পারেন। Android 7.0 (API লেভেল ২৪) বা তার পরবর্তী ভার্সনে পরিচিতির জন্য এন্টারপ্রাইজ URI কাজ করে। URI-তে আপনাকে নিম্নলিখিত অ্যাডজাস্টমেন্ট করতে হবে:

  1. কন্টেন্ট প্রোভাইডার URI-কে Contacts.ENTERPRISE_CONTENT_FILTER_URI হিসেবে সেট করুন এবং পরিচিতির নাম কোয়েরি স্ট্রিং হিসেবে প্রদান করুন।
  2. সার্চ করার জন্য পরিচিতি ডিরেক্টরি সেট করুন। যেমন, 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)}")
  }
}

জাভা

// 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 লেভেল ২৪) বা তার পরবর্তী যেকোনও ভার্সনে অফিস প্রোফাইল ডিরেক্টরি সার্চ করার সুবিধা কাজ করে। আপনার অ্যাপকে এখনও ব্যবহারকারীর পরিচিতি ডিরেক্টরির সাথে কাজ করার জন্য 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)}")
    }
  }
}

জাভা

// 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 লেভেল ২১) বা তার পরবর্তী যেকোনও ভার্সনে উপলভ্য।

নিচের উদাহরণে দেখানো হয়েছে যে ইনকামিং কলের জন্য ইউজার ইন্টারফেস কনফিগার করতে একটি অ্যাপ কীভাবে অফিস প্রোফাইলের কন্টেন্ট 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
}

জাভা

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)}")
  }
}

জাভা

// 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();
}

অফিসের পরিচিতি দেখান

ব্যক্তিগত প্রোফাইলে চলা অ্যাপ অফিস প্রোফাইলে পরিচিতি কার্ড দেখাতে পারে। অফিস প্রোফাইলে Contacts অ্যাপ চালু করতে এবং পরিচিতির কার্ড দেখাতে Android 5.0 বা তার পরবর্তী ভার্সনে ContactsContract.QuickContact.showQuickContact() কল করুন।

অফিস প্রোফাইলের জন্য সঠিক 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
    )
  }
}

জাভা

// 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 লেভেল ২৪) Contacts.ENTERPRISE_CONTENT_FILTER_URI ব্যবহার করে অফিস ডিরেক্টরি থেকে অফিসের পরিচিতির নাম কোয়েরি করুন।
Directory.ENTERPRISE_CONTENT_URI ব্যবহার করে অফিস ও ব্যক্তিগত প্রোফাইলের সব ডিরেক্টরির তালিকা তৈরি করুন।

ডেভেলপমেন্ট ও টেস্টিং

অফিস প্রোফাইল তৈরি করতে, এই ধাপগুলি অনুসরণ করুন:

  1. আমাদের Test DPC অ্যাপ ইনস্টল করুন।
  2. Test DPC সেট-আপ করুন অ্যাপ খুলুন (Test DPC অ্যাপ আইকন নয়)।
  3. ম্যানেজ করা প্রোফাইল সেট-আপ করতে অন-স্ক্রিন নির্দেশাবলী অনুসরণ করুন।
  4. অফিস প্রোফাইলে, পরিচিতি অ্যাপ খুলুন এবং কিছু স্যাম্পেল পরিচিতি যোগ করুন।

অফিস প্রোফাইল পরিচিতিতে আইটি অ্যাডমিনের অ্যাক্সেস ব্লক করার সিমুলেশন করতে, এই ধাপগুলি অনুসরণ করুন:

  1. অফিস প্রোফাইলে, Test DPC অ্যাপ খুলুন।
  2. ক্রস-প্রোফাইল পরিচিতি সার্চ বন্ধ করুন সেটিং অথবা ক্রস-প্রোফাইল কলার আইডি বন্ধ করুন সেটিং সার্চ করুন।
  3. সেটিং পরিবর্তন করে চালু হিসেবে সেট করুন।

অফিস প্রোফাইলের সাথে আপনার অ্যাপ পরীক্ষা করার ব্যাপারে আরও জানতে, অফিস প্রোফাইলের সাথে মানানসই কিনা তা দেখার জন্য আপনার অ্যাপ পরীক্ষা করুন নিবন্ধটি পড়ুন।

অতিরিক্ত রিসোর্স

পরিচিতি বা অফিস প্রোফাইল সম্পর্কে আরও জানতে, এইসব রিসোর্স দেখুন: