নেটওয়ার্কিং ও টেলিফোনি

এই গাইডের ফিচারগুলি নেটওয়ার্কিং ও টেলিফোনি ম্যানেজমেন্টের ক্ষমতা বর্ণনা করে যা আপনি নিজের ডিভাইস নীতি কন্ট্রোলার (DPC) অ্যাপে প্রয়োগ করতে পারবেন। এই ডকুমেন্টে কোডের স্যাম্পেল আছে এবং আপনি Android-এর এন্টারপ্রাইজ ফিচারের জন্য স্যাম্পেল কোডের সোর্স হিসেবে Test DPC অ্যাপও ব্যবহার করতে পারবেন।

DPC অ্যাপ ব্যক্তিগত ডিভাইসে প্রোফাইল মালিক মোডে অথবা সম্পূর্ণ ম্যানেজ করা ডিভাইসে ডিভাইস মালিক মোডে রান করতে পারে। DPC প্রোফাইল মালিক মোড বা ডিভাইস মালিক মোডে রান করলে কোন কোন ফিচার উপলভ্য থাকে তা এই সারণী থেকে জানা যায়:

ফিচার প্রোফাইলের মালিক ডিভাইসের মালিক
প্রোফাইল জুড়ে অফিসের পরিচিতি অ্যাক্সেস করুন ✓
অফিসের ট্রাফিকের জন্য একটি সুরক্ষিত নেটওয়ার্ক কানেকশন নিশ্চিত করুন ✓ ✓
বিভিন্ন অঞ্চল জুড়ে একটি ওয়্যারলেস নেটওয়ার্ক আইডি সেট-আপ করা ✓ ✓
অফিস প্রোফাইলের জন্য আলাদা ডায়ালার নির্দিষ্ট করুন ✓

সব প্রোফাইল জুড়ে অফিসের পরিচিতি অ্যাক্সেস করুন

EMM কোনও ব্যবহারকারীর ব্যক্তিগত প্রোফাইলকে তার অফিসের পরিচিতি অ্যাক্সেস করার অনুমতি দিতে পারে যাতে ব্যবহারকারীর ব্যক্তিগত এবং অফিসের পরিচিতি স্থানীয় সার্চ এবং রিমোট ডিরেক্টরি লুকআপের মাধ্যমে অ্যাক্সেস করা যায়। ব্যক্তিগত ডিভাইসে, ব্যক্তিগত প্রোফাইলে থাকা একটি ডায়ালার ব্যক্তিগত কলের পাশাপাশি অফিসের কলও করতে ও রিসিভ করতে পারে। এছাড়াও, অফিসের পরিচিতি সিস্টেম UI-তে ভালভাবে ইন্টিগ্রেট করা থাকে। অফিস প্রোফাইল এনক্রিপ্ট করা থাকলে, এর ডেটা ব্যক্তিগত প্রোফাইলে উপলভ্য থাকে না।

সিস্টেম UI-এর সাথে ইন্টিগ্রেট করা হয়েছে

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

Android Compatibility Definition Document (CDD)-এ ডিফল্ট ডায়ালারে অফিসের পরিচিতি দেখানোর জন্য প্রয়োজনীয়তা এবং পরিচিতি ও মেসেজিং অ্যাপে ব্যাজ দেখানোর প্রয়োজনীয়তা অন্তর্ভুক্ত থাকে, যাতে বোঝা যায় যে সেগুলি অফিস প্রোফাইল থেকে নেওয়া হয়েছে।

অফিসের পরিচিতি অ্যাক্সেস ও সার্চ করা যায়

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

প্রাথমিক প্রোফাইলে অফিসের পরিচিতি নিয়ন্ত্রণ করা

DPC অফিসিয়াল পরিচিতি সার্চ করার অনুমতি নিয়ন্ত্রণ করে। প্রোফাইল মালিক মোডে রান করার সময়, DPC ব্যক্তিগত প্রোফাইলে অফিস সংক্রান্ত পরিচিতির দৃশ্যমানতা ম্যানেজ করে। আরও তথ্যের জন্য, ডিভাইস নীতি কন্ট্রোলার তৈরি করুন দেখুন।

ব্যক্তিগত প্রোফাইল ব্যবহার করে অফিসের পরিচিতি সার্চ করার সুবিধা ডিফল্ট হিসেবে চালু করা থাকে।

অফিসের ট্রাফিকের জন্য সুরক্ষিত নেটওয়ার্ক কানেকশন নিশ্চিত করুন

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

সবসময়-চালু VPN কানেকশন সম্পর্কে

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

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

