তৃতীয় পক্ষের কলিং অ্যাপগুলিকে সমর্থন করে

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

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

অ্যান্ড্রয়েড ৯-এ, থার্ড-পার্টি কলিং অ্যাপগুলোকে সেলফ-ম্যানেজড ConnectionService ক্লাসটি ইমপ্লিমেন্ট করতে উৎসাহিত করা হয়। এই ক্লাসটি ব্যবহার করে কীভাবে একটি কলিং অ্যাপ তৈরি করা যায় সে সম্পর্কে আরও তথ্যের জন্য, “Core-Telecom লাইব্রেরি ব্যবহার করে একটি কলিং অ্যাপ তৈরি করুন” দেখুন।

সেলফ-ম্যানেজড ConnectionService ক্লাসটি ডেভেলপারদেরকে তাদের অ্যাপের কলগুলোকে সিস্টেম কল লগে লগ করার জন্য অপ্ট-ইন করার সুযোগও দেয় (দেখুন EXTRA_LOG_SELF_MANAGED_CALLS )। অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট (CDD)-এর (সেকশন ৭.৪.১.২) প্রয়োজনীয়তা অনুসারে, আপনাকে নিশ্চিত করতে হবে যেন আপনার ডায়ালার বা ফোন অ্যাপ এই কল লগ এন্ট্রিগুলো প্রদর্শন করে এবং যে থার্ড-পার্টি কলিং অ্যাপ থেকে কলটি করা হয়েছে তার নাম দেখায় (AOSP ডায়ালার অ্যাপ কীভাবে এই প্রয়োজনীয়তা পূরণ করে তার একটি উদাহরণের জন্য, দেখুন থার্ড-পার্টি কলিং অ্যাপ থেকে কল লগ এন্ট্রি )।

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

দৃশ্যকল্প

নিম্নলিখিত পরিস্থিতিগুলো সামাল দেওয়ার জন্য আপনার ডায়ালার অ্যাপটি পরিবর্তন করা উচিত।

চলমান কল বিচ্ছিন্ন করে এমন ইনকামিং কলগুলি পরিচালনা করুন।

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

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

একটি উদাহরণের জন্য চিত্রে ইউজার ইন্টারফেসটি দেখুন:

ইনকামিং কল একটি চলমান তৃতীয় পক্ষের কল সংযোগ বিচ্ছিন্ন করছে

চিত্র ১। আগত কলের মাধ্যমে চলমান তৃতীয় পক্ষের কল বিচ্ছিন্ন হয়ে যাচ্ছে।

আপনার ডায়ালার অ্যাপ কল এক্সট্রাস চেক করে দেখতে পারে যে, কোনো ইনকামিং কলের কারণে অন্য কোনো কল ডিসকানেক্ট হয়ে যাচ্ছে কি না। নিশ্চিত করুন যে EXTRA_ANSWERING_DROPS_FG_CALL মান TRUE এবং EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME মান সেই অ্যাপের নামে সেট করা আছে, যে অ্যাপের কলটি ইনকামিং মোবাইল কল রিসিভ করার পর ডিসকানেক্ট হয়ে যায়।

তৃতীয় পক্ষের কলিং অ্যাপ থেকে কল লগ এন্ট্রি

থার্ড-পার্টি কলিং অ্যাপের ডেভেলপাররা তাদের অ্যাপে করা কলগুলো সিস্টেম কল লগে নথিভুক্ত করার জন্য সম্মতি জানাতে পারেন (দেখুন EXTRA_LOG_SELF_MANAGED_CALLS )। এর মানে হলো, কল লগে এমন এন্ট্রিও থাকতে পারে যা মোবাইল নেটওয়ার্ক কলের জন্য নয়।

যখন AOSP ডায়ালার অ্যাপ কোনো তৃতীয়-পক্ষের কলিং অ্যাপ সম্পর্কিত কল লগ এন্ট্রি প্রদর্শন করে, তখন কল লগে সেই অ্যাপের নামটি দেখানো হয় যেখান থেকে কলটি করা হয়েছিল, যেমনটি চিত্রে দেখানো হয়েছে:

