একটি কলিং অ্যাপ তৈরি করুন

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

একটি কলিং অ্যাপের উদাহরণ
নিজস্ব ইউজার ইন্টারফেস ব্যবহার করে একটি কলিং অ্যাপের উদাহরণ

অ্যান্ড্রয়েড ফ্রেমওয়ার্কের মধ্যে রয়েছে android.telecom প্যাকেজ, যেটিতে ক্লাস রয়েছে যা আপনাকে টেলিকম ফ্রেমওয়ার্ক অনুযায়ী একটি কলিং অ্যাপ তৈরি করতে সাহায্য করে। টেলিকম ফ্রেমওয়ার্ক অনুযায়ী আপনার অ্যাপ তৈরি করা নিম্নলিখিত সুবিধাগুলি প্রদান করে:

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

ম্যানিফেস্ট ঘোষণা এবং অনুমতি

আপনার অ্যাপ ম্যানিফেস্টে ঘোষণা করুন যে আপনার অ্যাপ MANAGE_OWN_CALLS অনুমতি ব্যবহার করে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<manifest … >
    <uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
</manifest>

অ্যাপ অনুমতি ঘোষণা সম্পর্কে আরও তথ্যের জন্য, অনুমতি দেখুন।

আপনাকে অবশ্যই এমন একটি পরিষেবা ঘোষণা করতে হবে যা আপনার অ্যাপে ConnectionService ক্লাস প্রয়োগ করে এমন ক্লাস নির্দিষ্ট করে। টেলিকম সাবসিস্টেমের প্রয়োজন যে পরিষেবাটি এটির সাথে আবদ্ধ হতে সক্ষম হওয়ার জন্য BIND_TELECOM_CONNECTION_SERVICE অনুমতি ঘোষণা করে৷ নিম্নলিখিত উদাহরণটি আপনার অ্যাপ ম্যানিফেস্টে পরিষেবাটি কীভাবে ঘোষণা করবেন তা দেখায়:

<service android:name="com.example.MyConnectionService"
    android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
    <intent-filter>
        <action android:name="android.telecom.ConnectionService" />
    </intent-filter>
</service>

পরিষেবাগুলি সহ অ্যাপের উপাদানগুলি ঘোষণা করার বিষয়ে আরও তথ্যের জন্য, অ্যাপ উপাদানগুলি দেখুন৷

সংযোগ পরিষেবা বাস্তবায়ন করুন

আপনার কলিং অ্যাপটিকে অবশ্যই ConnectionService ক্লাসের একটি বাস্তবায়ন প্রদান করতে হবে যা টেলিকম সাবসিস্টেম আবদ্ধ করতে পারে। আপনার ConnectionService বাস্তবায়ন নিম্নলিখিত পদ্ধতি ওভাররাইড করা উচিত:

onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)

টেলিকম সাবসিস্টেম একটি নতুন আউটগোয়িং কল তৈরি করতে আপনার অ্যাপ কলিং placeCall(Uri, Bundle) এর প্রতিক্রিয়া হিসাবে এই পদ্ধতিটিকে কল করে। নতুন বহির্গামী কলের প্রতিনিধিত্ব করতে আপনার অ্যাপটি আপনার Connection শ্রেণী বাস্তবায়নের একটি নতুন উদাহরণ প্রদান করে (আরো তথ্যের জন্য, সংযোগ বাস্তবায়ন দেখুন)। আপনি নিম্নলিখিত ক্রিয়াগুলি সম্পাদন করে বহির্গামী সংযোগটি আরও কাস্টমাইজ করতে পারেন:

  • আপনার অ্যাপটি একটি কলিং অ্যাপ থেকে সংযোগটি উদ্ভূত হয়েছে তা বোঝাতে আর্গুমেন্ট হিসাবে PROPERTY_SELF_MANAGED ধ্রুবক সহ setConnectionProperties(int) পদ্ধতিতে কল করা উচিত।
  • যদি আপনার অ্যাপ কলগুলি হোল্ডে রাখা সমর্থন করে, setConnectionCapabilities(int) পদ্ধতিতে কল করুন এবং CAPABILITY_HOLD এবং CAPABILITY_SUPPORT_HOLD ধ্রুবকের বিট মাস্ক মানতে আর্গুমেন্ট সেট করুন।
  • কলারের নাম সেট করতে, কলারের নাম দেখানো উচিত তা নির্দেশ করতে int প্যারামিটার হিসাবে PRESENTATION_ALLOWED ধ্রুবক পাস করে setCallerDisplayName(String, int) পদ্ধতি ব্যবহার করুন।
  • বহির্গামী কলের উপযুক্ত ভিডিও অবস্থা আছে তা নিশ্চিত করতে, Connection বস্তুর setVideoState(int) পদ্ধতিতে কল করুন এবং ConnectionRequest অবজেক্টের getVideoState() পদ্ধতি দ্বারা ফেরত মানটি পাঠান।