DISALLOW_CONFIG_VPN যদি true হয়, তাহলে ব্যবহারকারী VPN কনফিগার করতে পারবেন না। adb ডিবাগ কমান্ড ব্যবহার করে ব্যবহারকারীদের সবসময়-চালু VPN ওভাররাইড করা থেকে আটকাতে DISALLOW_DEBUGGING_FEATURES চালু করুন। কোনও ব্যবহারকারীকে VPN আনইনস্টল করা থেকে আটকাতে, DevicePolicyManager.setUninstallBlocked-এ কল করুন।

VPN পরিষেবা সেট-আপ করা

যে সংস্থা Android-এর জন্য আপনার এন্টারপ্রাইজ সমাধান ব্যবহার করে, সেটি VPN সেট-আপ করে।

  1. VpnService প্রয়োগ করে এমন একটি VPN অ্যাপ ইনস্টল করুন। আপনি অ্যাকশন VpnService.SERVICE_INTERFACE-এর সাথে মেলে এমন ইনটেন্ট ফিল্টার ব্যবহার করে অ্যাক্টিভ VPN পরিষেবা খুঁজে পেতে পারেন।
  2. অ্যাপের ম্যানিফেস্টে VpnService ঘোষণা করুন যা BIND_VPN_SERVICE অনুমতির মাধ্যমে সুরক্ষিত।
  3. VpnService কনফিগার করুন যাতে এটি সিস্টেমের মাধ্যমে শুরু হয়। সিস্টেম বুট করার প্রসেস শেষ হওয়ার সঙ্গে সঙ্গে নিজে থেকে চালু হওয়ার জন্য VPN অ্যাপকে অনুমতি দেবেন না এবং এর নিজস্ব লাইফ সাইকেল নিয়ন্ত্রণ করুন।
  4. VPN অ্যাপের জন্য ম্যানেজ করা কনফিগারেশন সেট করুন (নিচের উদাহরণ দেখুন)।

সবসময়-চালু VPN কানেকশন চালু করুন

DPC, DevicePolicyManager.setAlwaysOnVpnPackage()-এ কল করার মাধ্যমে নির্দিষ্ট অ্যাপের মাধ্যমে সবসময়-চালু VPN কানেকশন কনফিগার করতে পারে।

এই কানেকশন অটোমেটিক মঞ্জুর করা হয় এবং রিবুট করার পরেও থেকে যায়। lockdownEnabled-এর মান false হলে, ফোন রিবুট হওয়া এবং VPN কানেক্ট হওয়ার সময় থেকে নেটওয়ার্ক ট্রাফিক অসুরক্ষিত হতে পারে। VPN কাজ না করলে আপনি যদি নেটওয়ার্ক কানেক্টিভিটি বন্ধ করতে না চান অথবা VPN যদি অপরিহার্য না হয়, তাহলে এটি কাজে লাগে।

সবসময়-চালু VPN কানেকশন যাচাই করা

DPC, বর্তমান ব্যবহারকারীর জন্য সবসময় চালু থাকা VPN কানেকশন ম্যানেজ করা প্যাকেজের নাম পড়তে পারে, যার সাথে DevicePolicyManager.getAlwaysOnVpnPackage(). আছে

এই ধরনের কোনও প্যাকেজ না থাকলে অথবা সিস্টেম সেটিংস অ্যাপের মধ্যে VPN তৈরি করা হলে, null রিটার্ন করা হয়।

উদাহরণ

TestDPC অ্যাপে, AlwaysOnVpnFragment.java সবসময় চালু VPN কানেকশনের জন্য সেটিং চালু করতে এইসব API ব্যবহার করে।

নিচের উদাহরণে:

  • VPN পরিষেবার ম্যানেজ করা কনফিগারেশন DevicePolicyManager-এর মাধ্যমে সেট করা হয়, এর জন্য setApplicationRestrictions() পদ্ধতি ব্যবহার করা হয়।
  • ম্যানেজ করা কনফিগারেশন ইচ্ছামতো কী-ভ্যালু পেয়ার ব্যবহার করে এবং এই উদাহরণ অ্যাপ VPN-এর নেটওয়ার্ক সেটিংস কনফিগার করতে অন্য কোথাও সেগুলি ব্যবহার করে (ম্যানেজ করা কনফিগারেশন চেক করুন দেখুন)।
  • উদাহরণস্বরূপ, Android প্যাকেজ ইনস্টলারকে ব্লকলিস্টে যোগ করা হয় যাতে এটি VPN-এর মাধ্যমে সিস্টেম প্যাকেজ আপডেট না করে। প্যাকেজ ইনস্টলার ছাড়া, অফিস প্রোফাইল বা ডিভাইসের মধ্যে ব্যবহারকারীর সমস্ত নেটওয়ার্ক ট্রাফিক এই VPN অ্যাপের মাধ্যমে যায়; এর আপডেটগুলি ওপেন ইন্টারনেট ব্যবহার করে।
  • DevicePolicyManager তারপর setAlwaysOnVpnPackage() ব্যবহার করে VPN প্যাকেজের জন্য সবসময়-চালু VPN কানেকশন চালু করে এবং লকডাউন মোড চালু করে।