তৃতীয় পক্ষের কলিং অ্যাপের মাধ্যমে কল লগ এন্ট্রি

চিত্র ২. ডায়ালার অ্যাপে তৃতীয় পক্ষের কলিং অ্যাপের নামসহ কল ​​লগ এন্ট্রি।

কল লগ এন্ট্রির সাথে যুক্ত অ্যাপের নাম নির্ধারণ করতে, কল লগ প্রোভাইডারে থাকা PHONE_ACCOUNT_COMPONENT_NAME এবং PHONE_ACCOUNT_ID কলাম ব্যবহার করে PhoneAccountHandle এর একটি ইনস্ট্যান্স তৈরি করুন, যা কল লগ এন্ট্রির উৎস শনাক্ত করে। PhoneAccount ক্লাসের বিস্তারিত তথ্য পেতে TelecomManager কোয়েরি করুন। কোনো কল লগ এন্ট্রি কোনো থার্ড-পার্টি কলিং অ্যাপ থেকে এসেছে কিনা তা নির্ধারণ করতে, PhoneAccount ক্যাপাবিলিটিজ পরীক্ষা করে দেখুন CAPABILITY_SELF_MANAGED সেট করা আছে কিনা।

ফেরত আসা PhoneAccount এর getLabel মেথডটি থার্ড-পার্টি কলিং অ্যাপের কল লগ এন্ট্রির সাথে যুক্ত অ্যাপটির নাম রিটার্ন করে।

ভিওআইপি কল লগ ইন্টিগ্রেশন নিয়ন্ত্রণ

অ্যান্ড্রয়েড ১৭ (এপিআই লেভেল ৩৭) থেকে, যেসব থার্ড-পার্টি ভিওআইপি কলিং অ্যাপ Core-Telecom এবং CallsManager সাথে ইন্টিগ্রেট করে, তারা তাদের কল হিস্ট্রি সরাসরি নেটিভ অ্যান্ড্রয়েড সিস্টেম কল লগে ( CallLog.Calls ) লিখতে পারে।

অ্যান্ড্রয়েড ইকোসিস্টেম জুড়ে ব্যবহারকারীর গোপনীয়তা এবং ডেটার নিরাপত্তা সামঞ্জস্যপূর্ণ রাখতে, অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট (CDD) অনুসারে, টেলিকম ফিচার ফ্ল্যাগ ( android.software.telecom ) ঘোষণা করা এবং android.app.role.DIALER রোল থাকা সমস্ত অ্যান্ড্রয়েড ১৭ (এপিআই লেভেল ৩৭) ও তার পরবর্তী সংস্করণের ডিভাইসগুলোকে অবশ্যই প্রতি-অ্যাপ ভিওআইপি কল লগ ইন্টিগ্রেশন নিয়ন্ত্রণ সমর্থন করতে হবে।

ডিভাইস বাস্তবায়নের প্রয়োজনীয়তা

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

এই প্রয়োজনীয়তা পূরণ করতে, আপনাকে স্টক প্ল্যাটফর্মের ডিফল্টটি একীভূত করতে হবে:

  • প্ল্যাটফর্ম সেটিংস ইন্টিগ্রেশন: নিশ্চিত করুন যে আপনার ডিভাইসে অ্যান্ড্রয়েড প্ল্যাটফর্মের ( com.android.phone ) ডিফল্টভাবে দেওয়া com.android.phone.settings.PhoneAccountSettingsActivity অন্তর্ভুক্ত আছে।
  • ইনটেন্ট রেজোলিউশনের আবশ্যকতা: আপনার ডিভাইসকে অবশ্যই TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION ( android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION ) ইনটেন্টটিকে স্টক প্ল্যাটফর্ম ম্যানেজমেন্ট স্ক্রিনে রেজোলিউশন করতে হবে।