onCreateOutgoingConnectionFailed(PhoneAccountHandle, ConnectionRequest)

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

onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)

টেলিকম সাবসিস্টেম এই পদ্ধতিটিকে কল করে যখন আপনার অ্যাপ আপনার অ্যাপে একটি নতুন ইনকামিং কলের সিস্টেমকে জানাতে addNewIncomingCall(PhoneAccountHandle, Bundle) পদ্ধতিতে কল করে। নতুন ইনকামিং কলের প্রতিনিধিত্ব করতে আপনার অ্যাপটি আপনার Connection বাস্তবায়নের একটি নতুন উদাহরণ প্রদান করে (আরো তথ্যের জন্য, সংযোগ বাস্তবায়ন দেখুন)। আপনি নিম্নলিখিত ক্রিয়াগুলি সম্পাদন করে ইনকামিং সংযোগটি আরও কাস্টমাইজ করতে পারেন:

  • আপনার অ্যাপটি একটি কলিং অ্যাপ থেকে সংযোগটি উদ্ভূত হয়েছে তা বোঝাতে আর্গুমেন্ট হিসাবে PROPERTY_SELF_MANAGED ধ্রুবক সহ setConnectionProperties(int) পদ্ধতিতে কল করা উচিত।
  • যদি আপনার অ্যাপ কলগুলি হোল্ডে রাখা সমর্থন করে, setConnectionCapabilities(int) পদ্ধতিতে কল করুন এবং CAPABILITY_HOLD এবং CAPABILITY_SUPPORT_HOLD ধ্রুবকের বিট মাস্ক মানতে আর্গুমেন্ট সেট করুন।
  • কলারের নাম সেট করতে, কলারের নাম দেখানো উচিত তা নির্দেশ করতে int প্যারামিটার হিসাবে PRESENTATION_ALLOWED ধ্রুবক পাস করে setCallerDisplayName(String, int) পদ্ধতি ব্যবহার করুন।
  • ইনকামিং কলের ফোন নম্বর বা ঠিকানা নির্দিষ্ট করতে, Connection বস্তুর setAddress(Uri, int) পদ্ধতি ব্যবহার করুন।
  • বহির্গামী কলের উপযুক্ত ভিডিও অবস্থা আছে তা নিশ্চিত করতে, Connection বস্তুর setVideoState(int) পদ্ধতিতে কল করুন এবং ConnectionRequest অবজেক্টের getVideoState() পদ্ধতি দ্বারা ফেরত মানটি পাঠান।
onCreateIncomingConnectionFailed(PhoneAccountHandle, ConnectionRequest)