Kotlin

// Set VPN's managed configurations
val config = Bundle().apply {
  putString(Extras.VpnApp.ADDRESS, "192.0.2.0")
  putString(Extras.VpnApp.IDENTITY, "vpn.account1")
  putString(Extras.VpnApp.CERTIFICATE, "keystore://auth_certificate")
  putStringArray(Extras.VpnApp.DENYLIST,
        arrayOf("com.android.packageinstaller"))
}

val dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

val admin = myDeviceAdminReceiver.getComponentName(this)

// Name of package to update managed configurations
val vpnPackageName = "com.example.vpnservice"

// Associate managed configurations with DeviceAdminReceiver
dpm.setApplicationRestrictions(admin, vpnPackageName, config)

// Enable always-on VPN connection through VPN package
try {
  val lockdownEnabled = true
  dpm.setAlwaysOnVpnPackage(admin, vpnPackageName, lockdownEnabled)
} catch (ex: Exception) {
  throw PolicyException()
}

জাভা

// Set VPN's managed configurations
final Bundle config = new Bundle();
config.putString(Extras.VpnApp.ADDRESS, "192.0.2.0");
config.putString(Extras.VpnApp.IDENTITY, "vpn.account1");
config.putString(Extras.VpnApp.CERTIFICATE, "keystore://auth_certificate");
config.putStringArray(Extras.VpnApp.DENYLIST,
                      new String[]{"com.android.packageinstaller"});

DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

ComponentName admin = myDeviceAdminReceiver.getComponentName(this);

// Name of package to update managed configurations
final String vpnPackageName = "com.example.vpnservice";

// Associate managed configurations with DeviceAdminReceiver
dpm.setApplicationRestrictions(admin, vpnPackageName, config);

// Enable always-on VPN connection through VPN package
try {
  boolean lockdownEnabled = true;
  dpm.setAlwaysOnVpnPackage(admin, vpnPackageName, lockdownEnabled));
} catch (Exception ex) {
  throw new PolicyException(...);
}

বিভিন্ন অঞ্চল জুড়ে একটি ওয়্যারলেস নেটওয়ার্ক আইডি সেট-আপ করুন

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

মনে রাখবেন: API 18 (Jelly Bean) থেকে Android setCaCertificate সাপোর্ট করে, তবে আইটি অ্যাডমিনদের প্রতিটি CA-এর সাথে আলাদাভাবে তাদের নেটওয়ার্কের ব্যবস্থা করতে হবে যাতে ডিভাইসগুলি প্রতিটি অ্যাক্সেস পয়েন্টে নির্বিঘ্নে যাচাইকরণ করতে পারে, তাদের অঞ্চল যাই হোক না কেন।

সার্ভার শনাক্ত করতে CA সার্টিফিকেট উল্লেখ করুন

একই SSID ব্যবহার করে সার্ভার শনাক্ত করে এমন X.509 সার্টিফিকেটের তালিকা নির্দিষ্ট করতে, WifiEnterpriseConfig.setCaCertificates() ব্যবহার করে ওয়্যারলেস কনফিগারেশনে সব প্রাসঙ্গিক CA অন্তর্ভুক্ত করুন।

সার্ভারের সার্টিফিকেট তখনই সঠিক বলে বিবেচিত হয় যখন এটির CA প্রদত্ত সার্টিফিকেটের সাথে ম্যাচ করে। সার্টিফিকেটের জন্য ডিফল্ট নাম অটোমেটিক অ্যাসাইন করা হয় এবং কনফিগারেশনের মধ্যে ব্যবহার করা হয়। নেটওয়ার্ক চালু থাকলে WifiManager সার্টিফিকেট ইনস্টল করে এবং অটোমেটিক কনফিগারেশন সেভ করে এবং কনফিগারেশন মুছে দিলে সার্টিফিকেট সরিয়ে দেয়।

