Android 10 বা তার পরবর্তী ভার্সনে চলা ডিভাইস, Android 9 বা তার পূর্ববর্তী ভার্সনে চলা ডিভাইসের তুলনায়
কল ইনটেন্ট আলাদাভাবে ম্যানেজ করে। Android 10 ও এর পরবর্তী যেকোনও ভার্সনে, ACTION_NEW_OUTGOING_CALL
ব্রডকাস্ট বন্ধ করে দেওয়া হয়েছে এবং তার পরিবর্তে
CallRedirectionService
API ব্যবহার করা হচ্ছে। CallRedirectionService আপনাকে ইন্টারফেস প্রদান করে যাতে আপনি Android প্ল্যাটফর্মের মাধ্যমে করা আউটগোয়িং কল
পরিবর্তন করতে পারেন। যেমন, থার্ড-পার্টি অ্যাপ কল বাতিল করে VoIP-এর মাধ্যমে রি-রুট করতে পারে।
Kotlin
class RedirectionService : CallRedirectionService() { override fun onPlaceCall( handle: Uri, initialPhoneAccount: PhoneAccountHandle, allowInteractiveResponse: Boolean ) { // Determine if the call should proceed, be redirected, or cancelled. val callShouldProceed = true val callShouldRedirect = false when { callShouldProceed -> { placeCallUnmodified() } callShouldRedirect -> { // Update the URI to point to a different phone number or modify the // PhoneAccountHandle and redirect. redirectCall(handle, initialPhoneAccount, true) } else -> { cancelCall() } } } }
জাভা
class RedirectionService extends CallRedirectionService { @Override public void onPlaceCall( @NonNull Uri handle, @NonNull PhoneAccountHandle initialPhoneAccount, boolean allowInteractiveResponse ) { // Determine if the call should proceed, be redirected, or cancelled. // Your app should implement this logic to determine the redirection. boolean callShouldProceed = true; boolean callShouldRedirect = false; if (callShouldProceed) { placeCallUnmodified(); } else if (callShouldRedirect) { // Update the URI to point to a different phone number or modify the // PhoneAccountHandle and redirect. redirectCall(handle, initialPhoneAccount, true); } else { cancelCall(); } } }
সিস্টেম যাতে সঠিকভাবে এই পরিষেবা শুরু করতে পারে তার জন্য আপনাকে অবশ্যই ম্যানিফেস্টে এই পরিষেবা রেজিস্টার করতে হবে।
<service
android:name=".RedirectionService"
android:permission="android.permission.BIND_CALL_REDIRECTION_SERVICE">
<intent-filter>
<action android:name="android.telecom.CallRedirectionService"/>
</intent-filter>
</service>
রিডাইরেকশন পরিষেবা ব্যবহার করতে, আপনার অ্যাপকে অবশ্যই RoleManager থেকে কল রিডাইরেকশন রোলের জন্য অনুরোধ করতে হবে। এটি ব্যবহারকারীকে
জিজ্ঞাসা করবে যে তিনি আপনার অ্যাপকে কল রিডাইরেক্ট ম্যানেজ করার অনুমতি দিতে চান কিনা। আপনার অ্যাপকে
এই ভূমিকা না দেওয়া হলে, আপনার রিডাইরেকশন পরিষেবা ব্যবহার করা হয় না।
ব্যবহারকারী আপনার অ্যাপ চালু করার সময় অ্যাপে এই ভূমিকা আছে কিনা তা আপনার চেক করা উচিত যাতে
প্রয়োজন হলে আপনি এটির জন্য অনুরোধ করতে পারেন। আপনি RoleManager-এর তৈরি করা ইনটেন্ট লঞ্চ করেন,
তাই ব্যবহারকারীর বেছে নেওয়া বিকল্প ম্যানেজ করতে
onActivityResult()
ফাংশন ওভাররাইড করতে ভুলবেন না।
Kotlin
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Tell the system that you want your app to handle call redirects. This // is done by using the RoleManager to register your app to handle redirects. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { val roleManager = getSystemService(Context.ROLE_SERVICE) as RoleManager // Check if the app needs to register call redirection role. val shouldRequestRole = roleManager.isRoleAvailable(RoleManager.ROLE_CALL_REDIRECTION) && !roleManager.isRoleHeld(RoleManager.ROLE_CALL_REDIRECTION) if (shouldRequestRole) { val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_CALL_REDIRECTION) startActivityForResult(intent, REDIRECT_ROLE_REQUEST_CODE) } } } companion object { private const val REDIRECT_ROLE_REQUEST_CODE = 1 } }
জাভা
class MainActivity extends AppCompatActivity { private static final int REDIRECT_ROLE_REQUEST_CODE = 0; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Tell the system that you want your app to handle call redirects. This // is done by using the RoleManager to register your app to handle redirects. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { RoleManager roleManager = (RoleManager) getSystemService(Context.ROLE_SERVICE); // Check if the app needs to register call redirection role. boolean shouldRequestRole = roleManager.isRoleAvailable(RoleManager.ROLE_CALL_REDIRECTION) && !roleManager.isRoleHeld(RoleManager.ROLE_CALL_REDIRECTION); if (shouldRequestRole) { Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_CALL_REDIRECTION); startActivityForResult(intent, REDIRECT_ROLE_REQUEST_CODE); } } } }