একটি ইন্টেন্ট অবজেক্টে আপনি যে কাজটি করতে চান, যেমন "মানচিত্র দেখা" বা "ছবি তোলা", তা বর্ণনা করার মাধ্যমে Intent আপনাকে অন্য কোনো অ্যাপের একটি অ্যাক্টিভিটি শুরু করতে দেয়। এই ধরনের ইন্টেন্টকে ইমপ্লিসিট ইন্টেন্ট বলা হয়, কারণ এটি কোন অ্যাপ কম্পোনেন্ট দিয়ে শুরু করতে হবে তা নির্দিষ্ট করে না, বরং একটি কাজ নির্দিষ্ট করে এবং সেই কাজটি করার জন্য কিছু ডেটা সরবরাহ করে।
যখন আপনি startActivity() বা startActivityForResult() কল করেন এবং এতে একটি ইমপ্লিসিট ইন্টেন্ট পাস করেন, তখন সিস্টেম ইন্টেন্টটিকে এমন একটি অ্যাপে রিজলভ করে যা সেটি হ্যান্ডেল করতে পারে এবং এর সংশ্লিষ্ট Activity চালু করে। যদি ইন্টেন্টটি হ্যান্ডেল করতে পারে এমন একাধিক অ্যাপ থাকে, তবে সিস্টেম ব্যবহারকারীকে কোন অ্যাপটি ব্যবহার করতে হবে তা বেছে নেওয়ার জন্য একটি ডায়ালগ বক্স দেখায়।
এই পৃষ্ঠায় এমন কয়েকটি ইমপ্লিসিট ইন্টেন্টের বর্ণনা দেওয়া হয়েছে যা আপনি সাধারণ কাজ সম্পাদনের জন্য ব্যবহার করতে পারেন। ইন্টেন্টটি পরিচালনা করে এমন অ্যাপের ধরন অনুযায়ী এগুলোকে সাজানো হয়েছে। প্রতিটি বিভাগে আরও দেখানো হয়েছে, কীভাবে আপনি আপনার অ্যাপের কাজটি করার সক্ষমতা প্রচার করার জন্য একটি ইন্টেন্ট ফিল্টার তৈরি করতে পারেন।
সতর্কতা: ডিভাইসে যদি এমন কোনো অ্যাপ না থাকে যা একটি ইমপ্লিসিট ইন্টেন্ট গ্রহণ করতে পারে, তাহলে অ্যাপটি startActivity() কল করলে ক্র্যাশ করে। ইন্টেন্টটি গ্রহণ করার জন্য কোনো অ্যাপ আছে কিনা তা প্রথমে যাচাই করতে, আপনার Intent অবজেক্টে resolveActivity() কল করুন। যদি ফলাফলটি নন-নাল (non-null) হয়, তাহলে ইন্টেন্টটি হ্যান্ডেল করার মতো অন্তত একটি অ্যাপ আছে এবং startActivity() কল করা নিরাপদ। যদি ফলাফলটি নাল (null) হয়, তাহলে ইন্টেন্টটি ব্যবহার করবেন না এবং সম্ভব হলে, যে ফিচারটি ইন্টেন্টটি কল করে সেটি নিষ্ক্রিয় করে দিন।
আপনি যদি ইনটেন্ট বা ইনটেন্ট ফিল্টার তৈরি করার পদ্ধতি সম্পর্কে পরিচিত না হন, তাহলে প্রথমে ইনটেন্ট এবং ইনটেন্ট ফিল্টার পড়ুন।
আপনার ডেভেলপমেন্ট হোস্ট থেকে এই পৃষ্ঠায় তালিকাভুক্ত ইন্টেন্টগুলো কীভাবে চালু করতে হয় তা জানতে, “অ্যান্ড্রয়েড ডিবাগ ব্রিজ দিয়ে ইন্টেন্ট যাচাই করুন” বিভাগটি দেখুন।
গুগল ভয়েস অ্যাকশন
গুগল ভয়েস অ্যাকশনস ভয়েস কমান্ডের জবাবে এই পৃষ্ঠায় তালিকাভুক্ত কিছু ইন্টেন্ট চালু করে। আরও তথ্যের জন্য, ‘সিস্টেম ভয়েস অ্যাকশনস দিয়ে শুরু করুন ’ দেখুন।
অ্যালার্ম ঘড়ি
নিচে অ্যালার্ম ক্লক অ্যাপের কিছু সাধারণ কার্যকলাপ উল্লেখ করা হলো, যার মধ্যে আপনার অ্যাপের প্রতিটি কার্যকলাপ সম্পাদনের সক্ষমতা প্রচার করার জন্য একটি ইন্টেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও অন্তর্ভুক্ত রয়েছে।
অ্যালার্ম তৈরি করুন
নতুন অ্যালার্ম তৈরি করতে, ACTION_SET_ALARM অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত এক্সট্রাগুলো ব্যবহার করে সময় ও বার্তার মতো অ্যালার্মের বিবরণ নির্দিষ্ট করুন।
দ্রষ্টব্য: শুধুমাত্র ঘন্টা, মিনিট এবং মেসেজের অতিরিক্ত সুবিধাগুলো অ্যান্ড্রয়েড ২.৩ (এপিআই লেভেল ৯) এবং এর নিচের সংস্করণগুলোতে পাওয়া যায়। অন্যান্য অতিরিক্ত সুবিধাগুলো প্ল্যাটফর্মের উচ্চতর সংস্করণগুলোতে পাওয়া যাবে।
- পদক্ষেপ
-
ACTION_SET_ALARM - ডেটা ইউআরআই
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
-
EXTRA_HOUR - অ্যালার্ম বাজানোর সময়।
-
EXTRA_MINUTES - অ্যালার্মের জন্য মিনিটগুলো।
-
EXTRA_MESSAGE - অ্যালার্মটি শনাক্ত করার জন্য একটি বিশেষ বার্তা।
-
EXTRA_DAYS - একটি
ArrayListযাতে সপ্তাহের প্রতিটি দিন অন্তর্ভুক্ত থাকবে যেদিন এই অ্যালার্মটি পুনরাবৃত্তি হবে। প্রতিটি দিনকে অবশ্যইCalendarক্লাসের একটি পূর্ণসংখ্যা দিয়ে ঘোষণা করতে হবে, যেমনMONDAY।এককালীন অ্যালার্মের জন্য এই অতিরিক্ত বিষয়টি উল্লেখ করবেন না।
-
EXTRA_RINGTONE -
content:অ্যালার্মের সাথে ব্যবহার করার জন্য রিংটোন নির্দিষ্টকারী URI, অথবা কোনো রিংটোন না থাকার জন্যVALUE_RINGTONE_SILENT।ডিফল্ট রিংটোন ব্যবহার করতে, এই অতিরিক্তটি নির্দিষ্ট করবেন না।
-
EXTRA_VIBRATE - এই অ্যালার্মের জন্য ভাইব্রেট করা হবে কিনা তা নির্ধারণকারী একটি বুলিয়ান।
-
EXTRA_SKIP_UI - একটি বুলিয়ান যা নির্ধারণ করে যে অ্যালার্ম সেট করার সময় প্রতিক্রিয়াশীল অ্যাপটিকে তার UI এড়িয়ে যেতে হবে কিনা। যদি 'true' হয়, তবে অ্যাপটিকে অবশ্যই যেকোনো নিশ্চিতকরণ UI এড়িয়ে যেতে হবে এবং নির্দিষ্ট অ্যালার্মটি সেট করতে হবে।
-
উদাহরণ অভিপ্রায়:
কোটলিন
fun createAlarm(message: String, hour: Int, minutes: Int) { val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_HOUR, hour) putExtra(AlarmClock.EXTRA_MINUTES, minutes) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void createAlarm(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_HOUR, hour) .putExtra(AlarmClock.EXTRA_MINUTES, minutes); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ACTION_SET_ALARM ইন্টেন্টটি চালু করতে হলে, আপনার অ্যাপের SET_ALARM পারমিশন থাকতে হবে:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_ALARM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
একটি টাইমার তৈরি করুন
একটি কাউন্টডাউন টাইমার তৈরি করতে, ACTION_SET_TIMER অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত এক্সট্রাগুলো ব্যবহার করে সময়কালের মতো টাইমারের বিবরণ নির্দিষ্ট করুন।
দ্রষ্টব্য: এই ইন্টেন্টটি অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ১৯) এবং এর পরবর্তী সংস্করণগুলোতে উপলব্ধ।
- পদক্ষেপ
-
ACTION_SET_TIMER - ডেটা ইউআরআই
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
-
EXTRA_LENGTH - টাইমারের সময়কাল সেকেন্ডে।
-
EXTRA_MESSAGE - টাইমারটি শনাক্ত করার জন্য একটি বিশেষ বার্তা।
-
EXTRA_SKIP_UI - একটি বুলিয়ান যা নির্ধারণ করে যে টাইমার সেট করার সময় প্রতিক্রিয়াশীল অ্যাপটিকে তার UI এড়িয়ে যেতে হবে কিনা। যদি 'true' হয়, তবে অ্যাপটিকে অবশ্যই যেকোনো নিশ্চিতকরণ UI বাইপাস করে নির্দিষ্ট টাইমারটি শুরু করতে হবে।
-
উদাহরণ অভিপ্রায়:
কোটলিন
fun startTimer(message: String, seconds: Int) { val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_LENGTH, seconds) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void startTimer(String message, int seconds) { Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_LENGTH, seconds) .putExtra(AlarmClock.EXTRA_SKIP_UI, true); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ACTION_SET_TIMER ইন্টেন্টটি চালু করতে হলে, আপনার অ্যাপের SET_ALARM পারমিশন থাকতে হবে:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_TIMER" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
সমস্ত অ্যালার্ম দেখান
অ্যালার্মের তালিকা দেখানোর জন্য ACTION_SHOW_ALARMS অ্যাকশনটি ব্যবহার করুন।
যদিও খুব বেশি অ্যাপ এই ইন্টেন্টটি ব্যবহার করে না, কারণ এটি মূলত সিস্টেম অ্যাপগুলোই ব্যবহার করে, তবুও অ্যালার্ম ঘড়ির মতো কাজ করে এমন যেকোনো অ্যাপ এই ইন্টেন্ট ফিল্টারটি প্রয়োগ করতে পারে এবং বর্তমান অ্যালার্মগুলোর তালিকা দেখিয়ে সাড়া দিতে পারে।
দ্রষ্টব্য: এই ইন্টেন্টটি অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ১৯) এবং এর পরবর্তী সংস্করণগুলোতে উপলব্ধ।
- পদক্ষেপ
-
ACTION_SHOW_ALARMS - ডেটা ইউআরআই
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.SHOW_ALARMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
ক্যালেন্ডার
ক্যালেন্ডার অ্যাপের জন্য ইভেন্ট যোগ করা একটি সাধারণ কাজ। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার ক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
ক্যালেন্ডারে একটি ইভেন্ট যোগ করুন
ব্যবহারকারীর ক্যালেন্ডারে একটি নতুন ইভেন্ট যোগ করতে, ACTION_INSERT অ্যাকশনটি ব্যবহার করুন এবং Events.CONTENT_URI ব্যবহার করে ডেটা URI নির্দিষ্ট করুন। এরপর আপনি নিম্নলিখিত এক্সট্রাগুলো ব্যবহার করে ইভেন্টের বিভিন্ন বিবরণ নির্দিষ্ট করতে পারেন।
- পদক্ষেপ
-
ACTION_INSERT - ডেটা ইউআরআই
-
Events.CONTENT_URI - MIME টাইপ
-
"vnd.android.cursor.dir/event" - অতিরিক্ত
-
EXTRA_EVENT_ALL_DAY - এটি একটি দিনব্যাপী অনুষ্ঠান কিনা তা নির্দেশকারী একটি বুলিয়ান।
-
EXTRA_EVENT_BEGIN_TIME - ঘটনাটির শুরুর সময় (ইপক থেকে মিলিসেকেন্ডে)।
-
EXTRA_EVENT_END_TIME - ঘটনাটির শেষ সময় (ইপক থেকে মিলিসেকেন্ডে)।
-
TITLE - অনুষ্ঠানের শিরোনাম।
-
DESCRIPTION - ঘটনার বিবরণ।
-
EVENT_LOCATION - অনুষ্ঠানের স্থান।
-
EXTRA_EMAIL - আমন্ত্রিতদের ইমেইল ঠিকানাগুলোর একটি কমা দ্বারা পৃথক করা তালিকা।
CalendarContract.EventsColumnsক্লাসে সংজ্ঞায়িত কনস্ট্যান্টগুলো ব্যবহার করে ইভেন্টের আরও অনেক বিবরণ নির্দিষ্ট করা যেতে পারে।-
উদাহরণ অভিপ্রায়:
কোটলিন
fun addEvent(title: String, location: String, begin: Long, end: Long) { val intent = Intent(Intent.ACTION_INSERT).apply { data = Events.CONTENT_URI putExtra(Events.TITLE, title) putExtra(Events.EVENT_LOCATION, location) putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void addEvent(String title, String location, long begin, long end) { Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .putExtra(Events.TITLE, title) .putExtra(Events.EVENT_LOCATION, location) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.INSERT" /> <data android:mimeType="vnd.android.cursor.dir/event" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
ক্যামেরা
নিচে ক্যামেরা অ্যাপের কিছু সাধারণ কার্যকলাপ দেওয়া হলো, যার মধ্যে আপনার অ্যাপের প্রতিটি কার্যকলাপ সম্পাদনের সক্ষমতা প্রচার করার জন্য একটি ইন্টেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও অন্তর্ভুক্ত রয়েছে।
একটি ছবি বা ভিডিও তুলে ফেরত দিন।
ক্যামেরা অ্যাপ খুলতে এবং প্রাপ্ত ছবি বা ভিডিও গ্রহণ করতে, ACTION_IMAGE_CAPTURE বা ACTION_VIDEO_CAPTURE অ্যাকশনটি ব্যবহার করুন। এছাড়াও, EXTRA_OUTPUT এক্সট্রা-তে সেই URI লোকেশনটি উল্লেখ করুন যেখানে আপনি ক্যামেরাটিকে ছবি বা ভিডিওটি সেভ করতে চান।
- পদক্ষেপ
-
ACTION_IMAGE_CAPTUREঅথবা
ACTION_VIDEO_CAPTURE - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
-
EXTRA_OUTPUT - ক্যামেরা অ্যাপটি যে URI লোকেশনে ফটো বা ভিডিও ফাইলটি সেভ করে (একটি
Uriঅবজেক্ট হিসেবে)।
-
যখন ক্যামেরা অ্যাপটি সফলভাবে আপনার অ্যাক্টিভিটিতে ফোকাস ফিরিয়ে আনে—অর্থাৎ, আপনার অ্যাপটি onActivityResult() কলব্যাকটি পায়—তখন আপনি EXTRA_OUTPUT ভ্যালু দিয়ে নির্দিষ্ট করা URI-তে থাকা ফটো বা ভিডিওটি অ্যাক্সেস করতে পারবেন।
দ্রষ্টব্য: যখন আপনি ACTION_IMAGE_CAPTURE ব্যবহার করে কোনো ছবি তোলেন, তখন ক্যামেরাটি ফলাফল Intent এ থাকা ছবিটির একটি ছোট আকারের অনুলিপি বা থাম্বনেইলও ফেরত দিতে পারে, যা "data" নামের একটি অতিরিক্ত ফিল্ডে Bitmap হিসেবে সংরক্ষিত হয়।
উদাহরণ অভিপ্রায়:
কোটলিন
const val REQUEST_IMAGE_CAPTURE = 1 val locationForPhotos: Uri = ... fun capturePhoto(targetFilename: String) { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply { putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)) } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") // Do other work with full size photo saved in locationForPhotos. ... } }
জাভা
static final int REQUEST_IMAGE_CAPTURE = 1; static final Uri locationForPhotos; public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelableExtra("data"); // Do other work with full size photo saved in locationForPhotos. ... } }
অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) বা তার উচ্চতর সংস্করণে এটি করার জন্য, নিম্নলিখিত ইন্টেন্ট উদাহরণটি দেখুন।
উদাহরণ অভিপ্রায়:
কোটলিন
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
জাভা
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // Display error state to the user. } } </section></div>
এই ইন্টেন্টটি ব্যবহার করে কীভাবে ছবি তুলতে হয়, আউটপুট লোকেশনের জন্য কীভাবে একটি উপযুক্ত Uri তৈরি করতে হয় তা সহ, সে সম্পর্কে আরও তথ্যের জন্য "ছবি তুলুন" বা "ভিডিও তুলুন" পড়ুন।
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
এই ইন্টেন্টটি হ্যান্ডেল করার সময়, আপনার অ্যাক্টিভিটিকে দিয়ে আগত Intent এ EXTRA_OUTPUT এক্সট্রাটি পরীক্ষা করান, তারপর ক্যাপচার করা ছবি বা ভিডিওটি সেই এক্সট্রা দ্বারা নির্দিষ্ট করা লোকেশনে সেভ করুন এবং এমন একটি Intent দিয়ে setResult() কল করুন, যেটিতে "data" নামের একটি এক্সট্রাতে একটি কম্প্রেসড থাম্বনেইল অন্তর্ভুক্ত থাকবে।
স্থির চিত্র মোডে একটি ক্যামেরা অ্যাপ চালু করুন
ক্যামেরা অ্যাপকে স্টিল ইমেজ মোডে খুলতে, INTENT_ACTION_STILL_IMAGE_CAMERA অ্যাকশনটি ব্যবহার করুন।
- পদক্ষেপ
-
INTENT_ACTION_STILL_IMAGE_CAMERA - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
- কোনোটিই না
উদাহরণ অভিপ্রায়:
কোটলিন
private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
জাভা
public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.media.action.STILL_IMAGE_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
ভিডিও মোডে একটি ক্যামেরা অ্যাপ চালু করুন
ভিডিও মোডে ক্যামেরা অ্যাপ খুলতে, INTENT_ACTION_VIDEO_CAMERA অ্যাকশনটি ব্যবহার করুন।
- পদক্ষেপ
-
INTENT_ACTION_VIDEO_CAMERA - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
- কোনোটিই না
উদাহরণ অভিপ্রায়:
কোটলিন
fun capturePhoto() { val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA) if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } }
জাভা
public void capturePhoto() { Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.media.action.VIDEO_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
পরিচিতি/ব্যক্তি অ্যাপ
নিম্নলিখিতগুলি হলো কন্টাক্টস ম্যানেজমেন্ট অ্যাপের সাধারণ কিছু কার্যকলাপ, যার মধ্যে আপনার অ্যাপের প্রতিটি কার্যকলাপ সম্পাদনের সক্ষমতা প্রচার করার জন্য একটি ইন্টেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও অন্তর্ভুক্ত রয়েছে।
একটি যোগাযোগ নির্বাচন করুন
ব্যবহারকারীকে কোনো কন্ট্যাক্ট নির্বাচন করতে এবং আপনার অ্যাপকে সেই কন্ট্যাক্টের সমস্ত তথ্যে অ্যাক্সেস দিতে, ACTION_PICK অ্যাকশনটি ব্যবহার করুন এবং MIME টাইপ হিসেবে Contacts.CONTENT_TYPE নির্দিষ্ট করে দিন।
আপনার onActivityResult() কলব্যাকে পাঠানো result Intent নির্বাচিত কন্ট্যাক্টটির content: URI থাকে। এই রেসপন্সটি আপনার অ্যাপকে Contacts Provider API ব্যবহার করে সেই কন্ট্যাক্টটি পড়ার জন্য অস্থায়ী অনুমতি দেয়, এমনকি যদি আপনার অ্যাপে READ_CONTACTS পারমিশনটি অন্তর্ভুক্ত না-ও থাকে।
পরামর্শ: আপনার যদি শুধুমাত্র কোনো নির্দিষ্ট যোগাযোগের তথ্য, যেমন ফোন নম্বর বা ইমেল ঠিকানা, অ্যাক্সেস করার প্রয়োজন হয়, তাহলে নির্দিষ্ট যোগাযোগের ডেটা কীভাবে নির্বাচন করতে হয় সে সম্পর্কে জানতে পরবর্তী বিভাগটি দেখুন।
- পদক্ষেপ
-
ACTION_PICK - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
-
Contacts.CONTENT_TYPE
উদাহরণ অভিপ্রায়:
কোটলিন
const val REQUEST_SELECT_CONTACT = 1 fun selectContact() { val intent = Intent(Intent.ACTION_PICK).apply { type = ContactsContract.Contacts.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { val contactUri: Uri = data.data // Do something with the selected contact at contactUri. //... } }
জাভা
static final int REQUEST_SELECT_CONTACT = 1; public void selectContact() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { Uri contactUri = data.getData(); // Do something with the selected contact at contactUri. ... } }
একবার কন্টাক্ট URI হাতে পেলে কীভাবে যোগাযোগের বিবরণ পুনরুদ্ধার করবেন, সে সম্পর্কে জানতে “Retrieve details for a contact” পড়ুন।
যখন আপনি এই ইন্টেন্ট ব্যবহার করে কন্ট্যাক্ট URI পুনরুদ্ধার করেন, তখন সাধারণত সেই কন্ট্যাক্টের মৌলিক বিবরণ, যেমন ডিসপ্লে নেম এবং কন্ট্যাক্টটি স্টার করা আছে কিনা, তা পড়ার জন্য আপনার READ_CONTACTS পারমিশনের প্রয়োজন হয় না। তবে, যদি আপনি কোনো নির্দিষ্ট কন্ট্যাক্ট সম্পর্কে আরও সুনির্দিষ্ট ডেটা—যেমন তার ফোন নম্বর বা ইমেল অ্যাড্রেস—পড়ার চেষ্টা করেন, তাহলে আপনার READ_CONTACTS পারমিশন প্রয়োজন হবে।
নির্দিষ্ট যোগাযোগের তথ্য নির্বাচন করুন
ব্যবহারকারীকে কোনো কন্ট্যাক্ট থেকে ফোন নম্বর, ইমেল অ্যাড্রেস বা অন্য কোনো ডেটা টাইপের মতো নির্দিষ্ট তথ্য নির্বাচন করাতে, ACTION_PICK অ্যাকশনটি ব্যবহার করুন এবং MIME টাইপ হিসেবে নিম্নলিখিত কন্টেন্ট টাইপগুলোর মধ্যে একটি নির্দিষ্ট করে দিন; যেমন, কন্ট্যাক্টটির ফোন নম্বর পেতে CommonDataKinds.Phone.CONTENT_TYPE ব্যবহার করুন।
দ্রষ্টব্য: অনেক ক্ষেত্রে, কোনো নির্দিষ্ট কন্ট্যাক্টের বিশেষ তথ্য দেখার জন্য আপনার অ্যাপের READ_CONTACTS পারমিশন থাকা প্রয়োজন।
যদি কোনো কন্ট্যাক্ট থেকে শুধুমাত্র এক ধরনের ডেটা পুনরুদ্ধার করার প্রয়োজন হয়, তাহলে পূর্ববর্তী বিভাগে দেখানো Contacts.CONTENT_TYPE ব্যবহার করার চেয়ে ContactsContract.CommonDataKinds ক্লাসের CONTENT_TYPE ব্যবহার করার এই কৌশলটি বেশি কার্যকর। এর ফলে Contacts Provider- এ আরও জটিল কোয়েরি চালানোর প্রয়োজন ছাড়াই আপনি সরাসরি কাঙ্ক্ষিত ডেটা অ্যাক্সেস করতে পারবেন।
আপনার onActivityResult() কলব্যাকে পাঠানো result Intent নির্বাচিত কন্ট্যাক্ট ডেটার content: URI থাকে। এই রেসপন্সটি আপনার অ্যাপকে সেই কন্ট্যাক্ট ডেটা পড়ার জন্য অস্থায়ী অনুমতি দেয়, এমনকি যদি আপনার অ্যাপে READ_CONTACTS পারমিশনটি অন্তর্ভুক্ত না-ও থাকে।
- পদক্ষেপ
-
ACTION_PICK - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
-
CommonDataKinds.Phone.CONTENT_TYPE - ফোন নম্বরসহ পরিচিতিগুলো থেকে বাছাই করুন।
-
CommonDataKinds.Email.CONTENT_TYPE - যাদের ইমেল ঠিকানা আছে, তাদের মধ্য থেকে বাছাই করুন।
-
CommonDataKinds.StructuredPostal.CONTENT_TYPE - ডাক ঠিকানা আছে এমন পরিচিতিগুলো থেকে বাছাই করুন।
অথবা
ContactsContractঅধীনে থাকা অন্যান্য অনেকCONTENT_TYPEভ্যালুগুলোর মধ্যে একটি।-
উদাহরণ অভিপ্রায়:
কোটলিন
const val REQUEST_SELECT_PHONE_NUMBER = 1 fun selectContact() { // Start an activity for the user to pick a phone number from contacts. val intent = Intent(Intent.ACTION_PICK).apply { type = CommonDataKinds.Phone.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) { // Get the URI and query the content provider for the phone number. val contactUri: Uri = data.data val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER) contentResolver.query(contactUri, projection, null, null, null).use { cursor -> // If the cursor returned is valid, get the phone number. if (cursor.moveToFirst()) { val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER) val number = cursor.getString(numberIndex) // Do something with the phone number. ... } } } }
জাভা
static final int REQUEST_SELECT_PHONE_NUMBER = 1; public void selectContact() { // Start an activity for the user to pick a phone number from contacts. Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { // Get the URI and query the content provider for the phone number. Uri contactUri = data.getData(); String[] projection = new String[]{CommonDataKinds.Phone.NUMBER}; Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null); // If the cursor returned is valid, get the phone number. if (cursor != null && cursor.moveToFirst()) { int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER); String number = cursor.getString(numberIndex); // Do something with the phone number. //... } } }
একটি যোগাযোগ দেখুন
পরিচিত কোনো কন্ট্যাক্টের বিবরণ দেখতে, ACTION_VIEW অ্যাকশনটি ব্যবহার করুন এবং ইন্টেন্ট ডেটা হিসেবে content: URI সহ কন্ট্যাক্টটি নির্দিষ্ট করুন।
প্রাথমিকভাবে কন্ট্যাক্টের URI পুনরুদ্ধার করার দুটি প্রধান উপায় রয়েছে:
- পূর্ববর্তী বিভাগে দেখানো
ACTION_PICKঅ্যাকশন দ্বারা প্রাপ্ত কন্টাক্ট URI ব্যবহার করুন। এই পদ্ধতির জন্য কোনো অ্যাপ পারমিশনের প্রয়োজন হয় না। - ‘যোগাযোগের তালিকা পুনরুদ্ধার করুন’ অংশে বর্ণিত পদ্ধতি অনুসরণ করে সরাসরি সমস্ত পরিচিতির তালিকা অ্যাক্সেস করুন। এই পদ্ধতির জন্য
READ_CONTACTSপারমিশন প্রয়োজন।
- পদক্ষেপ
-
ACTION_VIEW - ডেটা ইউআরআই স্কিম
-
content:<URI> - MIME টাইপ
- কোনোটিই নয়। যোগাযোগের URI থেকে ধরণটি অনুমান করা হয়।
উদাহরণ অভিপ্রায়:
কোটলিন
fun viewContact(contactUri: Uri) { val intent = Intent(Intent.ACTION_VIEW, contactUri) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void viewContact(Uri contactUri) { Intent intent = new Intent(Intent.ACTION_VIEW, contactUri); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
বিদ্যমান পরিচিতি সম্পাদনা করুন
পরিচিত কোনো কন্ট্যাক্ট সম্পাদনা করতে, ACTION_EDIT অ্যাকশনটি ব্যবহার করুন, ইন্টেন্ট ডেটা হিসেবে content: URI সহ কন্ট্যাক্টটি নির্দিষ্ট করুন, এবং ContactsContract.Intents.Insert এর কনস্ট্যান্ট দ্বারা নির্দিষ্ট এক্সট্রাগুলোর মধ্যে পরিচিত কন্ট্যাক্টের যেকোনো তথ্য অন্তর্ভুক্ত করুন।
প্রাথমিকভাবে কন্টাক্ট ইউআরআই পুনরুদ্ধার করার দুটি প্রধান উপায় রয়েছে:
- পূর্ববর্তী বিভাগে দেখানো
ACTION_PICKঅ্যাকশন দ্বারা প্রাপ্ত কন্টাক্ট URI ব্যবহার করুন। এই পদ্ধতির জন্য কোনো অ্যাপ পারমিশনের প্রয়োজন হয় না। - ‘যোগাযোগের তালিকা পুনরুদ্ধার করুন’ অংশে বর্ণিত পদ্ধতি অনুসরণ করে সরাসরি সমস্ত পরিচিতির তালিকা অ্যাক্সেস করুন। এই পদ্ধতির জন্য
READ_CONTACTSপারমিশন প্রয়োজন।
- পদক্ষেপ
-
ACTION_EDIT - ডেটা ইউআরআই স্কিম
-
content:<URI> - MIME টাইপ
- কন্টাক্ট ইউআরআই থেকে ধরণটি অনুমান করা হয়।
- অতিরিক্ত
-
ContactsContract.Intents.Insertএ সংজ্ঞায়িত এক বা একাধিক অতিরিক্ত অপশন ব্যবহার করে আপনি যোগাযোগের বিবরণের ফিল্ডগুলি পূরণ করতে পারেন।
উদাহরণ অভিপ্রায়:
কোটলিন
fun editContact(contactUri: Uri, email: String) { val intent = Intent(Intent.ACTION_EDIT).apply { data = contactUri putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void editContact(Uri contactUri, String email) { Intent intent = new Intent(Intent.ACTION_EDIT); intent.setData(contactUri); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
কীভাবে একটি কন্ট্যাক্ট সম্পাদনা করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, ‘ইন্টেন্ট ব্যবহার করে কন্ট্যাক্ট পরিবর্তন করুন’ পড়ুন।
একটি যোগাযোগ প্রবেশ করান
নতুন কোনো কন্ট্যাক্ট যোগ করতে, ACTION_INSERT অ্যাকশনটি ব্যবহার করুন, MIME টাইপ হিসেবে Contacts.CONTENT_TYPE নির্দিষ্ট করুন, এবং ContactsContract.Intents.Insert এর কনস্ট্যান্ট দ্বারা নির্দিষ্ট এক্সট্রাগুলোর মধ্যে যেকোনো পরিচিত কন্ট্যাক্ট তথ্য অন্তর্ভুক্ত করুন।
- পদক্ষেপ
-
ACTION_INSERT - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
-
Contacts.CONTENT_TYPE - অতিরিক্ত
-
ContactsContract.Intents.Insertএ সংজ্ঞায়িত এক বা একাধিক অতিরিক্ত বৈশিষ্ট্য।
উদাহরণ অভিপ্রায়:
কোটলিন
fun insertContact(name: String, email: String) { val intent = Intent(Intent.ACTION_INSERT).apply { type = ContactsContract.Contacts.CONTENT_TYPE putExtra(ContactsContract.Intents.Insert.NAME, name) putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void insertContact(String name, String email) { Intent intent = new Intent(Intent.ACTION_INSERT); intent.setType(Contacts.CONTENT_TYPE); intent.putExtra(Intents.Insert.NAME, name); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
কীভাবে একটি কন্ট্যাক্ট যুক্ত করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, ‘ইন্টেন্ট ব্যবহার করে কন্ট্যাক্ট পরিবর্তন করুন’ পড়ুন।
ইমেল
ঐচ্ছিক অ্যাটাচমেন্ট সহ ইমেল তৈরি করা ইমেল অ্যাপগুলির জন্য একটি সাধারণ কাজ। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার ক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
ঐচ্ছিক সংযুক্তি সহ একটি ইমেল রচনা করুন
ইমেল কম্পোজ করতে, আপনি অ্যাটাচমেন্ট যুক্ত করবেন কি না তার উপর ভিত্তি করে নিম্নলিখিত অ্যাকশনগুলোর মধ্যে একটি ব্যবহার করুন এবং তালিকাভুক্ত অতিরিক্ত কীগুলো ব্যবহার করে প্রাপক ও বিষয়ের মতো ইমেলের বিবরণ অন্তর্ভুক্ত করুন।
- পদক্ষেপ
-
ACTION_SENDTO(সংযুক্তি ছাড়া হলে) অথবা
ACTION_SEND(একটি সংযুক্তি এর জন্য) অথবা
ACTION_SEND_MULTIPLE(একাধিক সংযুক্তি পাঠানোর জন্য) - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
-
"text/plain""*/*"
-
- অতিরিক্ত
-
Intent.EXTRA_EMAIL - সকল প্রাপকের ইমেইল ঠিকানার একটি স্ট্রিং অ্যারে।
-
Intent.EXTRA_CC - সমস্ত "CC" প্রাপকের ইমেল ঠিকানাগুলির একটি স্ট্রিং অ্যারে।
-
Intent.EXTRA_BCC - "BCC"-তে থাকা সকল প্রাপকের ইমেল ঠিকানার একটি স্ট্রিং অ্যারে।
-
Intent.EXTRA_SUBJECT - ইমেইলের বিষয় সম্বলিত একটি স্ট্রিং।
-
Intent.EXTRA_TEXT - ইমেইলের মূল অংশ সম্বলিত একটি স্ট্রিং।
-
Intent.EXTRA_STREAM - অ্যাটাচমেন্টকে নির্দেশকারী একটি
Uri।ACTION_SEND_MULTIPLEঅ্যাকশনটি ব্যবহার করা হলে, এর পরিবর্তে এটি একাধিকUriঅবজেক্ট সম্বলিত একটিArrayListহয়।
-
উদাহরণ অভিপ্রায়:
কোটলিন
fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { type = "*/*" putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void composeEmail(String[] addresses, String subject, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
আপনি যদি নিশ্চিত করতে চান যে আপনার ইনটেন্টটি শুধুমাত্র একটি ইমেল অ্যাপ দ্বারা পরিচালিত হবে, এবং কোনো টেক্সট মেসেজিং বা সোশ্যাল অ্যাপ দ্বারা নয়, তাহলে ACTION_SENDTO অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী "mailto:" ডেটা স্কিমটি অন্তর্ভুক্ত করুন:
কোটলিন
fun composeEmail(addresses: Array<String>, subject: String) { val intent = Intent(Intent.ACTION_SENDTO).apply { data = Uri.parse("mailto:") // Only email apps handle this. putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // Only email apps handle this. intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="*/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
ফাইল স্টোরেজ
ফাইল স্টোরেজ অ্যাপগুলোর জন্য সাধারণ কিছু কার্যকলাপ নিচে দেওয়া হলো, যার মধ্যে আপনার অ্যাপের প্রতিটি কার্যকলাপ সম্পাদনের সক্ষমতা প্রচার করার জন্য একটি ইন্টেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও অন্তর্ভুক্ত রয়েছে।
একটি নির্দিষ্ট ধরণের ফাইল পুনরুদ্ধার করুন
ব্যবহারকারীকে কোনো ডকুমেন্ট বা ছবির মতো ফাইল নির্বাচন করতে এবং আপনার অ্যাপে তার একটি রেফারেন্স ফেরত পাঠাতে অনুরোধ করার জন্য, ACTION_GET_CONTENT অ্যাকশনটি ব্যবহার করুন এবং আপনার কাঙ্ক্ষিত MIME টাইপ নির্দিষ্ট করে দিন। আপনার অ্যাপে ফেরত আসা ফাইল রেফারেন্সটি আপনার অ্যাক্টিভিটির বর্তমান লাইফসাইকেলের জন্য ক্ষণস্থায়ী, তাই আপনি যদি পরে এটি অ্যাক্সেস করতে চান, তবে আপনাকে এমন একটি কপি ইম্পোর্ট করতে হবে যা আপনি পরে পড়তে পারবেন।
এই ইন্টেন্টটি ব্যবহারকারীকে একই সাথে একটি নতুন ফাইল তৈরি করার সুযোগও দেয়। উদাহরণস্বরূপ, আগে থেকে থাকা কোনো ছবি নির্বাচন করার পরিবর্তে, ব্যবহারকারী ক্যামেরা দিয়ে একটি নতুন ছবি তুলতে পারেন।
আপনার onActivityResult() মেথডে পাঠানো রেজাল্ট ইন্টেন্টটিতে ফাইলটির দিকে নির্দেশকারী একটি URI সহ ডেটা অন্তর্ভুক্ত থাকে। URI-টি যেকোনো কিছু হতে পারে, যেমন একটি http: URI, file: URI, বা content: URI। তবে, যদি আপনি নির্বাচনযোগ্য ফাইলগুলিকে শুধুমাত্র সেই ফাইলগুলিতে সীমাবদ্ধ করতে চান যেগুলি একটি কন্টেন্ট প্রোভাইডার থেকে অ্যাক্সেসযোগ্য (একটি content: URI) এবং যেগুলি openFileDescriptor() এর মাধ্যমে একটি ফাইল স্ট্রিম হিসাবে উপলব্ধ, তাহলে আপনার ইন্টেন্টে CATEGORY_OPENABLE ক্যাটাগরিটি যোগ করুন।
অ্যান্ড্রয়েড ৪.৩ (এপিআই লেভেল ১৮) এবং এর পরবর্তী সংস্করণগুলোতে, ইন্টেন্টে EXTRA_ALLOW_MULTIPLE যোগ করে এবং সেটিকে true সেট করে আপনি ব্যবহারকারীকে একাধিক ফাইল নির্বাচন করার সুযোগ দিতে পারেন। এরপর, getClipData() দ্বারা ফেরত আসা ClipData অবজেক্টে আপনি নির্বাচিত প্রতিটি ফাইল অ্যাক্সেস করতে পারবেন।
- পদক্ষেপ
-
ACTION_GET_CONTENT - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- ব্যবহারকারীকে ফাইলের ধরনের সাথে সঙ্গতিপূর্ণ MIME টাইপটি নির্বাচন করতে হবে।
- অতিরিক্ত
-
EXTRA_ALLOW_MULTIPLE - একটি বুলিয়ান যা নির্ধারণ করে যে ব্যবহারকারী একই সময়ে একাধিক ফাইল নির্বাচন করতে পারবে কি না।
-
EXTRA_LOCAL_ONLY - একটি বুলিয়ান যা নির্ধারণ করে যে ফেরত আসা ফাইলটি কোনো রিমোট সার্ভিস থেকে ডাউনলোড করার প্রয়োজন ছাড়াই সরাসরি ডিভাইস থেকে পাওয়া যাবে কি না।
-
- বিভাগ (ঐচ্ছিক)
-
CATEGORY_OPENABLE - শুধুমাত্র সেইসব 'খোলার যোগ্য' ফাইল ফেরত দিতে, যেগুলোকে
openFileDescriptor()ব্যবহার করে ফাইল স্ট্রিম হিসেবে উপস্থাপন করা যায়।
-
ছবি পাওয়ার অভিপ্রায়ের উদাহরণ:
কোটলিন
const val REQUEST_IMAGE_GET = 1 fun selectImage() { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") val fullPhotoUri: Uri = data.data // Do work with photo saved at fullPhotoUri. ... } }
জাভা
static final int REQUEST_IMAGE_GET = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelable("data"); Uri fullPhotoUri = data.getData(); // Do work with photo saved at fullPhotoUri. ... } }
একটি ছবি ফেরত দেওয়ার জন্য ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The OPENABLE category declares that the returned file is accessible from a content provider that supportsOpenableColumnsandContentResolver.openFileDescriptor(). --> <category android:name="android.intent.category.OPENABLE" /> </intent-filter> </activity>
একটি নির্দিষ্ট ধরণের ফাইল খুলুন
আপনার অ্যাপে ইম্পোর্ট করার জন্য কোনো ফাইলের কপি পেতে ACTION_GET_CONTENT অ্যাকশন ব্যবহার করার পরিবর্তে, Android 4.4 বা তার উচ্চতর সংস্করণে আপনি ACTION_OPEN_DOCUMENT অ্যাকশন ব্যবহার করে এবং একটি MIME টাইপ নির্দিষ্ট করে অন্য কোনো অ্যাপ দ্বারা পরিচালিত ফাইল খোলার অনুরোধ করতে পারেন। এছাড়াও, ব্যবহারকারীকে এমন একটি নতুন ডকুমেন্ট তৈরি করার সুযোগ দিতে, যেখানে আপনার অ্যাপ লিখতে পারবে, তার পরিবর্তে ACTION_CREATE_DOCUMENT অ্যাকশনটি ব্যবহার করুন।
উদাহরণস্বরূপ, বিদ্যমান পিডিএফ ডকুমেন্ট থেকে নির্বাচন করার পরিবর্তে, ACTION_CREATE_DOCUMENT ইন্টেন্টটি ব্যবহারকারীদের নতুন ডকুমেন্টটি কোথায় তৈরি করতে চান তা নির্বাচন করার সুযোগ দেয়, যেমন অন্য কোনো অ্যাপের মধ্যে যা ডকুমেন্টটির স্টোরেজ পরিচালনা করে। এরপর আপনার অ্যাপটি নতুন ডকুমেন্টটি লেখার জন্য প্রয়োজনীয় URI লোকেশনটি পেয়ে যায়।
যেখানে ACTION_GET_CONTENT অ্যাকশন থেকে আপনার onActivityResult() মেথডে পাঠানো ইন্টেন্ট যেকোনো ধরনের একটি URI রিটার্ন করতে পারে, সেখানে ACTION_OPEN_DOCUMENT এবং ACTION_CREATE_DOCUMENT থেকে আসা রেজাল্ট ইন্টেন্ট সর্বদা নির্বাচিত ফাইলটিকে একটি content: URI হিসেবে নির্দিষ্ট করে, যা একটি DocumentsProvider দ্বারা সমর্থিত। আপনি openFileDescriptor() দিয়ে ফাইলটি খুলতে পারেন এবং DocumentsContract.Document এর কলামগুলো ব্যবহার করে এর বিবরণ কোয়েরি করতে পারেন।
ফেরত আসা URI আপনার অ্যাপকে ফাইলটিতে দীর্ঘমেয়াদী পঠন অ্যাক্সেস দেয়, এবং সম্ভবত লেখার অ্যাক্সেসও দেয়। ACTION_OPEN_DOCUMENT অ্যাকশনটি বিশেষভাবে উপযোগী যখন আপনি আপনার অ্যাপে কোনো অনুলিপি তৈরি না করে একটি বিদ্যমান ফাইল পড়তে চান অথবা যখন আপনি ফাইলটিকে তার স্থানেই খুলতে এবং সম্পাদনা করতে চান।
আপনি ইন্টেন্টে EXTRA_ALLOW_MULTIPLE যোগ করে এবং এর মান true সেট করে ব্যবহারকারীকে একাধিক ফাইল নির্বাচন করার সুযোগ দিতে পারেন। যদি ব্যবহারকারী কেবল একটি আইটেম নির্বাচন করেন, তাহলে আপনি getData() থেকে আইটেমটি নিতে পারবেন। যদি ব্যবহারকারী একাধিক আইটেম নির্বাচন করেন, তাহলে getData() null রিটার্ন করবে এবং সেক্ষেত্রে আপনাকে getClipData() দ্বারা রিটার্ন করা ClipData অবজেক্ট থেকে প্রতিটি আইটেম নিতে হবে।
দ্রষ্টব্য: আপনার ইন্টেন্টে অবশ্যই একটি MIME টাইপ নির্দিষ্ট করতে হবে এবং CATEGORY_OPENABLE ক্যাটাগরিটি ডিক্লেয়ার করতে হবে । প্রয়োজন হলে, আপনি EXTRA_MIME_TYPES এক্সট্রা ব্যবহার করে MIME টাইপের একটি অ্যারে যোগ করে একাধিক MIME টাইপ নির্দিষ্ট করতে পারেন—যদি আপনি তা করেন, তবে আপনাকে setType() ফাংশনে প্রাইমারি MIME টাইপটি "*/*" হিসেবে সেট করতে হবে।
- পদক্ষেপ
-
ACTION_OPEN_DOCUMENTঅথবা
ACTION_CREATE_DOCUMENT - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- ব্যবহারকারীকে ফাইলের ধরনের সাথে সঙ্গতিপূর্ণ MIME টাইপটি নির্বাচন করতে হবে।
- অতিরিক্ত
-
EXTRA_MIME_TYPES - আপনার অ্যাপ যে ধরনের ফাইল অনুরোধ করছে, তার সাথে সঙ্গতিপূর্ণ MIME টাইপগুলোর একটি অ্যারে। যখন আপনি এই এক্সট্রাটি ব্যবহার করবেন, তখন আপনাকে অবশ্যই
setType()প্রাইমারি MIME টাইপটি"*/*"হিসেবে সেট করতে হবে। -
EXTRA_ALLOW_MULTIPLE - একটি বুলিয়ান যা নির্ধারণ করে যে ব্যবহারকারী একই সময়ে একাধিক ফাইল নির্বাচন করতে পারবে কি না।
-
EXTRA_TITLE -
ACTION_CREATE_DOCUMENTসাথে প্রাথমিক ফাইলের নাম নির্দিষ্ট করার জন্য ব্যবহৃত হয়। -
EXTRA_LOCAL_ONLY - একটি বুলিয়ান যা নির্ধারণ করে যে ফেরত আসা ফাইলটি কোনো রিমোট সার্ভিস থেকে ডাউনলোড করার প্রয়োজন ছাড়াই সরাসরি ডিভাইস থেকে পাওয়া যাবে কি না।
-
- বিভাগ
-
CATEGORY_OPENABLE - শুধুমাত্র সেইসব 'খোলার যোগ্য' ফাইল ফেরত দিতে, যেগুলোকে
openFileDescriptor()ব্যবহার করে ফাইল স্ট্রিম হিসেবে উপস্থাপন করা যায়।
-
ছবি পাওয়ার অভিপ্রায়ের উদাহরণ:
কোটলিন
const val REQUEST_IMAGE_OPEN = 1 fun selectImage2() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { type = "image/*" addCategory(Intent.CATEGORY_OPENABLE) } // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) { val fullPhotoUri: Uri = data.data // Do work with full size photo saved at fullPhotoUri. ... } }
জাভা
static final int REQUEST_IMAGE_OPEN = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.setType("image/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) { Uri fullPhotoUri = data.getData(); // Do work with full size photo saved at fullPhotoUri. ... } }
তৃতীয় পক্ষের অ্যাপগুলো ACTION_OPEN_DOCUMENT অ্যাকশন ব্যবহার করে কোনো ইন্টেন্টের প্রতিক্রিয়া জানাতে পারে না। এর পরিবর্তে, সিস্টেম এই ইন্টেন্টটি গ্রহণ করে এবং বিভিন্ন অ্যাপ থেকে উপলব্ধ সমস্ত ফাইল একটি সমন্বিত ইউজার ইন্টারফেসে প্রদর্শন করে।
এই UI-তে আপনার অ্যাপের ফাইলগুলি সরবরাহ করতে এবং অন্যান্য অ্যাপকে সেগুলি খোলার সুযোগ দিতে, আপনাকে অবশ্যই একটি DocumentsProvider ইমপ্লিমেন্ট করতে হবে এবং PROVIDER_INTERFACE ( "android.content.action.DOCUMENTS_PROVIDER" )-এর জন্য একটি ইন্টেন্ট ফিল্টার অন্তর্ভুক্ত করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<provider ... android:grantUriPermissions="true" android:exported="true" android:permission="android.permission.MANAGE_DOCUMENTS"> <intent-filter> <action android:name="android.content.action.DOCUMENTS_PROVIDER" /> </intent-filter> </provider>
আপনার অ্যাপ দ্বারা পরিচালিত ফাইলগুলিকে অন্যান্য অ্যাপ থেকে কীভাবে খোলা যায় সে সম্পর্কে আরও তথ্যের জন্য, "স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করে ফাইল খুলুন" পড়ুন।
স্থানীয় পদক্ষেপ
গাড়ি ডাকা একটি সাধারণ স্থানীয় কাজ। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার ক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
একটি গাড়ি ডাকুন
গুগল ভয়েস অ্যাকশন
- আমার জন্য একটা ট্যাক্সি ডেকে দাও।
- আমাকে একটি গাড়ি ডাকুন
(শুধুমাত্র OS পরিধান করুন)
ট্যাক্সি ডাকার জন্য ACTION_RESERVE_TAXI_RESERVATION অ্যাকশনটি ব্যবহার করুন।
দ্রষ্টব্য: এই কাজটি সম্পন্ন করার আগে অ্যাপগুলোকে অবশ্যই ব্যবহারকারীর কাছ থেকে নিশ্চিতকরণ চাইতে হবে।
- পদক্ষেপ
-
ACTION_RESERVE_TAXI_RESERVATION - ডেটা ইউআরআই
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
- কোনোটিই না
উদাহরণ অভিপ্রায়:
কোটলিন
fun callCar() { val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void callCar() { Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
মানচিত্র
ম্যাপে কোনো অবস্থান দেখানো ম্যাপ অ্যাপগুলোর জন্য একটি সাধারণ কাজ। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার ক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
মানচিত্রে একটি অবস্থান দেখান
মানচিত্র খুলতে, ACTION_VIEW অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত স্কিমগুলির মধ্যে যেকোনো একটি ব্যবহার করে ইন্টেন্ট ডেটাতে অবস্থানের তথ্য নির্দিষ্ট করুন।
- পদক্ষেপ
-
ACTION_VIEW - ডেটা ইউআরআই স্কিম
-
geo: latitude , longitude - প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে মানচিত্রটি দেখান।
উদাহরণ:
"geo:47.6,-122.3" -
geo: latitude , longitude ?z= zoom - প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে একটি নির্দিষ্ট জুম স্তরে মানচিত্রটি দেখান। জুম স্তর ১ প্রদত্ত অক্ষাংশ ও দ্রাঘিমাংশে কেন্দ্র করে সমগ্র পৃথিবী দেখায়। সর্বোচ্চ (নিকটতম) জুম স্তর হলো ২৩।
উদাহরণ:
"geo:47.6,-122.3?z=11" -
geo:0,0?q=lat,lng(label) - প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে একটি স্ট্রিং লেবেলসহ মানচিত্রটি দেখান।
উদাহরণ:
"geo:0,0?q=34.99,-106.61(Treasure)" -
geo:0,0?q=my+street+address - 'আমার রাস্তার ঠিকানা'-র অবস্থান দেখান, যা একটি নির্দিষ্ট ঠিকানা বা অবস্থানের অনুসন্ধান হতে পারে।
উদাহরণ:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"দ্রষ্টব্য:
geoইউআরআই-তে দেওয়া সমস্ত স্ট্রিং অবশ্যই এনকোড করতে হবে। উদাহরণস্বরূপ,1st & Pike, Seattleস্ট্রিংটি1st%20%26%20Pike%2C%20Seattleপরিণত হয়। স্ট্রিং-এর মধ্যে থাকা স্পেস%20দিয়ে এনকোড করা হয় অথবা প্লাস চিহ্ন (+) দিয়ে প্রতিস্থাপন করা হয়।
-
- MIME টাইপ
- কোনোটিই না
উদাহরণ অভিপ্রায়:
কোটলিন
fun showMap(geoLocation: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = geoLocation } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void showMap(Uri geoLocation) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(geoLocation); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="geo" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
সঙ্গীত বা ভিডিও
নিচে মিউজিক এবং ভিডিও অ্যাপের সাধারণ কিছু কার্যকলাপ উল্লেখ করা হলো, যার মধ্যে আপনার অ্যাপের প্রতিটি কার্যকলাপ সম্পাদনের সক্ষমতা প্রচার করার জন্য একটি ইন্টেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও অন্তর্ভুক্ত রয়েছে।
একটি মিডিয়া ফাইল চালান
একটি মিউজিক ফাইল প্লে করতে, ACTION_VIEW অ্যাকশনটি ব্যবহার করুন এবং ইন্টেন্ট ডেটাতে ফাইলটির URI লোকেশন উল্লেখ করুন।
- পদক্ষেপ
-
ACTION_VIEW - ডেটা ইউআরআই স্কিম
-
file: <URI>content: <URI>http: <URL>
-
- MIME টাইপ
-
"audio/*""application/ogg""application/x-ogg""application/itunes"- অথবা আপনার অ্যাপের জন্য প্রয়োজনীয় অন্য যেকোনো কিছু।
-
উদাহরণ অভিপ্রায়:
কোটলিন
fun playMedia(file: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = file } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void playMedia(Uri file) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(file); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:type="audio/*" /> <data android:type="application/ogg" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
অনুসন্ধানের ভিত্তিতে গান চালান।
সার্চ কোয়েরির উপর ভিত্তি করে মিউজিক প্লে করতে, INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH ইন্টেন্টটি ব্যবহার করুন। ব্যবহারকারীর মিউজিক প্লে করার ভয়েস কমান্ডের জবাবে কোনো অ্যাপ এই ইন্টেন্টটি ফায়ার করতে পারে। এই ইন্টেন্টটি গ্রহণকারী অ্যাপটি প্রদত্ত কোয়েরির সাথে বিদ্যমান কন্টেন্ট মেলানোর জন্য তার ইনভেন্টরিতে সার্চ করে এবং সেই কন্টেন্টটি প্লে করা শুরু করে।
এই ইন্টেন্টে, EXTRA_MEDIA_FOCUS স্ট্রিং এক্সট্রাটি অন্তর্ভুক্ত করুন, যা উদ্দিষ্ট সার্চ মোড নির্দিষ্ট করে। উদাহরণস্বরূপ, সার্চ মোডটি নির্দিষ্ট করতে পারে যে অনুসন্ধানটি কোনো শিল্পীর নাম দিয়ে করা হবে নাকি গানের নাম দিয়ে।
- পদক্ষেপ
-
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
-
MediaStore.EXTRA_MEDIA_FOCUS(প্রয়োজনীয়) এটি সার্চ মোড নির্দেশ করে: ব্যবহারকারী কোনো নির্দিষ্ট শিল্পী, অ্যালবাম, গান, বা প্লেলিস্ট খুঁজছেন কিনা। বেশিরভাগ সার্চ মোডে অতিরিক্ত কিছু তথ্য যুক্ত করা যায়। উদাহরণস্বরূপ, যদি ব্যবহারকারী কোনো নির্দিষ্ট গান শুনতে আগ্রহী হন, তাহলে ইন্টেন্টটিতে তিনটি অতিরিক্ত তথ্য থাকতে পারে: গানের শিরোনাম, শিল্পী এবং অ্যালবাম। এই ইন্টেন্টটি
EXTRA_MEDIA_FOCUSএর প্রতিটি মানের জন্য নিম্নলিখিত সার্চ মোডগুলো সমর্থন করে:যেকোনো -
"vnd.android.cursor.item/*"যেকোনো গান চালান। গ্রহণকারী অ্যাপটি ব্যবহারকারীর শোনা শেষ প্লেলিস্টের মতো একটি স্মার্ট পছন্দের উপর ভিত্তি করে কিছু গান বাজায়।
অতিরিক্ত সংযোজন:
-
QUERY(আবশ্যক): একটি খালি স্ট্রিং। পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রক্ষার জন্য এই অতিরিক্ত বৈশিষ্ট্যটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইনটেন্টটিকে একটি অসংগঠিত অনুসন্ধান হিসেবে প্রক্রিয়া করতে পারে।
-
অসংগঠিত -
"vnd.android.cursor.item/*"একটি অসংগঠিত সার্চ কোয়েরি থেকে কোনো নির্দিষ্ট গান, অ্যালবাম বা জনরা চালান। ব্যবহারকারী কোন ধরনের কন্টেন্ট শুনতে চান তা শনাক্ত করতে না পারলে, অ্যাপগুলো এই সার্চ মোডের মাধ্যমে একটি ইনটেন্ট তৈরি করতে পারে। সম্ভব হলে আরও সুনির্দিষ্ট সার্চ মোড ব্যবহার করুন।
অতিরিক্ত সংযোজন:
-
QUERY(আবশ্যক): একটি স্ট্রিং যাতে শিল্পী, অ্যালবাম, গানের নাম বা জনরার যেকোনো সংমিশ্রণ থাকতে পারে।
-
একটি নির্দিষ্ট ঘরানার সঙ্গীত বাজান।
অতিরিক্ত সংযোজন:
-
"android.intent.extra.genre"(প্রয়োজনীয়) - জনরা। -
QUERY(আবশ্যক): জেনার। ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য এই অতিরিক্ত ফিচারটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইনটেন্টটিকে একটি আনস্ট্রাকচার্ড সার্চ হিসেবে প্রসেস করতে পারে।
-
শিল্পী -
Audio.Artists.ENTRY_CONTENT_TYPEকোনো নির্দিষ্ট শিল্পীর গান চালান।
অতিরিক্ত সংযোজন:
-
EXTRA_MEDIA_ARTIST(আবশ্যক): শিল্পী। -
"android.intent.extra.genre": ধরণ। -
QUERY(আবশ্যক): একটি স্ট্রিং যাতে শিল্পী বা জনরার যেকোনো সংমিশ্রণ থাকতে পারে। পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রক্ষার জন্য এই অতিরিক্ত বৈশিষ্ট্যটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইন্টেন্টটিকে একটি অসংগঠিত অনুসন্ধান হিসাবে প্রক্রিয়া করতে পারে।
-
অ্যালবাম -
Audio.Albums.ENTRY_CONTENT_TYPEএকটি নির্দিষ্ট অ্যালবাম থেকে গান বাজান।
অতিরিক্ত সংযোজন:
-
EXTRA_MEDIA_ALBUM(প্রয়োজনীয়): অ্যালবামটি। -
EXTRA_MEDIA_ARTIST: শিল্পী। -
"android.intent.extra.genre": ধরণ। -
QUERY(আবশ্যক): একটি স্ট্রিং যাতে অ্যালবাম বা শিল্পীর যেকোনো সংমিশ্রণ থাকতে পারে। পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রক্ষার জন্য এই অতিরিক্ত বৈশিষ্ট্যটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইন্টেন্টটিকে একটি অসংগঠিত অনুসন্ধান হিসাবে প্রক্রিয়া করতে পারে।
-
গান -
"vnd.android.cursor.item/audio"একটি নির্দিষ্ট গান বাজান।
অতিরিক্ত সংযোজন:
-
EXTRA_MEDIA_ALBUM: অ্যালবামটি। -
EXTRA_MEDIA_ARTIST: শিল্পী। -
"android.intent.extra.genre": ধরণ। -
EXTRA_MEDIA_TITLE(আবশ্যক): গানের নাম। -
QUERY(আবশ্যক): একটি স্ট্রিং যাতে অ্যালবাম, শিল্পী, জনরা বা শিরোনামের যেকোনো সংমিশ্রণ থাকতে পারে। পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রক্ষার জন্য এই অতিরিক্ত সুবিধাটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইনটেন্টটিকে একটি অসংগঠিত অনুসন্ধান হিসেবে প্রক্রিয়া করতে পারে।
-
প্লেলিস্ট -
Audio.Playlists.ENTRY_CONTENT_TYPEএকটি নির্দিষ্ট প্লেলিস্ট অথবা অতিরিক্ত বৈশিষ্ট্য দ্বারা নির্ধারিত কিছু শর্ত পূরণ করে এমন একটি প্লেলিস্ট চালান।
অতিরিক্ত সংযোজন:
-
EXTRA_MEDIA_ALBUM: অ্যালবামটি। -
EXTRA_MEDIA_ARTIST: শিল্পী। -
"android.intent.extra.genre": ধরণ। -
"android.intent.extra.playlist": প্লেলিস্টটি। -
EXTRA_MEDIA_TITLE: যে গানের নামের উপর ভিত্তি করে প্লেলিস্টটি তৈরি করা হয়েছে। -
QUERY(আবশ্যক): একটি স্ট্রিং যাতে অ্যালবাম, শিল্পী, জনরা, প্লেলিস্ট বা শিরোনামের যেকোনো সংমিশ্রণ থাকতে পারে। পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রক্ষার জন্য এই অতিরিক্ত বৈশিষ্ট্যটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইন্টেন্টটিকে একটি অসংগঠিত সার্চ হিসেবে প্রক্রিয়া করতে পারে।
-
-
উদাহরণ অভিপ্রায়:
যদি ব্যবহারকারী কোনো নির্দিষ্ট শিল্পীর গান শুনতে চান, তাহলে একটি সার্চ অ্যাপ নিম্নলিখিত ইন্টেন্টটি তৈরি করতে পারে:
কোটলিন
fun playSearchArtist(artist: String) { val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply { putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist) putExtra(SearchManager.QUERY, artist) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void playSearchArtist(String artist) { Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH); intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist); intent.putExtra(SearchManager.QUERY, artist); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
আপনার অ্যাক্টিভিটিতে এই ইন্টেন্টটি পরিচালনা করার সময়, সার্চ মোড নির্ধারণ করতে আগত Intent EXTRA_MEDIA_FOCUS এক্সট্রাটির মান পরীক্ষা করুন। আপনার অ্যাক্টিভিটি সার্চ মোড শনাক্ত করার পর, সেই নির্দিষ্ট সার্চ মোডের জন্য অতিরিক্ত এক্সট্রাগুলোর মান পড়ুন। এই তথ্যের সাহায্যে, আপনার অ্যাপ তার ইনভেন্টরির মধ্যে অনুসন্ধান করে সার্চ কোয়েরির সাথে মিলে যাওয়া কন্টেন্টটি প্লে করতে পারবে। এটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।
কোটলিন
override fun onCreate(savedInstanceState: Bundle?) { ... if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS) val query: String? = intent.getStringExtra(SearchManager.QUERY) // Some of these extras might not be available depending on the search mode. val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM) val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST) val genre: String? = intent.getStringExtra("android.intent.extra.genre") val playlist: String? = intent.getStringExtra("android.intent.extra.playlist") val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE) // Determine the search mode and use the corresponding extras. when { mediaFocus == null -> { // 'Unstructured' search mode (backward compatible) playUnstructuredSearch(query) } mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> { if (query?.isNotEmpty() == true) { // 'Unstructured' search mode. playUnstructuredSearch(query) } else { // 'Any' search mode. playResumeLastPlaylist() } } mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> { // 'Genre' search mode. playGenre(genre) } mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Artist' search mode. playArtist(artist, genre) } mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> { // 'Album' search mode. playAlbum(album, artist) } mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> { // 'Song' search mode. playSong(album, artist, genre, title) } mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title) } } } }
জাভা
protected void onCreate(Bundle savedInstanceState) { //... Intent intent = this.getIntent(); if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS); String query = intent.getStringExtra(SearchManager.QUERY); // Some of these extras might not be available depending on the search mode. String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM); String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST); String genre = intent.getStringExtra("android.intent.extra.genre"); String playlist = intent.getStringExtra("android.intent.extra.playlist"); String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE); // Determine the search mode and use the corresponding extras. if (mediaFocus == null) { // 'Unstructured' search mode (backward compatible). playUnstructuredSearch(query); } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) { if (query.isEmpty()) { // 'Any' search mode. playResumeLastPlaylist(); } else { // 'Unstructured' search mode. playUnstructuredSearch(query); } } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) { // 'Genre' search mode. playGenre(genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) { // 'Artist' search mode. playArtist(artist, genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) { // 'Album' search mode. playAlbum(album, artist); } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) { // 'Song' search mode. playSong(album, artist, genre, title); } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title); } } }
নতুন নোট
নোট তৈরি করা নোট-টেকিং অ্যাপগুলোর জন্য একটি সাধারণ কাজ। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার ক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
একটি নোট তৈরি করুন
নতুন নোট তৈরি করতে, ACTION_CREATE_NOTE অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত এক্সট্রাগুলো ব্যবহার করে বিষয় ও লেখার মতো নোটের বিবরণ নির্দিষ্ট করুন।
দ্রষ্টব্য: এই কাজটি সম্পন্ন করার আগে অ্যাপগুলোকে অবশ্যই ব্যবহারকারীর কাছ থেকে নিশ্চিতকরণ চাইতে হবে।
- পদক্ষেপ
-
ACTION_CREATE_NOTE - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
-
PLAIN_TEXT_TYPE - "*/*"
- অতিরিক্ত
-
EXTRA_NAME - নোটটির শিরোনাম বা বিষয় নির্দেশকারী একটি স্ট্রিং।
-
EXTRA_TEXT - নোটটির পাঠ্য নির্দেশকারী একটি স্ট্রিং।
-
- পদক্ষেপ
-
ACTION_DIAL- ডায়ালার বা ফোন অ্যাপ খোলে। -
ACTION_CALL- একটি ফোন কল করে (এর জন্যCALL_PHONEপারমিশন প্রয়োজন)
-
- ডেটা ইউআরআই স্কিম
-
tel:<phone-number> -
voicemail:<phone-number>
-
- MIME টাইপ
- কোনোটিই না
-
tel:2125551212 -
tel:(212) 555 1212 - পদক্ষেপ
-
"com.google.android.gms.actions.SEARCH_ACTION" - গুগল ভয়েস অ্যাকশন থেকে সার্চ কোয়েরি সমর্থন করুন।
-
- অতিরিক্ত
-
QUERY - একটি স্ট্রিং যাতে সার্চ কোয়েরিটি থাকে।
-
- পদক্ষেপ
-
ACTION_WEB_SEARCH - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- অতিরিক্ত
-
SearchManager.QUERY - অনুসন্ধান স্ট্রিং।
-
- পদক্ষেপ
-
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGSউপলব্ধ অতিরিক্ত সেটিংস স্ক্রিনগুলির জন্য,
Settingsডকুমেন্টেশন দেখুন। - ডেটা ইউআরআই স্কিম
- কোনোটিই না
- MIME টাইপ
- কোনোটিই না
- পদক্ষেপ
-
ACTION_SENDTOঅথবা
ACTION_SENDঅথবা
ACTION_SEND_MULTIPLE - ডেটা ইউআরআই স্কিম
-
sms: <phone_number>smsto: <phone_number>mms: <phone_number>mmsto: <phone_number>
এই প্রকল্পগুলো সবই একই পদ্ধতিতে পরিচালিত হয়।
-
- MIME টাইপ
-
"text/plain""image/*""video/*"
-
- অতিরিক্ত
-
"subject" - বার্তার বিষয়ের জন্য একটি স্ট্রিং (সাধারণত শুধু এমএমএস-এর জন্য)।
-
"sms_body" - টেক্সট মেসেজটির জন্য একটি স্ট্রিং।
-
EXTRA_STREAM - সংযুক্ত করার জন্য ছবি বা ভিডিও নির্দেশকারী একটি
Uri। যদিACTION_SEND_MULTIPLEঅ্যাকশনটি ব্যবহার করা হয়, তাহলে এই এক্সট্রাটি হলো সংযুক্ত করার জন্য ছবি বা ভিডিও নির্দেশকারীUriঅবজেক্টের একটিArrayList।
-
- পদক্ষেপ
-
ACTION_VIEW - ডেটা ইউআরআই স্কিম
-
http: <URL>
https: <URL> - MIME টাইপ
-
"text/plain""text/html""application/xhtml+xml""application/vnd.wap.xhtml+xml"
-
- ডেভেলপমেন্টের জন্য একটি অ্যান্ড্রয়েড ডিভাইস সেট আপ করুন অথবা একটি ভার্চুয়াল ডিভাইস ব্যবহার করুন।
- আপনার অ্যাপের এমন একটি সংস্করণ ইনস্টল করুন যা আপনি যে ইন্টেন্টগুলো সমর্থন করতে চান তা পরিচালনা করতে পারে।
- Fire an intent using
adb:adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
উদাহরণস্বরূপ:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- If you define the required intent filters, handle the intent.
উদাহরণ অভিপ্রায়:
কোটলিন
fun createNote(subject: String, text: String) { val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply { putExtra(NoteIntents.EXTRA_NAME, subject) putExtra(NoteIntents.EXTRA_TEXT, text) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void createNote(String subject, String text) { Intent intent = new Intent(NoteIntents.ACTION_CREATE_NOTE) .putExtra(NoteIntents.EXTRA_NAME, subject) .putExtra(NoteIntents.EXTRA_TEXT, text); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.CREATE_NOTE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter> </activity>
ফোন
ফোন অ্যাপের জন্য কল শুরু করা একটি সাধারণ কাজ। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার ক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
একটি ফোন কল শুরু করুন
ফোন অ্যাপ খুলতে এবং ফোন নম্বর ডায়াল করতে, ACTION_DIAL অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত URI স্কিম ব্যবহার করে একটি ফোন নম্বর নির্দিষ্ট করুন। ফোন অ্যাপটি খুললে, এটি ফোন নম্বরটি প্রদর্শন করে এবং ফোন কল শুরু করার জন্য ব্যবহারকারীকে অবশ্যই কল বোতামে ট্যাপ করতে হবে।
সরাসরি ফোন কল করার জন্য, ACTION_CALL অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত URI স্কিম ব্যবহার করে একটি ফোন নম্বর নির্দিষ্ট করুন। ফোন অ্যাপটি খোলার সাথে সাথেই ফোন কলটি শুরু হয়ে যায়। ব্যবহারকারীকে কল বোতামে ট্যাপ করার প্রয়োজন নেই।
ACTION_CALL অ্যাকশনটির জন্য আপনার ম্যানিফেস্ট ফাইলে CALL_PHONE পারমিশনটি যোগ করতে হবে:
<uses-permission android:name="android.permission.CALL_PHONE" />
IETF RFC 3966- এ সংজ্ঞায়িত নম্বরগুলোই বৈধ টেলিফোন নম্বর। বৈধ উদাহরণগুলোর মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:
ফোন অ্যাপের ডায়ালার টেলিফোন নম্বরের মতো স্কিমগুলোকে স্বাভাবিক করতে পারদর্শী। তাই Uri.parse() মেথডে বর্ণিত স্কিমটি কঠোরভাবে আবশ্যক নয়। তবে, যদি আপনি কোনো স্কিম চেষ্টা না করে থাকেন বা এটি পরিচালনা করা যাবে কিনা সে বিষয়ে অনিশ্চিত থাকেন, তাহলে এর পরিবর্তে Uri.fromParts() মেথডটি ব্যবহার করুন।
উদাহরণ অভিপ্রায়:
কোটলিন
fun dialPhoneNumber(phoneNumber: String) { val intent = Intent(Intent.ACTION_DIAL).apply { data = Uri.parse("tel:$phoneNumber") } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void dialPhoneNumber(String phoneNumber) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + phoneNumber)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
অনুসন্ধান
নিচে সার্চ অ্যাপের কিছু সাধারণ কার্যকলাপ উল্লেখ করা হলো, যার মধ্যে আপনার অ্যাপের প্রতিটি কার্যকলাপ সম্পাদনের সক্ষমতা প্রচার করার জন্য একটি ইন্টেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও রয়েছে।
একটি নির্দিষ্ট অ্যাপ ব্যবহার করে অনুসন্ধান করুন
আপনার অ্যাপের প্রেক্ষাপটে সার্চ সমর্থন করার জন্য, নিম্নলিখিত ইন্টেন্ট ফিল্টার উদাহরণে দেখানো অনুযায়ী SEARCH_ACTION অ্যাকশন সহ আপনার অ্যাপে একটি ইন্টেন্ট ফিল্টার ঘোষণা করুন।
দ্রষ্টব্য: আমরা অ্যাপ অনুসন্ধানের জন্য SEARCH_ACTION ব্যবহার করার পরামর্শ দিই না। এর পরিবর্তে, ইন-অ্যাপ অনুসন্ধানের জন্য গুগল অ্যাসিস্ট্যান্টের অন্তর্নির্মিত সমর্থন ব্যবহার করতে GET_THING অ্যাকশনটি প্রয়োগ করুন। আরও তথ্যের জন্য, গুগল অ্যাসিস্ট্যান্ট অ্যাপ অ্যাকশন ডকুমেন্টেশন দেখুন।
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity android:name=".SearchActivity"> <intent-filter> <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
ওয়েব অনুসন্ধান করুন
ওয়েব অনুসন্ধান শুরু করতে, ACTION_WEB_SEARCH অ্যাকশনটি ব্যবহার করুন এবং SearchManager.QUERY এক্সট্রাতে সার্চ স্ট্রিংটি নির্দিষ্ট করুন।
উদাহরণ অভিপ্রায়:
কোটলিন
fun searchWeb(query: String) { val intent = Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra(SearchManager.QUERY, query) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void searchWeb(String query) { Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, query); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
সেটিংস
যখন আপনার অ্যাপে ব্যবহারকারীকে কিছু পরিবর্তন করতে বলা হয়, তখন সিস্টেমের সেটিংস অ্যাপে একটি স্ক্রিন খোলার জন্য নিম্নলিখিত ইন্টেন্ট অ্যাকশনগুলির মধ্যে একটি ব্যবহার করুন:
উদাহরণ অভিপ্রায়:
কোটলিন
fun openWifiSettings() { val intent = Intent(Settings.ACTION_WIFI_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void openWifiSettings() { Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
টেক্সট মেসেজিং
অ্যাটাচমেন্টসহ এসএমএস/এমএমএস বার্তা লেখা টেক্সট মেসেজিং অ্যাপগুলোর একটি সাধারণ কাজ। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার ক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
অ্যাটাচমেন্ট সহ একটি এসএমএস/এমএমএস বার্তা রচনা করুন।
এসএমএস বা এমএমএস টেক্সট মেসেজ শুরু করতে, নিচের ইন্টেন্ট অ্যাকশনগুলোর মধ্যে যেকোনো একটি ব্যবহার করুন এবং নিচের অতিরিক্ত কীগুলো ব্যবহার করে ফোন নম্বর, বিষয় এবং মেসেজের মূল অংশের মতো বিবরণ উল্লেখ করুন।
উদাহরণ অভিপ্রায়:
কোটলিন
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SENDTO).apply { type = HTTP.PLAIN_TEXT_TYPE putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType(HTTP.PLAIN_TEXT_TYPE); intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
আপনি যদি নিশ্চিত করতে চান যে আপনার ইনটেন্টটি শুধুমাত্র একটি টেক্সট মেসেজিং অ্যাপ দ্বারা পরিচালিত হবে, এবং অন্য কোনো ইমেল বা সোশ্যাল অ্যাপ দ্বারা নয়, তাহলে ACTION_SENDTO অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী "smsto:" ডেটা স্কিমটি অন্তর্ভুক্ত করুন:
কোটলিন
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { data = Uri.parse("smsto:") // Only SMS apps respond to this. putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setData(Uri.parse("smsto:")); // Only SMS apps respond to this. intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="text/plain" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
দ্রষ্টব্য: আপনি যদি একটি SMS/MMS মেসেজিং অ্যাপ তৈরি করেন, তাহলে Android 4.4 এবং তার পরবর্তী সংস্করণগুলিতে ডিফল্ট SMS অ্যাপ হিসেবে উপলব্ধ হওয়ার জন্য আপনাকে অবশ্যই আরও কয়েকটি অতিরিক্ত অ্যাকশনের জন্য ইন্টেন্ট ফিল্টার প্রয়োগ করতে হবে। আরও তথ্যের জন্য, Telephony এর ডকুমেন্টেশন দেখুন।
ওয়েব ব্রাউজার
ওয়েব ব্রাউজার অ্যাপগুলোর জন্য ওয়েব ইউআরএল লোড করা একটি সাধারণ কাজ। নিচের বিভাগে দেওয়া তথ্য ব্যবহার করে আপনার অ্যাপের এই কাজটি করার সক্ষমতা প্রচার করতে একটি ইন্টেন্ট ফিল্টার তৈরি করুন।
একটি ওয়েব ইউআরএল লোড করুন
ওয়েব পেজ খুলতে, ACTION_VIEW অ্যাকশনটি ব্যবহার করুন এবং ইন্টেন্ট ডেটাতে ওয়েব URL-টি উল্লেখ করুন।
উদাহরণ অভিপ্রায়:
কোটলিন
fun openWebPage(url: String) { val webpage: Uri = Uri.parse(url) val intent = Intent(Intent.ACTION_VIEW, webpage) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
জাভা
public void openWebPage(String url) { Uri webpage = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, webpage); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ইন্টেন্ট ফিল্টারের উদাহরণ:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <!-- Include the host attribute if you want your app to respond only to URLs with your app's domain. --> <data android:scheme="http" android:host="www.example.com" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The BROWSABLE category is required to get links from web pages. --> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
পরামর্শ: আপনার অ্যান্ড্রয়েড অ্যাপে যদি আপনার ওয়েবসাইটের মতো কার্যকারিতা থাকে, তবে আপনার ওয়েবসাইটের ইউআরএলগুলোর জন্য একটি ইন্টেন্ট ফিল্টার অন্তর্ভুক্ত করুন। তাহলে, ব্যবহারকারীদের কাছে আপনার অ্যাপটি ইনস্টল করা থাকলে, ইমেল বা অন্যান্য ওয়েব পেজ থেকে আপনার ওয়েবসাইটের লিঙ্কগুলো আপনার ওয়েব পেজের পরিবর্তে আপনার অ্যান্ড্রয়েড অ্যাপটি খুলবে। অ্যান্ড্রয়েড অ্যাপ লিঙ্ক পরিচালনা (Handling Android App Links) অংশে এ সম্পর্কে আরও জানুন।
অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) থেকে, একটি জেনেরিক ওয়েব ইন্টেন্ট আপনার অ্যাপের কোনো অ্যাক্টিভিটিতে তখনই রিজলভ হয়, যখন আপনার অ্যাপটি সেই ওয়েব ইন্টেন্টে থাকা নির্দিষ্ট ডোমেইনের জন্য অনুমোদিত থাকে। যদি আপনার অ্যাপটি ডোমেইনটির জন্য অনুমোদিত না হয়, তবে ওয়েব ইন্টেন্টটি এর পরিবর্তে ব্যবহারকারীর ডিফল্ট ব্রাউজার অ্যাপে রিজলভ হয়।
অ্যান্ড্রয়েড ডিবাগ ব্রিজ দিয়ে ইনটেন্ট যাচাই করুন
আপনার অ্যাপটি আপনি যে ইন্টেন্টগুলো সমর্থন করতে চান সেগুলোতে সাড়া দিচ্ছে কিনা তা যাচাই করতে, আপনি adb টুল ব্যবহার করে নিম্নলিখিত উপায়ে নির্দিষ্ট ইন্টেন্টগুলো ফায়ার করতে পারেন:
For more information, see Issue shell commands .
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2026-04-24 UTC-তে শেষবার আপডেট করা হয়েছে।