অ্যান্ড্রয়েডের সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্যগুলির মধ্যে একটি হল একটি অ্যাপের ক্ষমতা যা ব্যবহারকারীকে "অ্যাকশন" এর উপর ভিত্তি করে অন্য অ্যাপে পাঠাতে পারে যা এটি করতে চায়। উদাহরণস্বরূপ, যদি আপনার অ্যাপে এমন একটি ব্যবসার ঠিকানা থাকে যা আপনি একটি মানচিত্রে দেখাতে চান, তাহলে আপনাকে আপনার অ্যাপে এমন কোনো কার্যকলাপ তৈরি করতে হবে না যা একটি মানচিত্র দেখায়। পরিবর্তে, আপনি একটি Intent
ব্যবহার করে ঠিকানা দেখার জন্য একটি অনুরোধ তৈরি করতে পারেন। অ্যান্ড্রয়েড সিস্টেম তারপরে একটি অ্যাপ শুরু করে যা একটি মানচিত্রে ঠিকানা দেখাতে সক্ষম।
প্রথম শ্রেণীতে যেমন ব্যাখ্যা করা হয়েছে, আপনার প্রথম অ্যাপ তৈরি করা , আপনার নিজের অ্যাপে ক্রিয়াকলাপগুলির মধ্যে নেভিগেট করার জন্য আপনাকে অবশ্যই উদ্দেশ্য ব্যবহার করতে হবে। আপনি সাধারণত একটি সুস্পষ্ট অভিপ্রায়ের সাথে এটি করেন, যা আপনি যে উপাদানটি শুরু করতে চান তার সঠিক শ্রেণীর নামটি সংজ্ঞায়িত করে। যাইহোক, যখন আপনি একটি পৃথক অ্যাপ্লিকেশন একটি ক্রিয়া সম্পাদন করতে চান, যেমন "একটি মানচিত্র দেখুন", আপনাকে অবশ্যই একটি অন্তর্নিহিত উদ্দেশ্য ব্যবহার করতে হবে৷
এই পাঠটি আপনাকে দেখায় কিভাবে একটি নির্দিষ্ট ক্রিয়াকলাপের জন্য একটি অন্তর্নিহিত অভিপ্রায় তৈরি করতে হয় এবং অন্য অ্যাপে ক্রিয়া সম্পাদন করে এমন একটি কার্যকলাপ শুরু করতে এটি কীভাবে ব্যবহার করতে হয়। আপনার অন্তর্নিহিত উদ্দেশ্যগুলির জন্য রানটাইম চেকগুলি অন্তর্ভুক্ত করা কেন গুরুত্বপূর্ণ তা বোঝার জন্য এখানে এমবেড করা ভিডিওটিও দেখুন৷
একটি অন্তর্নিহিত অভিপ্রায় তৈরি করুন
অন্তর্নিহিত উদ্দেশ্যগুলি শুরু করার জন্য কম্পোনেন্টের ক্লাসের নাম ঘোষণা করে না, বরং তার পরিবর্তে সম্পাদন করার জন্য একটি ক্রিয়া ঘোষণা করে। ক্রিয়াটি আপনি যা করতে চান তা নির্দিষ্ট করে, যেমন দেখুন , সম্পাদনা করুন , পাঠান বা কিছু পান ।
ডেটার সাথে অভিপ্রায় ক্রিয়াগুলি সংযুক্ত করুন
অভিপ্রায়গুলি প্রায়শই অ্যাকশনের সাথে সম্পর্কিত ডেটা অন্তর্ভুক্ত করে, যেমন আপনি যে ঠিকানাটি দেখতে চান বা আপনি যে ইমেল বার্তা পাঠাতে চান। আপনি যে অভিপ্রায় তৈরি করতে চান তার উপর নির্ভর করে, ডেটা একটি Uri
হতে পারে, অন্যান্য বিভিন্ন ডেটা প্রকারের মধ্যে একটি হতে পারে, বা অভিপ্রায়টির জন্য ডেটার প্রয়োজন নাও হতে পারে৷
যদি আপনার ডেটা একটি Uri
হয়, তাহলে একটি সাধারণ Intent()
কনস্ট্রাক্টর রয়েছে যা আপনি কর্ম এবং ডেটা সংজ্ঞায়িত করতে ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, টেলিফোন নম্বর নির্দিষ্ট করতে Uri
ডেটা ব্যবহার করে একটি ফোন কল শুরু করার অভিপ্রায় কীভাবে তৈরি করা যায় তা এখানে রয়েছে:
কোটলিন
val callIntent: Intent = Uri.parse("tel:5551234").let { number -> Intent(Intent.ACTION_DIAL, number) }
জাভা
Uri number = Uri.parse("tel:5551234"); Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
যখন আপনার অ্যাপ startActivity()
এ কল করে এই অভিপ্রায়কে আহ্বান করে, ফোন অ্যাপটি প্রদত্ত ফোন নম্বরে একটি কল শুরু করে।
এখানে আরও কয়েকটি উদ্দেশ্য এবং তাদের অ্যাকশন এবং Uri
ডেটা জোড়া রয়েছে:
একটি মানচিত্র দেখুন
কোটলিন
// Map point based on address val mapIntent: Intent = Uri.parse( "geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California" ).let { location -> // Or map point based on latitude/longitude // val location: Uri = Uri.parse("geo:37.422219,-122.08364?z=14") // z param is zoom level Intent(Intent.ACTION_VIEW, location) }
জাভা
// Map point based on address Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); // Or map point based on latitude/longitude // Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
একটি ওয়েব পৃষ্ঠা দেখুন
কোটলিন
val webIntent: Intent = Uri.parse("https://www.android.com").let { webpage -> Intent(Intent.ACTION_VIEW, webpage) }
জাভা
Uri webpage = Uri.parse("https://www.android.com"); Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
একটি অভিপ্রায় অতিরিক্ত যোগ করুন
অন্যান্য ধরণের অন্তর্নিহিত উদ্দেশ্যগুলির জন্য "অতিরিক্ত" ডেটা প্রয়োজন যা বিভিন্ন ধরণের ডেটা প্রদান করে, যেমন একটি স্ট্রিং। আপনি বিভিন্ন putExtra()
পদ্ধতি ব্যবহার করে অতিরিক্ত ডেটার এক বা একাধিক অংশ যোগ করতে পারেন।
ডিফল্টরূপে, সিস্টেমটি অন্তর্ভুক্ত করা Uri
ডেটার উপর ভিত্তি করে একটি উদ্দেশ্য দ্বারা প্রয়োজনীয় উপযুক্ত MIME প্রকার নির্ধারণ করে। আপনি যদি অভিপ্রায়ে একটি Uri
অন্তর্ভুক্ত না করেন, তাহলে অভিপ্রায়ের সাথে যুক্ত ডেটার ধরন নির্দিষ্ট করতে আপনার সাধারণত setType()
ব্যবহার করা উচিত। MIME প্রকার সেট করা আরও নির্দিষ্ট করে যে কোন ধরণের ক্রিয়াকলাপ অভিপ্রায় গ্রহণ করা উচিত।
এখানে আরও কিছু অভিপ্রায় রয়েছে যা পছন্দসই ক্রিয়াটি নির্দিষ্ট করতে অতিরিক্ত ডেটা যুক্ত করে:
একটি সংযুক্তি সহ একটি ইমেল পাঠান
কোটলিন
Intent(Intent.ACTION_SEND).apply { // The intent does not have a URI, so declare the "text/plain" MIME type type = "text/plain" putExtra(Intent.EXTRA_EMAIL, arrayOf("jan@example.com")) // recipients putExtra(Intent.EXTRA_SUBJECT, "Email subject") putExtra(Intent.EXTRA_TEXT, "Email message text") putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")) // You can also attach multiple items by passing an ArrayList of Uris }
জাভা
Intent emailIntent = new Intent(Intent.ACTION_SEND); // The intent does not have a URI, so declare the "text/plain" MIME type emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jan@example.com"}); // recipients emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text"); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")); // You can also attach multiple items by passing an ArrayList of Uris
একটি ক্যালেন্ডার ইভেন্ট তৈরি করুন
দ্রষ্টব্য: একটি ক্যালেন্ডার ইভেন্টের জন্য এই অভিপ্রায় শুধুমাত্র API স্তর 14 এবং উচ্চতর সমর্থিত।
কোটলিন
// Event is on January 23, 2021 -- from 7:30 AM to 10:30 AM. Intent(Intent.ACTION_INSERT, Events.CONTENT_URI).apply { val beginTime: Calendar = Calendar.getInstance().apply { set(2021, 0, 23, 7, 30) } val endTime = Calendar.getInstance().apply { set(2021, 0, 23, 10, 30) } putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.timeInMillis) putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.timeInMillis) putExtra(Events.TITLE, "Ninja class") putExtra(Events.EVENT_LOCATION, "Secret dojo") }
জাভা
// Event is on January 23, 2021 -- from 7:30 AM to 10:30 AM. Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI); Calendar beginTime = Calendar.getInstance(); beginTime.set(2021, 0, 23, 7, 30); Calendar endTime = Calendar.getInstance(); endTime.set(2021, 0, 23, 10, 30); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); calendarIntent.putExtra(Events.TITLE, "Ninja class"); calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
দ্রষ্টব্য: এটি গুরুত্বপূর্ণ যে আপনি আপনার Intent
যথাসম্ভব সুনির্দিষ্টভাবে সংজ্ঞায়িত করুন৷ উদাহরণস্বরূপ, আপনি যদি ACTION_VIEW
উদ্দেশ্য ব্যবহার করে একটি চিত্র প্রদর্শন করতে চান, তাহলে আপনাকে একটি MIME ধরনের image/*
। এটি এমন অ্যাপগুলিকে বাধা দেয় যেগুলি অন্য ধরনের ডেটা (যেমন একটি মানচিত্র অ্যাপ) উদ্দেশ্য দ্বারা ট্রিগার হওয়া থেকে "দেখতে" পারে।
অভিপ্রায় সঙ্গে একটি কার্যকলাপ শুরু
একবার আপনি আপনার Intent
তৈরি করে ফেলেন এবং অতিরিক্ত তথ্য সেট করলে, সিস্টেমে পাঠাতে startActivity()
এ কল করুন:
কোটলিন
startActivity(intent)
জাভা
startActivity(intent);
এমন পরিস্থিতি পরিচালনা করুন যেখানে কোনও অ্যাপই অভিপ্রায় গ্রহণ করতে পারে না
যদিও ডিভাইসে ইনস্টল করা অন্য অ্যাপ দ্বারা অনেকগুলি ইন্টেন্ট সফলভাবে পরিচালনা করা হয়—যেমন একটি ফোন, ইমেল বা ক্যালেন্ডার অ্যাপ—আপনার অ্যাপটিকে এমন পরিস্থিতির জন্য প্রস্তুত করা উচিত যেখানে কোনো অ্যাক্টিভিটি আপনার অ্যাপের উদ্দেশ্য পরিচালনা করতে পারে না। যখনই আপনি একটি অভিপ্রায় আহ্বান করেন, তখন একটি ActivityNotFoundException
ধরার জন্য প্রস্তুত থাকুন, এটি ঘটে যদি আপনার অ্যাপের অভিপ্রায় পরিচালনা করতে পারে এমন অন্য কোনো কার্যকলাপ না থাকে:
কোটলিন
try { startActivity(intent) } catch (e: ActivityNotFoundException) { // Define what your app should do if no activity can handle the intent. }
জাভা
try { startActivity(intent); } catch (ActivityNotFoundException e) { // Define what your app should do if no activity can handle the intent. }
আপনি এই ব্যতিক্রমটি ধরার পরে, আপনার অ্যাপের পরবর্তী কী করা উচিত তা স্থির করুন। এই পরবর্তী ধাপটি আপনি যে অভিপ্রায়ের জন্য চেষ্টা করেছেন তার নির্দিষ্ট বৈশিষ্ট্যের উপর নির্ভর করে। উদাহরণস্বরূপ, যদি আপনি একটি নির্দিষ্ট অ্যাপ সম্পর্কে জানেন যেটি উদ্দেশ্য পরিচালনা করতে পারে, তাহলে ব্যবহারকারীকে অ্যাপটি ডাউনলোড করার জন্য একটি লিঙ্ক প্রদান করুন। Google Play এ আপনার পণ্যের সাথে কীভাবে লিঙ্ক করবেন সে সম্পর্কে আরও জানুন।
দ্ব্যর্থতা নিরসন ডায়ালগ
যদি সিস্টেমটি অভিপ্রায় পরিচালনা করতে পারে এমন একাধিক অ্যাক্টিভিটি শনাক্ত করে, তাহলে এটি একটি ডায়ালগ প্রদর্শন করে (কখনও কখনও "দ্ব্যর্থতা নিরসন ডায়ালগ" হিসাবে উল্লেখ করা হয়) ব্যবহারকারীর জন্য কোন অ্যাপ ব্যবহার করতে হবে তা নির্বাচন করতে, যেমন চিত্র 1-এ দেখানো হয়েছে। যদি শুধুমাত্র একটি থাকে যে কার্যকলাপ উদ্দেশ্য পরিচালনা করে, সিস্টেম অবিলম্বে এটি শুরু করে।
সম্পূর্ণ উদাহরণ
এখানে একটি সম্পূর্ণ উদাহরণ রয়েছে যা দেখায় কিভাবে একটি মানচিত্র দেখার জন্য একটি অভিপ্রায় তৈরি করতে হয়, অভিপ্রায়টি পরিচালনা করার জন্য একটি অ্যাপ বিদ্যমান আছে কিনা তা যাচাই করুন, তারপর এটি শুরু করুন:
কোটলিন
// Build the intent. val location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California") val mapIntent = Intent(Intent.ACTION_VIEW, location) // Try to invoke the intent. try { startActivity(mapIntent) } catch (e: ActivityNotFoundException) { // Define what your app should do if no activity can handle the intent. }
জাভা
// Build the intent. Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); // Try to invoke the intent. try { startActivity(mapIntent); } catch (ActivityNotFoundException e) { // Define what your app should do if no activity can handle the intent. }
একটি অ্যাপ চয়নকারী দেখান৷
লক্ষ্য করুন যে যখন আপনি startActivity()
এ আপনার Intent
পাস করে একটি কার্যকলাপ শুরু করেন এবং সেখানে একাধিক অ্যাপ থাকে যা অভিপ্রায়ে সাড়া দেয়, ব্যবহারকারী ডিফল্টরূপে কোন অ্যাপটি ব্যবহার করবেন তা নির্বাচন করতে পারেন (ডায়ালগের নীচে একটি চেকবক্স নির্বাচন করে; চিত্র 1 দেখুন)। একটি ক্রিয়া সম্পাদন করার সময় এটি চমৎকার হয় যার জন্য ব্যবহারকারী সাধারণত প্রতিবার একই অ্যাপ ব্যবহার করতে চান, যেমন একটি ওয়েব পৃষ্ঠা খোলার সময় (ব্যবহারকারীরা সম্ভবত একটি ওয়েব ব্রাউজার ব্যবহার করেন) বা একটি ফটো তোলা (ব্যবহারকারীরা সম্ভবত একটি ক্যামেরা পছন্দ করে)।
যাইহোক, যদি সঞ্চালিত ক্রিয়াটি একাধিক অ্যাপ দ্বারা পরিচালিত হতে পারে এবং ব্যবহারকারী প্রতিবার একটি ভিন্ন অ্যাপ পছন্দ করতে পারে - যেমন একটি "শেয়ার" অ্যাকশন, যার জন্য ব্যবহারকারীদের কাছে বেশ কয়েকটি অ্যাপ থাকতে পারে যার মাধ্যমে তারা একটি আইটেম ভাগ করতে পারে - আপনার উচিত চিত্র 2-এ দেখানো হিসাবে স্পষ্টভাবে একটি চয়নকারী ডায়ালগ দেখান। চয়নকারী ডায়ালগ ব্যবহারকারীকে প্রতিবার ক্রিয়াটির জন্য কোন অ্যাপ ব্যবহার করতে হবে তা নির্বাচন করতে বাধ্য করে (ব্যবহারকারী কর্মের জন্য একটি ডিফল্ট অ্যাপ নির্বাচন করতে পারে না)।
চয়নকারীকে দেখানোর জন্য, createChooser()
ব্যবহার করে একটি Intent
তৈরি করুন এবং এটি startActivity()
এ পাস করুন। যেমন:
কোটলিন
val intent = Intent(Intent.ACTION_SEND) // Create intent to show chooser val chooser = Intent.createChooser(intent, /* title */ null) // Try to invoke the intent. try { startActivity(chooser) } catch (e: ActivityNotFoundException) { // Define what your app should do if no activity can handle the intent. }
জাভা
Intent intent = new Intent(Intent.ACTION_SEND); // Create intent to show chooser Intent chooser = Intent.createChooser(intent, /* title */ null); // Try to invoke the intent. try { startActivity(chooser); } catch (ActivityNotFoundException e) { // Define what your app should do if no activity can handle the intent. }
এটি createChooser()
পদ্ধতিতে পাস করা অভিপ্রায়ে প্রতিক্রিয়া জানায় এমন অ্যাপগুলির একটি তালিকা সহ একটি ডায়ালগ প্রদর্শন করে। ক্রিয়াটি ACTION_SEND
বা ACTION_SEND_MULTIPLE
না হলে title
প্যারামিটার সরবরাহ করা হতে পারে