টেলিকম সাবসিস্টেম এই পদ্ধতিটিকে কল করে যখন আপনার অ্যাপ একটি নতুন ইনকামিং কলের টেলিকমকে জানানোর জন্য addNewIncomingCall(PhoneAccountHandle, Bundle) পদ্ধতিতে কল করে, কিন্তু ইনকামিং কলটি অনুমোদিত নয় (আরো তথ্যের জন্য, কলিং সীমাবদ্ধতা দেখুন)। আপনার অ্যাপটি নিঃশব্দে ইনকামিং কল প্রত্যাখ্যান করা উচিত, ঐচ্ছিকভাবে ব্যবহারকারীকে মিসড কল সম্পর্কে জানানোর জন্য একটি বিজ্ঞপ্তি পোস্ট করে৷

সংযোগ বাস্তবায়ন করুন

আপনার অ্যাপের কলগুলিকে প্রতিনিধিত্ব করতে আপনার অ্যাপটিকে Connection একটি সাবক্লাস তৈরি করা উচিত। আপনার বাস্তবায়নে নিম্নলিখিত পদ্ধতিগুলিকে ওভাররাইড করা উচিত:

onShowIncomingCallUi()

টেলিকম সাবসিস্টেম এই পদ্ধতিতে কল করে যখন আপনি একটি নতুন ইনকামিং কল যোগ করেন এবং আপনার অ্যাপটিকে তার ইনকামিং কল UI দেখাতে হবে।

onCallAudioStateChanged(CallAudioState)

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

onHold()

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

onUnhold()

টেলিকম সাবসিস্টেম এই পদ্ধতিটিকে কল করে যখন এটি হোল্ডে রাখা একটি কল পুনরায় শুরু করতে চায়। একবার আপনার অ্যাপ কলটি পুনরায় চালু করলে, এটি setActive() পদ্ধতিটি চালু করা উচিত যাতে সিস্টেমকে জানানো হয় যে কলটি আর হোল্ডে নেই। টেলিকম সাবসিস্টেম এই পদ্ধতিতে কল করতে পারে যখন একটি ইন-কল পরিষেবা, যেমন অ্যান্ড্রয়েড অটো, যেটি আপনার কলটি পুনরায় চালু করার জন্য একটি অনুরোধ রিলে করতে চায়। ইন-কল পরিষেবা সম্পর্কে আরও তথ্যের জন্য, InCallService দেখুন।

onAnswer()

টেলিকম সাবসিস্টেম এই পদ্ধতিতে কল করে আপনার অ্যাপকে জানাতে যে একটি ইনকামিং কলের উত্তর দেওয়া উচিত। একবার আপনার অ্যাপ কলটির উত্তর দিলে, এটিকে setActive() পদ্ধতিতে কল করা উচিত যাতে সিস্টেমকে জানানো হয় যে কলটির উত্তর দেওয়া হয়েছে। টেলিকম সাবসিস্টেম এই পদ্ধতিতে কল করতে পারে যখন আপনার অ্যাপ একটি নতুন ইনকামিং কল যোগ করে এবং ইতিমধ্যেই অন্য একটি অ্যাপে একটি চলমান কল রয়েছে যা হোল্ডে রাখা যাবে না। এই ক্ষেত্রে টেলিকম সাবসিস্টেম আপনার অ্যাপের পক্ষ থেকে ইনকামিং কল UI প্রদর্শন করে। ফ্রেমওয়ার্ক একটি ওভারলোডেড পদ্ধতি প্রদান করে যা ভিডিও স্টেট নির্দিষ্ট করতে সহায়তা প্রদান করে যেখানে কলটির উত্তর দিতে হবে। আরও তথ্যের জন্য, onAnswer(int) দেখুন।

onReject()

টেলিকম সাবসিস্টেম এই পদ্ধতিটিকে কল করে যখন এটি একটি ইনকামিং কল প্রত্যাখ্যান করতে চায়। একবার আপনার অ্যাপ কলটি প্রত্যাখ্যান করলে, এটি setDisconnected(DisconnectCause) কল করা উচিত এবং প্যারামিটার হিসাবে REJECTED উল্লেখ করা উচিত। আপনার অ্যাপটি তারপরে সিস্টেমকে জানাতে destroy() পদ্ধতিতে কল করবে যে অ্যাপটি কলটি প্রক্রিয়া করেছে। টেলিকম সাবসিস্টেম এই পদ্ধতিতে কল করে যখন ব্যবহারকারী আপনার অ্যাপ থেকে একটি ইনকামিং কল প্রত্যাখ্যান করে।

