Core-Telecom
লাইব্রেরি আপনার কলিং অ্যাপ্লিকেশনকে অ্যান্ড্রয়েড প্ল্যাটফর্মের সাথে একীভূত করার প্রক্রিয়াটিকে সুগম করে এবং এপিআইগুলির একটি শক্তিশালী সেট প্রদান করে
আপনি যদি ব্যবহারিক বাস্তবায়নগুলি অন্বেষণ করতে চান, আপনি GitHub-এ নমুনা অ্যাপ্লিকেশনগুলি খুঁজে পেতে পারেন:
- লাইটওয়েট নমুনা অ্যাপ -
Core-Telecom
API ব্যবহার প্রদর্শনের একটি ন্যূনতম উদাহরণ। মৌলিক ধারণাগুলি দ্রুত বোঝার জন্য আদর্শ। - ব্যাপক নমুনা অ্যাপ (কোর-টেলিকম টিম দ্বারা তৈরি) — উন্নত টেলিকম কার্যকারিতা এবং সর্বোত্তম অনুশীলনগুলি প্রদর্শন করে আরও বৈশিষ্ট্য সমৃদ্ধ অ্যাপ্লিকেশন। জটিল ইন্টিগ্রেশন পরিস্থিতি বোঝার জন্য এটি একটি দুর্দান্ত সম্পদ।
কোর-টেলিকম সেট আপ করুন
আপনার অ্যাপের build.gradle
ফাইলে androidx.core:core-telecom
নির্ভরতা যোগ করুন:
dependencies {
implementation ("androidx.core:core-telecom:1.0.0")
}
আপনার AndroidManifest.xml
এ MANAGE_OWN_CALLS
অনুমতি ঘোষণা করুন:
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
আপনার অ্যাপ নিবন্ধন করুন
সিস্টেমে কল যোগ করা শুরু করতে CallsManager
ব্যবহার করে Android এর সাথে আপনার কলিং অ্যাপ নিবন্ধন করুন। নিবন্ধন করার সময়, আপনার অ্যাপের ক্ষমতা নির্দিষ্ট করুন (উদাহরণস্বরূপ, অডিও, ভিডিও সমর্থন):
val callsManager = CallsManager(context)
val capabilities: @CallsManager.Companion.Capability Int =
(CallsManager.CAPABILITY_BASELINE or
CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING)
callsManager.registerAppWithTelecom(capabilities)
কল ব্যবস্থাপনা
একটি কল লাইফসাইকেল তৈরি এবং পরিচালনা করতে Core-Telecom APIs ব্যবহার করুন।
একটি কল তৈরি করুন
CallAttributesCompat
অবজেক্ট একটি অনন্য কলের বৈশিষ্ট্যগুলিকে সংজ্ঞায়িত করে, যার নিম্নলিখিত বৈশিষ্ট্য থাকতে পারে:
-
displayName
: কলার নাম। -
address
: কল ঠিকানা (উদাহরণস্বরূপ, ফোন নম্বর, মিটিং লিঙ্ক)। -
direction
: আগত বা বহির্গামী। -
callType
: অডিও বা ভিডিও। -
callCapabilities
: স্থানান্তর এবং ধরে রাখা সমর্থন করে।
কিভাবে একটি ইনকামিং কল তৈরি করতে হয় তার একটি উদাহরণ এখানে দেওয়া হল:
fun createIncomingCallAttributes(
callerName: String,
callerNumber: String,
isVideoCall: Boolean): CallAttributesCompat {
val addressUri = Uri.parse("YourAppScheme:$callerNumber")
// Define capabilities supported by your call.
val callCapabilities = CallAttributesCompat.CallCapability(
supportsSetInactive = CallAttributesCompat.SUPPORTS_SET_INACTIVE // Call can be made inactive (implies hold)
)
return CallAttributesCompat(
displayName = callerName,
address = addressUri,
direction = CallAttributesCompat.DIRECTION_INCOMING,
callType = if (isVideoCall) CallAttributesCompat.CALL_TYPE_VIDEO_CALL else CallAttributesCompat.CALL_TYPE_AUDIO_CALL,
callCapabilitiesCompat = callCapabilities
)
}
একটি কল যোগ করুন
সিস্টেমে একটি নতুন কল যোগ করতে এবং দূরবর্তী পৃষ্ঠের আপডেটগুলি পরিচালনা করতে CallAttributesCompat
এবং কলব্যাক সহ callsManager.addCall
ব্যবহার করুন৷ addCall
ব্লকের মধ্যে থাকা callControlScope
প্রাথমিকভাবে আপনার অ্যাপটিকে কলের অবস্থা পরিবর্তন করতে এবং অডিও আপডেট পেতে অনুমতি দেয়:
try {
callsManager.addCall(
INCOMING_CALL_ATTRIBUTES,
onAnswerCall, // Watch needs to know if it can answer the call.
onSetCallDisconnected,
onSetCallActive,
onSetCallInactive
) {
// The call was successfully added once this scope runs.
callControlScope = this
}
}
catch(addCallException: Exception){
// Handle the addCall failure.
}
একটি কল উত্তর
CallControlScope
এর মধ্যে একটি ইনকামিং কলের উত্তর দিন:
when (val result = answer(CallAttributesCompat.CALL_TYPE_AUDIO_CALL)) {
is CallControlResult.Success -> { /* Call answered */ }
is CallControlResult.Error -> { /* Handle error */ }
}
একটি কল প্রত্যাখ্যান করুন
DisconnectCause.REJECTED
সাথে disconnect()
ব্যবহার করে একটি কল প্রত্যাখ্যান করুন CallControlScope
মধ্যে REJECTED:
disconnect(DisconnectCause(DisconnectCause.REJECTED))
একটি বহির্গামী কল সক্রিয় করুন
একবার রিমোট পার্টি উত্তর দিলে একটি বহির্গামী কল সক্রিয় করতে সেট করুন:
when (val result = setActive()) {
is CallControlResult.Success -> { /* Call active */ }
is CallControlResult.Error -> { /* Handle error */ }
}
হোল্ডে একটি কল রাখুন
একটি কল হোল্ডে রাখতে setInactive()
ব্যবহার করুন:
when (val result = setInactive()) {
is CallControlResult.Success -> { /* Call on hold */ }
is CallControlResult.Error -> { /* Handle error */ }
}
একটি কল সংযোগ বিচ্ছিন্ন করুন
একটি DisconnectCause
দিয়ে disconnect()
ব্যবহার করে একটি কল সংযোগ বিচ্ছিন্ন করুন:
disconnect(DisconnectCause(DisconnectCause.LOCAL))
কল অডিও এন্ডপয়েন্ট পরিচালনা করুন
CallControlScope
এর মধ্যে currentCallEndpoint
, availableEndpoints
, এবং isMuted
Flow
ব্যবহার করে অডিও এন্ডপয়েন্টগুলি পর্যবেক্ষণ ও পরিচালনা করুন
fun observeAudioStateChanges(callControlScope: CallControlScope) {
with(callControlScope) {
launch { currentCallEndpoint.collect { /* Update UI */ } }
launch { availableEndpoints.collect { /* Update UI */ } }
launch { isMuted.collect { /* Handle mute state */ } }
}
}
requestEndpointChange()
ব্যবহার করে সক্রিয় অডিও ডিভাইস পরিবর্তন করুন:
coroutineScope.launch {
callControlScope.requestEndpointChange(callEndpoint)
}
ফোরগ্রাউন্ড সমর্থন
লাইব্রেরিটি ফোরগ্রাউন্ড সমর্থনের জন্য ConnectionService
(Android 13 API স্তর 33 এবং নিম্ন) বা foregroundtypes (Android 14 API স্তর 34 এবং উচ্চতর) ব্যবহার করে।
ফোরগ্রাউন্ড প্রয়োজনীয়তার অংশ হিসাবে, অ্যাপ্লিকেশনটিকে অবশ্যই একটি বিজ্ঞপ্তি পোস্ট করতে হবে যাতে ব্যবহারকারীরা জানতে পারেন যে অ্যাপ্লিকেশনটি ফোরগ্রাউন্ডে চলছে।
আপনার অ্যাপ ফোরগ্রাউন্ড এক্সিকিউশনের অগ্রাধিকার পায় তা নিশ্চিত করতে, একবার আপনি প্ল্যাটফর্মের সাথে কল যোগ করার পরে একটি বিজ্ঞপ্তি তৈরি করুন। যখন আপনার অ্যাপ কলটি বন্ধ করে দেয় বা আপনার বিজ্ঞপ্তি আর বৈধ থাকে না তখন ফোরগ্রাউন্ড অগ্রাধিকার সরানো হয়।
ফোরগ্রাউন্ড পরিষেবা সম্পর্কে আরও জানুন ।
দূরবর্তী পৃষ্ঠ সমর্থন
দূরবর্তী ডিভাইস (স্মার্টওয়াচ, ব্লুটুথ হেডসেট, অ্যান্ড্রয়েড অটো) সরাসরি ফোন ইন্টারঅ্যাকশন ছাড়াই কল পরিচালনা করতে সক্ষম। এই ডিভাইসগুলি দ্বারা শুরু করা ক্রিয়াগুলি পরিচালনা করতে আপনার অ্যাপটিকে অবশ্যই কলব্যাক ল্যাম্বডাস ( onAnswerCall
, onSetCallDisconnected
, onSetCallActive
, onSetCallInactive
) প্রদান করতে হবে CallsManager.addCall
যখন একটি দূরবর্তী ক্রিয়া ঘটে, তখন সংশ্লিষ্ট ল্যাম্বডাকে আহ্বান করা হয়।
ল্যাম্বডা সিগন্যালের সফল সমাপ্তি যে কমান্ডটি প্রক্রিয়া করা হয়েছিল। যদি আদেশ মান্য করা না যায়, ল্যাম্বদা একটি ব্যতিক্রম নিক্ষেপ করা উচিত.
সঠিক বাস্তবায়ন বিভিন্ন ডিভাইস জুড়ে বিরামহীন কল নিয়ন্ত্রণ নিশ্চিত করে। বিভিন্ন দূরবর্তী পৃষ্ঠের সাথে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন।