থার্ড-পার্টি কলিং অ্যাপকে আরও ভালোভাবে সহায়তা করতে Android 9 API প্রদান করে। থার্ড-পার্টি
কলিং অ্যাপ সাধারণত টেলিফোনি API-এর উপর নির্ভর করে, যেমন PHONE_STATE
ব্রডকাস্ট, যাতে ক্যারিয়ার ফোন কলের পাশাপাশি সহাবস্থান করা যায়। এর ফলে,
থার্ড-পার্টি কলিং অ্যাপকে অবশ্যই ক্যারিয়ার কলকে অগ্রাধিকার দিতে হবে এবং প্রায়ই
অ্যাপে ইনকামিং কল সাইলেন্টলি প্রত্যাখ্যান করতে হবে অথবা ক্যারিয়ার কলের জন্য
অনগোয়িং কল বন্ধ করতে হবে।
Android 9-এর API থার্ড-পার্টি অ্যাপ ও পরিষেবা প্রদানকারীর কলের মধ্যে একই সাথে কল করার পরিস্থিতিকে সাপোর্ট করে। এর ফলে, যেমন, কোনও ক্যারিয়ার কল চলাকালীন থার্ড-পার্টির ইনকামিং কল রিসিভ করা সম্ভব হয়। ব্যবহারকারী থার্ড-পার্টি কলে ব্যস্ত থাকলে, ফ্রেমওয়ার্ক ক্যারিয়ার কল হোল্ডে রাখার দায়িত্ব নেয়।
Android 9-এ, থার্ড-পার্টি কলিং অ্যাপগুলিকে
সেল্ফ-ম্যানেজড ConnectionService ক্লাস প্রয়োগ করার জন্য উৎসাহিত করা হয়। এই ক্লাস ব্যবহার করে কীভাবে কলিং অ্যাপ তৈরি করতে হয় সেই সম্পর্কে আরও জানতে, Core-Telecom
লাইব্রেরি ব্যবহার করে কলিং অ্যাপ তৈরি করুন দেখুন।
সেল্ফ-ম্যানেজড ConnectionService ক্লাস ডেভেলপারদের তাদের অ্যাপে করা কল সিস্টেম কল লগে লগ করার জন্য অপ্ট-ইন করার সুযোগও দেয় (EXTRA_LOG_SELF_MANAGED_CALLS দেখুন)। Android Compatibility Definition Document (CDD) (বিভাগ ৭.৪.১.২)-এর প্রয়োজনীয়তা অনুসারে, আপনাকে নিশ্চিত করতে হবে যে আপনার ডায়ালার বা ফোন অ্যাপ এইসব কল লগ এন্ট্রি দেখায় এবং থার্ড-পার্টি কলিং অ্যাপের নাম দেখায় যেখান থেকে কলটি করা হয়েছে (AOSP ডায়ালার অ্যাপ কীভাবে এই প্রয়োজনীয়তা পূরণ করে তার উদাহরণের জন্য, থার্ড-পার্টি কলিং অ্যাপ থেকে কল লগ এন্ট্রি দেখুন)।
অ্যাপের কানেকশনে CAPABILITY_SUPPORT_HOLD ও
CAPABILITY_HOLD সেট করার দায়িত্ব অ্যাপের। তবে, কিছু পরিস্থিতিতে কোনও অ্যাপ কল হোল্ডে রাখতে নাও পারে। এই ধরনের সমস্যা সমাধানের জন্য
ফ্রেমওয়ার্কে ব্যবস্থা রয়েছে।
পরিস্থিতি
নিম্নলিখিত পরিস্থিতিগুলি সামলানোর জন্য আপনাকে নিজের ডায়ালার অ্যাপ পরিবর্তন করতে হবে।
চলমান কল ডিসকানেক্ট করে দেয় এমন ইনকামিং কল ম্যানেজ করা
এমন পরিস্থিতিতে যেখানে একটি চলমান থার্ড-পার্টি কল (যেমন, SuperCaller কলে) হোল্ড করার সুবিধা নেই এবং ব্যবহারকারী একটি মোবাইল কল পান (যেমন, তার পরিষেবা প্রদানকারী FooCom ব্যবহার করে), আপনার ডায়ালার বা ফোন অ্যাপ ব্যবহারকারীকে জানাবে যে মোবাইল নেটওয়ার্ক কলের উত্তর দিলে চলমান থার্ড-পার্টি কলটি শেষ হয়ে যাবে।
এই ব্যবহারকারীর অভিজ্ঞতা গুরুত্বপূর্ণ কারণ থার্ড-পার্টি কলিং অ্যাপে চলমান কল থাকতে পারে যা ফ্রেমওয়ার্কের মাধ্যমে হোল্ডে রাখা যায় না। নতুন মোবাইল কলের উত্তর দিলে চলমান থার্ড-পার্টি কল ডিসকানেক্ট হয়ে যায়।
উদাহরণ হিসেবে ছবিতে ইউজার ইন্টারফেস দেখুন:
ছবি ১. ইনকামিং কল চালু থাকা থার্ড-পার্টি কল ডিসকানেক্ট করে দেয়।
আপনার ডায়ালার অ্যাপ কল এক্সট্রা চেক করে দেখতে পারে যে ইনকামিং কলের কারণে অন্য কোনও কল ডিসকানেক্ট হয়ে যাচ্ছে কিনা। ভালো করে দেখে নিন যে
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 মেথড থার্ড-পার্টি কলিং অ্যাপ থেকে কল লগ এন্ট্রির সাথে যুক্ত
অ্যাপের নাম রিটার্ন করে।
VoIP কল লগ ইন্টিগ্রেশন কন্ট্রোল
Android 17 (API লেভেল 37) থেকে শুরু করে, Core-Telecom ও CallsManager-এর সাথে ইন্টিগ্রেট করা থার্ড-পার্টি VoIP কলিং অ্যাপ
তাদের কল
ইতিহাস সরাসরি নেটিভ Android সিস্টেম কল লগে (CallLog.Calls) লিখতে পারবে।
Android ইকোসিস্টেম জুড়ে ব্যবহারকারীর গোপনীয়তা ও ডেটা হাইজিন বজায় রাখতে,
সব Android 17 (API লেভেল 37) ও এর পরের যেকোনও ভার্সনের ডিভাইস যেগুলি টেলিকম
ফিচার ফ্ল্যাগ (android.software.telecom) ঘোষণা করে এবং যেগুলিতে android.app.role.DIALER
ভূমিকা আছে, সেগুলিতে Android
Compatibility Definition Document (CDD) অনুযায়ী অ্যাপ-পিছু VoIP কল লগ ইন্টিগ্রেশন কন্ট্রোল থাকতে হবে।
ডিভাইস প্রয়োগ সংক্রান্ত প্রয়োজনীয়তা
ডিভাইসে অবশ্যই ব্যবহারকারীর অ্যাক্সেসযোগ্য সেটিংস স্ক্রিন থাকতে হবে (সাধারণত এটি সেটিংস > কলিং অ্যাকাউন্ট > ইন্টিগ্রেটেড কল লগ বিকল্পের মধ্যে থাকে) যা ব্যবহারকারীকে আলাদা আলাদা থার্ড-পার্টি VoIP অ্যাপের জন্য কল লগ ইন্টিগ্রেশন দেখতে ও টগল করতে দেয়।
এই প্রয়োজনীয়তা পূরণ করতে, আপনাকে অবশ্যই স্টক প্ল্যাটফর্ম ডিফল্ট ইন্টিগ্রেট করতে হবে:
- প্ল্যাটফর্ম সেটিংস ইন্টিগ্রেশন: আপনার ডিভাইসে
com.android.phone.settings.PhoneAccountSettingsActivityঅন্তর্ভুক্ত আছে কিনা তা নিশ্চিত করুন, যা Android প্ল্যাটফর্ম আউট-অফ-দ্য-বক্স (com.android.phone) দ্বারা প্রদান করা হয়। - ইনটেন্ট রেজোলিউশন সংক্রান্ত প্রয়োজনীয়তা: আপনার ডিভাইসকে অবশ্যই
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);
যাচাইকরণ
আপনার ডিভাইস থার্ড-পার্টি কলিং অ্যাপ সাপোর্ট করে কিনা তা পরীক্ষা করতে, Telecomm
পরীক্ষা অ্যাপ ব্যবহার করুন, যা সেল্ফ-ম্যানেজড ConnectionService ক্লাস প্রয়োগ করে। অ্যাপটি
/packages/services/Telecomm/testapps/-এ
রয়েছে।
নিম্নলিখিত কমান্ড ব্যবহার করে আপনার Android সোর্স রিপোজিটরি থেকে টেস্ট অ্যাপ তৈরি করুন:
mmma packages/services/Telecomm/testapps/adb install -g -r <apk path>ব্যবহার করে বিল্ড apk ইনস্টল করুন। তারপরে আপনার লঞ্চারে একটি সেল্ফ-ম্যানেজড স্যাম্পেল আইকন যোগ করা হয়।টেস্ট অ্যাপ খুলতে আইকনে ট্যাপ করুন।
চলমান কল ডিসকানেক্ট করে দেয় এমন ইনকামিং কল ম্যানেজ করা
ইনকামিং কলের ফলে চলমান থার্ড-পার্টি কল ডিসকানেক্ট হয়ে যায় কিনা তা যাচাই করতে এইসব ধাপ অনুসরণ করুন।
ছবি ৩. ConnectionService ক্লাসের স্যাম্পেল প্রয়োগের মাধ্যমে অ্যাপ পরীক্ষা করুন।
- হোল্ডেবল বিকল্পটি মুছে দিন।
- নতুন নমুনা আউটগোয়িং কল শুরু করতে আউটগোয়িং বিকল্পে ট্যাপ করুন।
- কলটি চালু করতে চালু করুন বোতামে ট্যাপ করুন।
- অন্য ফোন থেকে টেস্ট করা হচ্ছে এমন ডিভাইসের ফোন নম্বরে কল করুন। এটি এমন পরিস্থিতি তৈরি করে যেখানে আপনার ডায়ালারে একটি অ্যাপের নাম দেওয়া হয়, যার কল ডিসকানেক্ট করা হবে।
- সম্পূর্ণ হয়ে গেলে, টেস্ট অ্যাপে ডিসকানেক্ট করুন বোতামে ট্যাপ করুন।
থার্ড-পার্টি কলিং অ্যাপ থেকে কল লগ এন্ট্রি
উপরের ধাপগুলি সম্পূর্ণ করার পরে, টেস্ট অ্যাপটি সিস্টেম কল লগে একটি কল লগ করেছে কিনা তা চেক করুন। ডিভাইসটি থার্ড-পার্টি কলিং অ্যাপ থেকে কল লগ করে কিনা তা কনফার্ম করতে, আপনার ডায়ালার অ্যাপ খুলুন এবং সিস্টেম কল লগে কলটি দেখা যাচ্ছে কিনা তা কনফার্ম করুন।
VoIP কল লগ ইন্টিগ্রেশন কন্ট্রোল
Android 17 এবং তার পরবর্তী ভার্সনে VoIP কল লগ ইন্টিগ্রেশন ইনটেন্ট সংক্রান্ত প্রয়োজনীয়তা মেনে চলা হচ্ছে কিনা তা যাচাই করতে, CtsTelecomTestCases কম্প্যাটিবিলিটি টেস্ট স্যুট
(CTS) টেস্ট রান করুন। এই পরীক্ষাটি প্যাকেজ সীমানা জুড়ে যাচাই করে যে পাঠানোর
TelecomManager#ACTION_CONFIGURE_CALL_LOG_INTEGRATION
(android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) ফলে ডিভাইসে
একটি বৈধ এক্সপোর্ট করা অ্যাক্টিভিটি হ্যান্ডলার (resolveActivity চেক) সমাধান হয়।