onDisconnect()

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

সাধারণ কলিং পরিস্থিতি পরিচালনা করুন

আপনার কল ফ্লোতে ConnectionService API ব্যবহার করার জন্য android.telecom প্যাকেজের অন্যান্য ক্লাসের সাথে ইন্টারঅ্যাক্ট করা জড়িত। নিম্নলিখিত বিভাগগুলি সাধারণ কলিং পরিস্থিতিগুলি বর্ণনা করে এবং সেগুলি পরিচালনা করার জন্য আপনার অ্যাপের APIগুলি কীভাবে ব্যবহার করা উচিত।

ইনকামিং কল উত্তর

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

অন্যান্য অ্যাপে কোনো সক্রিয় কল নেই

অন্যান্য অ্যাপে কোনো সক্রিয় কল না থাকলে ইনকামিং কলের উত্তর দিতে, এই ধাপগুলি অনুসরণ করুন:

  1. আপনার অ্যাপ তার স্বাভাবিক প্রক্রিয়া ব্যবহার করে একটি নতুন ইনকামিং কল গ্রহণ করে।
  2. নতুন ইনকামিং কল সম্পর্কে টেলিকম সাবসিস্টেমকে জানাতে addNewIncomingCall(PhoneAccountHandle, Bundle) পদ্ধতি ব্যবহার করুন।
  3. টেলিকম সাবসিস্টেমটি আপনার অ্যাপের ConnectionService বাস্তবায়নের সাথে আবদ্ধ হয় এবং onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest) পদ্ধতি ব্যবহার করে নতুন ইনকামিং কলের প্রতিনিধিত্ব করে Connection ক্লাসের একটি নতুন উদাহরণের অনুরোধ করে।
  4. টেলিকম সাবসিস্টেমটি আপনার অ্যাপকে জানায় যে এটির onShowIncomingCallUi() পদ্ধতি ব্যবহার করে তার ইনকামিং কল ইউজার ইন্টারফেস দেখাতে হবে।
  5. আপনার অ্যাপটি একটি সম্পর্কিত পূর্ণ-স্ক্রীন অভিপ্রায় সহ একটি বিজ্ঞপ্তি ব্যবহার করে তার ইনকামিং UI দেখায়। আরও তথ্যের জন্য, onShowIncomingCallUi() দেখুন।
  6. যদি ব্যবহারকারী ইনকামিং কল গ্রহণ করে তাহলে setActive() পদ্ধতিতে কল করুন, অথবা ব্যবহারকারী যদি ইনকামিং কল প্রত্যাখ্যান করে তাহলে setDisconnected(DisconnectCause) প্যারামিটার হিসাবে REJECTED উল্লেখ করে তারপর destroy() পদ্ধতিতে কল করুন।

অন্যান্য অ্যাপে সক্রিয় কল যা হোল্ডে রাখা যাবে না

