একটি কল রিডাইরেক্ট করুন

যে ডিভাইসগুলি অ্যান্ড্রয়েড 10 বা উচ্চতর চালায় সেগুলি অ্যান্ড্রয়েড 9 বা তার কম সংস্করণে চালিত ডিভাইসগুলির থেকে আলাদাভাবে কলের উদ্দেশ্য পরিচালনা করে। Android 10 এবং উচ্চতর সংস্করণে, ACTION_NEW_OUTGOING_CALL সম্প্রচার বন্ধ করা হয়েছে এবং CallRedirectionService API দিয়ে প্রতিস্থাপিত হয়েছে। CallRedirectionService আপনাকে অ্যান্ড্রয়েড প্ল্যাটফর্ম দ্বারা করা বহির্গামী কলগুলি সংশোধন করতে ব্যবহার করার জন্য ইন্টারফেস সরবরাহ করে। উদাহরণস্বরূপ, তৃতীয় পক্ষের অ্যাপগুলি কলগুলি বাতিল করতে পারে এবং সেগুলিকে VoIP-এর মাধ্যমে পুনরায় রুট করতে পারে৷

কোটলিন

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() ফাংশনটি ওভাররাইড করেছেন তা নিশ্চিত করুন৷

কোটলিন

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);
            }
        }
    }
}