যখন কোনো অ্যাপ, সিস্টেম প্রম্পট, বা ডিপ লিঙ্ক নিম্নলিখিতটি আহ্বান করে, তখন ইন্টেন্টটিকে অবশ্যই সফলভাবে PhoneAccountSettingsActivity চালু করতে হবে এবং কোনো ActivityNotFoundException থ্রো করা যাবে না:

Intent intent = new Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION);
context.startActivity(intent);

বৈধতা

আপনার ডিভাইসটি থার্ড-পার্টি কলিং অ্যাপ সমর্থন করে কিনা তা পরীক্ষা করতে, টেলিকম টেস্ট অ্যাপটি ব্যবহার করুন, যেটি সেলফ-ম্যানেজড ConnectionService ক্লাসটি ইমপ্লিমেন্ট করে। অ্যাপটি /packages/services/Telecomm/testapps/ -এ অবস্থিত।

  1. আপনার অ্যান্ড্রয়েড সোর্স রিপোজিটরির রুট থেকে নিম্নলিখিত কমান্ড ব্যবহার করে টেস্ট অ্যাপটি বিল্ড করুন:

    mmma packages/services/Telecomm/testapps/

  2. adb install -g -r <apk path> ব্যবহার করে বিল্ড এপিকেটি ইনস্টল করুন। এরপর আপনার লঞ্চারে একটি `Self-Managed Sample` আইকন যুক্ত হবে।

  3. টেস্ট অ্যাপটি খুলতে আইকনটিতে ট্যাপ করুন।

চলমান কল বিচ্ছিন্ন করে এমন ইনকামিং কলগুলি পরিচালনা করুন।

ইনকামিং কলের ফলে চলমান কোনো থার্ড-পার্টি কল বিচ্ছিন্ন হয়ে যায় কিনা, তা যাচাই করতে এই ধাপগুলো অনুসরণ করুন।

তৃতীয় পক্ষের কলিং অ্যাপগুলির জন্য অ্যাপটি পরীক্ষা করুন

চিত্র ৩. ConnectionService ক্লাসের নমুনা বাস্তবায়নসহ টেস্ট অ্যাপ।

  1. হোল্ডেবল অপশনটি আনচেক করুন।
  2. একটি নতুন নমুনা আউটগোয়িং কল শুরু করতে OUTGOING- এ ট্যাপ করুন।
  3. কলটি সক্রিয় করতে ACTIVE বাটনটিতে ট্যাপ করুন।
  4. পরীক্ষাধীন ডিভাইসটির ফোন নম্বরে অন্য একটি ফোন দিয়ে কল করুন। এর ফলে এমন একটি পরিস্থিতি তৈরি হবে যেখানে আপনার ডায়ালারে একটি অ্যাপের নাম চলে আসবে, যার ফলে সেই অ্যাপের কলটি বিচ্ছিন্ন হয়ে যাবে।
  5. আপনার কাজ শেষ হলে, টেস্ট অ্যাপে থাকা ডিসকানেক্ট (DISCONNECT) বোতামটি ট্যাপ করুন।

তৃতীয় পক্ষের কলিং অ্যাপ থেকে কল লগ এন্ট্রি

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

ভিওআইপি কল লগ ইন্টিগ্রেশন নিয়ন্ত্রণ

Android 17 এবং তার পরবর্তী সংস্করণগুলিতে VoIP কল লগ ইন্টিগ্রেশন ইন্টেন্টের আবশ্যকতা পূরণ হচ্ছে কিনা তা যাচাই করতে, CtsTelecomTestCases কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) পরীক্ষাটি চালান। এই পরীক্ষাটি প্যাকেজের সীমানা জুড়ে যাচাই করে যে TelecomManager#ACTION_CONFIGURE_CALL_LOG_INTEGRATION ( android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION ) পাঠানোর ফলে ডিভাইসে একটি বৈধ এক্সপোর্টেড অ্যাক্টিভিটি হ্যান্ডলার তৈরি হচ্ছে কিনা ( resolveActivity চেক)।