অন্যান্য অ্যাপ্লিকেশানগুলিতে যখন সক্রিয় কল থাকে যা হোল্ডে রাখা যায় না তখন ইনকামিং কলগুলির উত্তর দিতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার অ্যাপ তার স্বাভাবিক প্রক্রিয়া ব্যবহার করে একটি নতুন ইনকামিং কল গ্রহণ করে।
  2. নতুন ইনকামিং কল সম্পর্কে টেলিকম সাবসিস্টেমকে জানাতে addNewIncomingCall(PhoneAccountHandle, Bundle) পদ্ধতি ব্যবহার করুন।
  3. টেলিকম সাবসিস্টেমটি আপনার অ্যাপের ConnectionService বাস্তবায়নের সাথে আবদ্ধ হয় এবং onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest) পদ্ধতি ব্যবহার করে নতুন ইনকামিং কলের প্রতিনিধিত্ব করে Connection বস্তুর একটি নতুন উদাহরণের অনুরোধ করে।
  4. টেলিকম সাবসিস্টেম আপনার ইনকামিং কলের জন্য ইনকামিং কল UI প্রদর্শন করে।
  5. ব্যবহারকারী কলটি গ্রহণ করলে, টেলিকম সাবসিস্টেম onAnswer() পদ্ধতিতে কল করে। টেলিকম সাবসিস্টেমে যে কলটি এখন কানেক্ট করা হয়েছে তা নির্দেশ করার জন্য আপনাকে setActive() পদ্ধতিতে কল করতে হবে।
  6. ব্যবহারকারী কলটি প্রত্যাখ্যান করলে, টেলিকম সাবসিস্টেম onReject() পদ্ধতিতে কল করে। আপনি setDisconnected(DisconnectCause) পদ্ধতিটিকে REJECTED উল্লেখ করে পরামিতি হিসাবে কল করুন এবং তারপর destroy() পদ্ধতিতে কল করুন।

আউটগোয়িং কল করুন

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

একটি বহির্গামী কল করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. ব্যবহারকারী আপনার অ্যাপের মধ্যে একটি বহির্গামী কল শুরু করে।
  2. নতুন আউটগোয়িং কল সম্পর্কে টেলিকম সাবসিস্টেমকে জানাতে placeCall(Uri, Bundle) পদ্ধতি ব্যবহার করুন। পদ্ধতির পরামিতিগুলির জন্য নিম্নলিখিত বিবেচনাগুলি নিন:
    • Uri প্যারামিটারটি সেই ঠিকানাকে উপস্থাপন করে যেখানে কল করা হচ্ছে। নিয়মিত ফোন নম্বরের জন্য, tel: URI স্কিম ব্যবহার করুন।
    • Bundle প্যারামিটার আপনাকে EXTRA_PHONE_ACCOUNT_HANDLE অতিরিক্তে আপনার অ্যাপের PhoneAccountHandle অবজেক্ট যোগ করে আপনার কলিং অ্যাপ সম্পর্কে তথ্য প্রদান করতে দেয়। আপনার অ্যাপটিকে অবশ্যই প্রতিটি আউটগোয়িং কলে PhoneAccountHandle অবজেক্ট প্রদান করতে হবে।
    • Bundle প্যারামিটার আপনাকে EXTRA_START_CALL_WITH_VIDEO_STATE অতিরিক্ত STATE_BIDIRECTIONAL মান উল্লেখ করে আউটগোয়িং কলে ভিডিও অন্তর্ভুক্ত কিনা তা নির্দিষ্ট করার অনুমতি দেয়। বিবেচনা করুন যে ডিফল্টরূপে, টেলিকম সাবসিস্টেম স্পিকারফোনে ভিডিও কলগুলিকে রুট করে।
  3. টেলিকম সাবসিস্টেম আপনার অ্যাপের ConnectionService বাস্তবায়নের সাথে আবদ্ধ।
  4. যদি আপনার অ্যাপ একটি আউটগোয়িং কল করতে সক্ষম না হয়, তাহলে টেলিকম সাবসিস্টেম onCreateOutgoingConnectionFailed(PhoneAccountHandle, ConnectionRequest) পদ্ধতিতে কল করে আপনার অ্যাপকে জানাতে যে কলটি বর্তমান সময়ে করা যাবে না। আপনার অ্যাপ ব্যবহারকারীকে জানানো উচিত যে কল করা যাবে না।
  5. আপনার অ্যাপ যদি আউটগোয়িং কল করতে সক্ষম হয়, তাহলে টেলিকম সাবসিস্টেম onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest) পদ্ধতিতে কল করে। নতুন বহির্গামী কল প্রতিনিধিত্ব করার জন্য আপনার অ্যাপটি আপনার Connection শ্রেণীর একটি উদাহরণ প্রদান করবে। সংযোগে আপনার যে বৈশিষ্ট্যগুলি সেট করা উচিত সে সম্পর্কে আরও তথ্যের জন্য, সংযোগ পরিষেবা বাস্তবায়ন দেখুন।
  6. আউটগোয়িং কল সংযুক্ত হয়ে গেলে, টেলিকম সাবসিস্টেমকে জানানোর জন্য setActive() পদ্ধতিতে কল করুন যে কলটি সক্রিয়।

