কোর-টেলিকম

Core-Telecom লাইব্রেরি আপনার কলিং অ্যাপ্লিকেশনকে অ্যান্ড্রয়েড প্ল্যাটফর্মের সাথে একীভূত করার প্রক্রিয়াটিকে সুগম করে এবং এপিআইগুলির একটি শক্তিশালী সেট প্রদান করে

আপনি যদি ব্যবহারিক বাস্তবায়নগুলি অন্বেষণ করতে চান, আপনি GitHub-এ নমুনা অ্যাপ্লিকেশনগুলি খুঁজে পেতে পারেন:

কোর-টেলিকম সেট আপ করুন

আপনার অ্যাপের build.gradle ফাইলে androidx.core:core-telecom নির্ভরতা যোগ করুন:

dependencies {
    implementation ("androidx.core:core-telecom:1.0.0")
}

আপনার AndroidManifest.xmlMANAGE_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

যখন একটি দূরবর্তী ক্রিয়া ঘটে, তখন সংশ্লিষ্ট ল্যাম্বডাকে আহ্বান করা হয়।

ল্যাম্বডা সিগন্যালের সফল সমাপ্তি যে কমান্ডটি প্রক্রিয়া করা হয়েছিল। যদি আদেশ মান্য করা না যায়, ল্যাম্বদা একটি ব্যতিক্রম নিক্ষেপ করা উচিত.

সঠিক বাস্তবায়ন বিভিন্ন ডিভাইস জুড়ে বিরামহীন কল নিয়ন্ত্রণ নিশ্চিত করে। বিভিন্ন দূরবর্তী পৃষ্ঠের সাথে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন।