এই ডকুমেন্টটিতে এমন কয়েকটি সাধারণ ব্যবহারের ক্ষেত্র তুলে ধরা হয়েছে, যেখানে একটি অ্যাপ অন্য অ্যাপের সাথে যোগাযোগ করে। প্রতিটি বিভাগে সীমিত প্যাকেজ ভিজিবিলিটির মাধ্যমে অ্যাপের কার্যকারিতা কীভাবে সম্পন্ন করা যায়, সে বিষয়ে নির্দেশনা দেওয়া হয়েছে; আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) বা তার উচ্চতর সংস্করণকে টার্গেট করে, তবে এই বিষয়টি বিবেচনা করা প্রয়োজন।
যখন অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণের কোনো অ্যাপ অন্য কোনো অ্যাপের অ্যাক্টিভিটি শুরু করার জন্য ইন্টেন্ট ব্যবহার করে, তখন সবচেয়ে সহজ উপায় হলো ইন্টেন্টটি কল করা এবং কোনো অ্যাপ উপলব্ধ না থাকলে ActivityNotFoundException এক্সেপশনটি হ্যান্ডেল করা।
আপনার অ্যাপের কোনো অংশ যদি startActivity() কলটি সফল হবে কি না তা জানার উপর নির্ভর করে, যেমন একটি UI দেখানো, তাহলে আপনার অ্যাপের ম্যানিফেস্টের <queries> এলিমেন্টে একটি <intent> এলিমেন্ট যোগ করুন। সাধারণত, এটি একটি <intent> এলিমেন্ট হয়ে থাকে।
ওপেন ইউআরএল
এই অংশে অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণের অ্যাপে ইউআরএল খোলার বিভিন্ন উপায় বর্ণনা করা হয়েছে।
ব্রাউজার বা অন্য অ্যাপে URL খুলুন
একটি URL খুলতে, ওয়েব URL লোড করার নির্দেশিকায় বর্ণিত ACTION_VIEW ইন্টেন্ট অ্যাকশন সম্বলিত একটি ইন্টেন্ট ব্যবহার করুন। এই ইন্টেন্টটি ব্যবহার করে startActivity() কল করার পর, নিম্নলিখিত ঘটনাগুলোর মধ্যে একটি ঘটে:
- ইউআরএলটি একটি ওয়েব ব্রাউজার অ্যাপে খোলে।
- ইউআরএলটি এমন একটি অ্যাপে খোলে যা ইউআরএলটিকে ডিপ লিঙ্ক হিসেবে সমর্থন করে।
- একটি দ্ব্যর্থতা নিরসন ডায়ালগ বক্স প্রদর্শিত হয়, যা ব্যবহারকারীকে ইউআরএলটি কোন অ্যাপে খুলবে তা বেছে নেওয়ার সুযোগ দেয়।
একটি
ActivityNotFoundExceptionঘটে কারণ ডিভাইসে এমন কোনো অ্যাপ ইনস্টল করা নেই যা URL-টি খুলতে পারে। (এটি একটি অস্বাভাবিক ঘটনা।)ActivityNotFoundExceptionঘটলে আপনার অ্যাপ যেন তা ক্যাচ ও হ্যান্ডেল করে, সে জন্য পরামর্শ দেওয়া হচ্ছে।
যেহেতু startActivity() মেথডটি অন্য কোনো অ্যাপ্লিকেশনের অ্যাক্টিভিটি শুরু করার জন্য প্যাকেজ ভিজিবিলিটির প্রয়োজন হয় না, তাই আপনার অ্যাপের ম্যানিফেস্টে একটি <queries> এলিমেন্ট যোগ করার বা বিদ্যমান কোনো <queries> এলিমেন্টে কোনো পরিবর্তন করার প্রয়োজন নেই। এটি URL খোলার ইমপ্লিসিট এবং এক্সপ্লিসিট উভয় ধরনের ইনটেন্টের ক্ষেত্রেই প্রযোজ্য।
ব্রাউজার উপলব্ধ আছে কিনা তা পরীক্ষা করুন
কিছু ক্ষেত্রে, কোনো URL খোলার চেষ্টা করার আগে আপনার অ্যাপ যাচাই করতে চাইতে পারে যে ডিভাইসে অন্তত একটি ব্রাউজার উপলব্ধ আছে, অথবা কোনো একটি নির্দিষ্ট ব্রাউজার ডিফল্ট ব্রাউজার হিসেবে সেট করা আছে। সেইসব ক্ষেত্রে, আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent>
যখন আপনি queryIntentActivities() কল করেন এবং আর্গুমেন্ট হিসেবে একটি ওয়েব ইন্টেন্ট পাস করেন, তখন ফেরত আসা তালিকায় কিছু ক্ষেত্রে উপলব্ধ ব্রাউজার অ্যাপগুলোও অন্তর্ভুক্ত থাকে। যদি ব্যবহারকারী ডিফল্টরূপে URL-টি কোনো নন-ব্রাউজার অ্যাপে খোলার জন্য কনফিগার করে থাকেন, তাহলে তালিকায় ব্রাউজার অ্যাপগুলো অন্তর্ভুক্ত থাকে না।
কাস্টম ট্যাবে ইউআরএল খুলুন
কাস্টম ট্যাব একটি অ্যাপকে ব্রাউজারের চেহারা ও অনুভূতি কাস্টমাইজ করার সুযোগ দেয়। আপনি আপনার অ্যাপ ম্যানিফেস্টে <queries> এলিমেন্টটি যোগ বা পরিবর্তন না করেই একটি কাস্টম ট্যাবে যেকোনো URL খুলতে পারেন।
তবে, আপনি হয়তো যাচাই করে দেখতে চাইতে পারেন যে ডিভাইসটিতে কাস্টম ট্যাব সমর্থনকারী কোনো ব্রাউজার আছে কিনা , অথবা CustomTabsClient.getPackageName() ব্যবহার করে কাস্টম ট্যাবের সাথে চালু করার জন্য একটি নির্দিষ্ট ব্রাউজার নির্বাচন করতে চাইতে পারেন। সেইসব ক্ষেত্রে, আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.support.customtabs.action.CustomTabsService" /> </intent>
নন-ব্রাউজার অ্যাপগুলোকে ইউআরএল পরিচালনা করতে দিন
আপনার অ্যাপ কাস্টম ট্যাব ব্যবহার করে ইউআরএল খুলতে পারলেও, সম্ভব হলে একটি নন-ব্রাউজার অ্যাপকে ইউআরএল খোলার সুযোগ দেওয়ার পরামর্শ দেওয়া হয়। আপনার অ্যাপে এই সক্ষমতা যোগ করতে, FLAG_ACTIVITY_REQUIRE_NON_BROWSER ইন্টেন্ট ফ্ল্যাগটি সেট করে এমন একটি ইন্টেন্ট ব্যবহার করে startActivity() কল করার চেষ্টা করুন। যদি সিস্টেম একটি ActivityNotFoundException থ্রো করে, তাহলে আপনার অ্যাপ কাস্টম ট্যাবে ইউআরএলটি খুলতে পারবে।
যদি কোনো ইন্টেন্টে এই ফ্ল্যাগটি অন্তর্ভুক্ত থাকে, তাহলে নিম্নলিখিত শর্তগুলির মধ্যে যেকোনো একটি ঘটলে startActivity() কল করার ফলে একটি ActivityNotFoundException থ্রো হয়:
- কলটি সরাসরি একটি ব্রাউজার অ্যাপ চালু করত।
- কলটি ব্যবহারকারীকে একটি দ্ব্যর্থতা নিরসন ডায়ালগ দেখাতো, যেখানে একমাত্র বিকল্প হিসেবে ব্রাউজার অ্যাপগুলোই থাকতো।
নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে FLAG_ACTIVITY_REQUIRE_NON_BROWSER ইন্টেন্ট ফ্ল্যাগটি ব্যবহার করার জন্য আপনার লজিক আপডেট করতে হবে:
কোটলিন
try { val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply { // The URL should either launch directly in a non-browser app (if it's // the default) or in the disambiguation dialog. addCategory(CATEGORY_BROWSABLE) flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER } startActivity(intent) } catch (e: ActivityNotFoundException) { // Only browser apps are available, or a browser is the default. // So you can open the URL directly in your app, for example in a // Custom Tab. openInCustomTabs(url) }
জাভা
try { Intent intent = new Intent(ACTION_VIEW, Uri.parse(url)); // The URL should either launch directly in a non-browser app (if it's the // default) or in the disambiguation dialog. intent.addCategory(CATEGORY_BROWSABLE); intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REQUIRE_NON_BROWSER); startActivity(intent); } catch (ActivityNotFoundException e) { // Only browser apps are available, or a browser is the default. // So you can open the URL directly in your app, for example in a // Custom Tab. openInCustomTabs(url); }
দ্ব্যর্থতা নিরসন সংলাপ এড়িয়ে চলুন
যদি আপনি কোনো URL খোলার সময় ব্যবহারকারীদের দেখা যেতে পারে এমন দ্ব্যর্থতা নিরসন ডায়ালগটি দেখানো এড়াতে চান এবং এর পরিবর্তে এই পরিস্থিতিতে URL-টি নিজে পরিচালনা করতে পছন্দ করেন, তাহলে আপনি FLAG_ACTIVITY_REQUIRE_DEFAULT ইন্টেন্ট ফ্ল্যাগটি সেট করে এমন একটি ইন্টেন্ট ব্যবহার করতে পারেন।
যদি কোনো ইন্টেন্টে এই ফ্ল্যাগটি অন্তর্ভুক্ত থাকে, তাহলে startActivity() কল করলে একটি ActivityNotFoundException থ্রো হয়, যখন সেই কলটির মাধ্যমে ব্যবহারকারীকে একটি দ্ব্যর্থতা নিরসন ডায়ালগ দেখানোর কথা ছিল।
যদি কোনো ইন্টেন্টে এই ফ্ল্যাগ এবং FLAG_ACTIVITY_REQUIRE_NON_BROWSER ইন্টেন্ট ফ্ল্যাগ উভয়ই অন্তর্ভুক্ত থাকে, তাহলে নিম্নলিখিত শর্তগুলির মধ্যে যেকোনো একটি ঘটলে startActivity() কল করার ফলে একটি ActivityNotFoundException থ্রো হয়:
- কলটি সরাসরি ব্রাউজার অ্যাপটি চালু করে দিত।
- কলটি ব্যবহারকারীকে একটি দ্ব্যর্থতা নিরসনকারী ডায়ালগ দেখাতো।
নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে FLAG_ACTIVITY_REQUIRE_NON_BROWSER এবং FLAG_ACTIVITY_REQUIRE_DEFAULT ফ্ল্যাগগুলি একসাথে ব্যবহার করতে হয়:
কোটলিন
val url = URL_TO_LOAD try { // For this intent to be invoked, the system must directly launch a