একটি কল শেষ করুন

একটি কল শেষ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. ব্যবহারকারী কলটি বন্ধ করে দিলে প্যারামিটার হিসাবে LOCAL পাঠাতে সেটটিকে কল করুন setDisconnected(DisconnectCause) অথবা অন্য পক্ষ কলটি বন্ধ করলে প্যারামিটার হিসাবে REMOTE পাঠান।
  2. destroy() পদ্ধতিতে কল করুন।

কলিং সীমাবদ্ধতা

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

  • এপিআই লেভেল 27 বা তার নিচের ডিভাইসে, শুধুমাত্র একটি অ্যাপ যেকোন সময়ে একটি চলমান কল বজায় রাখতে পারে। এই সীমাবদ্ধতার অর্থ হল যে যখন একজন ব্যবহারকারীর FooTalk অ্যাপ ব্যবহার করে একটি চলমান কল থাকে, তখন BarTalk অ্যাপটি একটি নতুন কল শুরু করতে বা গ্রহণ করতে পারে না।

    API স্তর 28 বা উচ্চতর ডিভাইসে চলমান ডিভাইসগুলিতে, যদি FooTalk এবং BarTalk উভয়ই CAPABILITY_SUPPORT_HOLD এবং CAPABILITY_HOLD অনুমতিগুলি ঘোষণা করে, তাহলে ব্যবহারকারী অন্য একটি কল শুরু করতে বা উত্তর দেওয়ার জন্য অ্যাপগুলির মধ্যে স্যুইচ করে একাধিক চলমান কল বজায় রাখতে পারেন৷

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

  • যদি ব্যবহারকারী একটি জরুরী কল ডায়াল করে তাহলে টেলিকম সাবসিস্টেম আপনার অ্যাপের কলগুলিকে সংযোগ বিচ্ছিন্ন করে দেয়৷

  • ব্যবহারকারী জরুরী কলে থাকাকালীন আপনার অ্যাপ গ্রহণ করতে বা কল করতে পারে না।

  • অন্য কলিং অ্যাপে যদি একটি চলমান কল থাকে যখন আপনার অ্যাপ একটি ইনকামিং কল পায়, তাহলে ইনকামিং কলের উত্তর দিলে অন্য অ্যাপে চলমান কলগুলি শেষ হয়ে যায়। আপনার অ্যাপের স্বাভাবিক ইনকামিং কল ইউজার ইন্টারফেস প্রদর্শন করা উচিত নয়। টেলিকম ফ্রেমওয়ার্ক ইনকামিং কল ইউজার ইন্টারফেস প্রদর্শন করে এবং ব্যবহারকারীকে জানায় যে নতুন কলের উত্তর দিলে তাদের চলমান কল(গুলি) শেষ হয়ে যাবে। এর মানে যদি ব্যবহারকারী একটি FooTalk কলে থাকে এবং BarTalk অ্যাপ একটি ইনকামিং কল পায়, তাহলে টেলিকম ফ্রেমওয়ার্ক ব্যবহারকারীকে জানায় যে তাদের একটি নতুন ইনকামিং BarTalk কল আছে এবং BarTalk কলের উত্তর দিলে তাদের FooTalk কলটি শেষ হয়ে যাবে।