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

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

একটি DPC অ্যাপ ব্যক্তিগত ডিভাইসে প্রোফাইল মালিক মোডে বা সম্পূর্ণরূপে পরিচালিত ডিভাইসে ডিভাইস মালিক মোডে চলতে পারে। এই টেবিলটি নির্দেশ করে যে কোন বৈশিষ্ট্যগুলি উপলব্ধ থাকে যখন DPC প্রোফাইল মালিক মোডে বা ডিভাইস মালিক মোডে চলে:

বৈশিষ্ট্য প্রোফাইল মালিক ডিভাইস মালিক
প্রোফাইল জুড়ে কাজের পরিচিতি অ্যাক্সেস করুন
কাজের ট্রাফিকের জন্য একটি নিরাপদ নেটওয়ার্ক সংযোগ নিশ্চিত করুন
অঞ্চল জুড়ে একটি একক ওয়্যারলেস নেটওয়ার্ক আইডি সেট আপ করুন৷
কাজের প্রোফাইলের জন্য একটি পৃথক ডায়ালার উল্লেখ করুন

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

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

সিস্টেম UI এর সাথে ইন্টিগ্রেটেড

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

অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট (CDD) ডিফল্ট ডায়ালারে কাজের পরিচিতিগুলির জন্য প্রয়োজনীয়তাগুলি এবং প্রয়োজনীয়তাগুলিকে অন্তর্ভুক্ত করে যে পরিচিতিগুলি এবং মেসেজিং অ্যাপগুলিকে তারা কাজের প্রোফাইল থেকে এসেছে তা নির্দেশ করার জন্য ব্যাজ করা হয়েছে৷

কাজের পরিচিতিগুলি অ্যাক্সেসযোগ্য এবং অনুসন্ধানযোগ্য

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

প্রাথমিক প্রোফাইলে কাজের পরিচিতিগুলি নিয়ন্ত্রণ করুন

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

ব্যক্তিগত প্রোফাইল দ্বারা কাজের পরিচিতিগুলি অনুসন্ধান করা ডিফল্টরূপে সক্ষম থাকে৷

কাজের ট্রাফিকের জন্য একটি নিরাপদ নেটওয়ার্ক সংযোগ নিশ্চিত করুন

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

সর্বদা চালু ভিপিএন সংযোগ সম্পর্কে

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

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

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

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

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

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

সর্বদা-চালু VPN সংযোগ সক্ষম করুন৷

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

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

সর্বদা চালু ভিপিএন সংযোগ যাচাই করুন

ডিপিসি DevicePolicyManager.getAlwaysOnVpnPackage() .

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

উদাহরণ

TestDPC অ্যাপে, AlwaysOnVpnFragment.java একটি সর্বদা চালু ভিপিএন সংযোগের জন্য সেটিং সক্ষম করতে এই APIগুলি ব্যবহার করে৷

নিম্নলিখিত উদাহরণে:

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

কোটলিন

// 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 (জেলি বিন) থেকে setCaCertificate সমর্থন করেছে, তবে আইটি প্রশাসকদের অবশ্যই প্রতিটি CA এর সাথে আলাদাভাবে তাদের নেটওয়ার্কের ব্যবস্থা করতে হবে যাতে ডিভাইসগুলি তাদের অঞ্চল নির্বিশেষে প্রতিটি অ্যাক্সেস পয়েন্টে নির্বিঘ্ন প্রমাণীকরণ করে।

সার্ভার সনাক্ত করতে CA শংসাপত্রগুলি নির্দিষ্ট করুন৷

X.509 সার্টিফিকেটের একটি তালিকা নির্দিষ্ট করতে যা একই SSID ব্যবহার করে সার্ভারকে শনাক্ত করে, 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) এবং ফেজ 2 পদ্ধতি সেট করুন।
  4. WifiManager দিয়ে নেটওয়ার্ক যোগ করুন।
  5. নেটওয়ার্ক সক্রিয় করুন। WifiManager সেটআপের সময় স্বয়ংক্রিয়ভাবে কনফিগারেশন সংরক্ষণ করে।

এই উদাহরণটি ধাপগুলিকে একত্রিত করে:

কোটলিন

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

কাজের প্রোফাইলের জন্য একটি পৃথক ডায়ালার উল্লেখ করুন

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

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

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

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

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

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

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

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

কোটলিন

// 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
}