ওয়্যারলেস কনফিগারেশনের সাথে যুক্ত সব CA সার্টিফিকেট পেতে, X509Certificate অবজেক্টের তালিকা ফেরত পেতে WifiEnterpriseConfig.getCaCertificates() ব্যবহার করুন।

একাধিক CA সার্টিফিকেট ব্যবহার করে ওয়্যারলেস কনফিগারেশন যোগ করুন

  1. সার্ভারের পরিচয় যাচাই করুন:
    1. X.509 CA সার্টিফিকেট লোড করুন।
    2. ক্লায়েন্টের ব্যক্তিগত কী এবং সার্টিফিকেট লোড করুন। সার্টিফিকেট ফাইল কীভাবে পড়তে হয় তার উদাহরণ দেখতে HTTPS ও SSL-এর মাধ্যমে নিরাপত্তা দেখুন।
  2. নতুন WifiConfiguration তৈরি করুন এবং এর SSID ও কী ম্যানেজমেন্ট সেট করুন।
  3. এই WifiConfiguration-এ WifiEnterpriseConfig ইনস্ট্যান্স সেট-আপ করুন।
    1. setCaCertificates() ব্যবহার করে X509Certificate অবজেক্টের তালিকা সহ সার্ভার শনাক্ত করুন।
    2. ক্লায়েন্ট ক্রেডেনশিয়াল, পরিচয় ও পাসওয়ার্ড সেট করুন।
    3. কানেকশন তৈরি করার অংশ হিসেবে এক্সটেনসিবল অথেন্টিকেশন প্রোটোকল (EAP) এবং ফেজ ২ পদ্ধতি সেট করুন।
  4. WifiManager-এর মাধ্যমে নেটওয়ার্ক যোগ করুন।
  5. নেটওয়ার্ক চালু করুন। সেট-আপের সময় WifiManager অটোমেটিক কনফিগারেশন সেভ করে।

এই উদাহরণে সবকটি ধাপ একসাথে দেখানো হয়েছে:

Kotlin

// Verify the server's identity
val caCert0 = getCaCert("cert0.crt")
val caCert1 = getCaCert("cert1.crt")
val clientKey = getClientKey()
val clientCert = getClientCert()

// Create Wi-Fi configuration
val wifiConfig = WifiConfiguration().apply {
  SSID = "mynetwork"
  allowedKeyManagement.set(KeyMgmt.WPA_EAP)
  allowedKeyManagement.set(KeyMgmt.IEEE8021X)

  // Set up Wi-Fi enterprise configuration
  enterpriseConfig.setCaCertificates(arrayOf<X509Certificate>(caCert0, caCert1))
  enterpriseConfig.setClientKeyEntry(clientKey, clientCert)
  enterpriseConfig.setIdentity("myusername")
  enterpriseConfig.setEapMethod(Eap.TLS)
  enterpriseConfig.setPhase2Method(Phase2.NONE)
}


// Add network
val wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager
val netId = wifiManager.addNetwork(wifiConfig)

// Enable network
if (netId < 0) {
  // Error creating new network
} else {
  wifiManager.enableNetwork(netId, true)
}

জাভা

// Verify the server's identity
X509Certificate caCert0 = getCaCert("cert0.crt");
X509Certificate caCert1 = getCaCert("cert1.crt");
PrivateKey clientKey = getClientKey();
X509Certificate clientCert = getClientCert();

// Create Wi-Fi configuration
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = "mynetwork";
wifiConfig.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
wifiConfig.allowedKeyManagement.set(KeyMgmt.IEEE8021X);

// Set up Wi-Fi enterprise configuration
wifiConfig.enterpriseConfig.setCaCertificates(new X509Certificate[] {caCert0, caCert1});
wifiConfig.enterpriseConfig.setClientKeyEntry(clientKey, clientCert);
wifiConfig.enterpriseConfig.setIdentity("myusername");
wifiConfig.enterpriseConfig.setEapMethod(Eap.TLS);
wifiConfig.enterpriseConfig.setPhase2Method(Phase2.NONE);

// Add network
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
int netId = wifiManager.addNetwork(wifiConfig);

// Enable network
if (netId < 0) {
  // Error creating new network
} else {
  wifiManager.enableNetwork(netId, true);
}

অফিস প্রোফাইলের জন্য আলাদা ডায়ালার নির্দিষ্ট করুন

আপনি অফিস প্রোফাইলে ব্যবহার করার জন্য একটি আলাদা ডায়ালার অ্যাপ্লিকেশনকে অনুমোদিত তালিকায় যোগ করতে পারেন। এটি ডায়ালার নিজেই হতে পারে অথবা ভয়েস ওভার IP (VoIP) অ্যাপ হতে পারে যা কলিং ব্যাকএন্ডের জন্য ConnectionService API প্রয়োগ করে। এটি অফিস প্রোফাইলে VoIP অ্যাপ্লিকেশনে একই ইন্টিগ্রেটেড সিস্টেম UI ডায়ালিংয়ের অভিজ্ঞতা প্রদান করে, যা কার্যকরভাবে অফিস ডায়ালারকে একটি মূল ফিচার করে তোলে। অফিসের কলিং অ্যাকাউন্টে আসা ইনকামিং কল ব্যক্তিগত কলিং অ্যাকাউন্টে আসা ইনকামিং কলের থেকে আলাদা।

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

থার্ড-পার্টি অ্যাপকে অবশ্যই ConnectionService প্রয়োগ করতে হবে

থার্ড-পার্টি VoIP অ্যাপ যেগুলিকে ফোন কল করতে হয় এবং সেইসব কল বিল্ট-ইন ফোন অ্যাপে ইন্টিগ্রেট করতে হয়, সেগুলি ConnectionService API প্রয়োগ করতে পারে। অফিসিয়াল কল করার জন্য ব্যবহৃত যেকোনও VoIP পরিষেবার জন্য এটি প্রয়োজন। এইসব অ্যাপের কল প্রথাগত সেলুলার কলের মতো ট্রিট করা হলে সুবিধা হয়, যেমন, এগুলি বিল্ট-ইন সিস্টেম ডায়ালার ও কল লগে দেখা যায়। ConnectionService অ্যাপটি অফিস প্রোফাইলে ইনস্টল করা থাকলে, এটি শুধুমাত্র সেই অফিস প্রোফাইলে ইনস্টল করা ডায়ালার দ্বারা অ্যাক্সেস করা যায়।

ডেভেলপার ConnectionService প্রয়োগ করার পরে, তাকে এটি অ্যাপের ম্যানিফেস্ট ফাইলে যোগ করতে হবে এবং TelecomManager-এর সাথে PhoneAccount রেজিস্টার করতে হবে। ফোন অ্যাকাউন্ট হল ফোন কল করা বা রিসিভ করার একটি স্বতন্ত্র পদ্ধতি, এবং প্রতিটি ConnectionService-এর জন্য একাধিক PhoneAccounts থাকতে পারে। ফোন অ্যাকাউন্ট রেজিস্টার করার পরে, ব্যবহারকারী ডায়ালার সেটিংসের মাধ্যমে এটি চালু করতে পারবেন।

সিস্টেম UI ইন্টিগ্রেশন ও বিজ্ঞপ্তি

সিস্টেম UI ব্যবহারকারীদের থার্ড-পার্টি অ্যাপের জন্য একটি সামঞ্জস্যপূর্ণ এবং ইন্টিগ্রেটেড ডায়ালিং অভিজ্ঞতা প্রদান করে যা কল করার জন্য ব্যাকএন্ড হিসেবে ConnectionService API ব্যবহার করে। অফিস প্রোফাইলে অ্যাপটি ব্যবহার করলে, ইনকামিং কল এবং স্ট্যাটাস বারে একটি ব্রিফকেস আইকন দেখা যায়। অফিস প্রোফাইলে ইনস্টল করা ConnectionService প্রয়োগ করে এমন অ্যাপ সিস্টেম ডায়ালার ব্যবহার করতে পারে অথবা আলাদা অফিস ডায়ালার তৈরি করতে পারে। এগুলি একটি অ্যাপ বা আলাদা আলাদা অ্যাপ হতে পারে।

ডায়ালার অ্যাপ্লিকেশন, android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL ফ্ল্যাগ চেক করে অফিসের কল করা বা রিসিভ করা হচ্ছে কিনা তা নির্ধারণ করে। কলটি অফিসের কল হলে, ডায়ালার ব্যবহারকারীকে এটি বোঝাতে একটি অফিসের ব্যাজ (ব্রিফকেস আইকন) যোগ করে:

Kotlin

// Call placed through a work phone account. getCurrentCall() is defined by the
// dialer.
val call = getCurrentCall()
if (call.hasProperty(android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL)) {
  // Set briefcase icon
}

জাভা

// Call placed through a work phone account. getCurrentCall() is defined by the
// dialer.
Call call = getCurrentCall();
if (call.hasProperty(android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL)) {
  // Set briefcase icon
}