ইন্টেন্ট আপনাকে কোনও Intent অবজেক্টে "ম্যাপ দেখা" বা "ছবি
তোলা"-র মতো
আপনি যে অ্যাকশন পারফর্ম করতে চান তা বর্ণনা করে অন্য অ্যাপে অ্যাক্টিভিটি শুরু করতে দেয়। এই ধরনের ইনটেন্টকে
ইমপ্লিসিট ইনটেন্ট বলা হয় কারণ এটি শুরু করার জন্য অ্যাপ
কম্পোনেন্ট নির্দিষ্ট করে না, পরিবর্তে একটি অ্যাকশন নির্দিষ্ট করে এবং
কিছু ডেটা প্রদান করে যার সাহায্যে অ্যাকশনটি পারফর্ম করা যায়।
আপনি startActivity()
বা startActivityForResult()-কে কল করে কোনও পরোক্ষ ইনটেন্ট পাস করলে, সিস্টেম
ইনটেন্ট হ্যান্ডেল করতে পারে এমন কোনও অ্যাপের সাথে ইনটেন্টটি সমাধান করে এবং এর সংশ্লিষ্ট Activity
শুরু করে। যদি একাধিক অ্যাপ থাকে
যা উদ্দেশ্য পূরণ করতে পারে, তাহলে সিস্টেম ব্যবহারকারীকে একটি ডায়ালগ দেখায়
যেখান থেকে কোন অ্যাপ ব্যবহার করতে হবে তা বেছে নিতে পারেন।
এই পৃষ্ঠায় বেশ কিছু পরোক্ষ ইনটেন্ট বর্ণনা করা হয়েছে যা আপনি সাধারণ অ্যাকশন পারফর্ম করতে ব্যবহার করতে পারেন। এগুলি ইনটেন্ট ম্যানেজ করা অ্যাপের ধরন অনুযায়ী সাজানো হয়েছে। এছাড়াও, প্রতিটি বিভাগে কীভাবে আপনার অ্যাপের অ্যাকশন পারফর্ম করার ক্ষমতা বিজ্ঞাপন দেওয়ার জন্য ইনটেন্ট ফিল্টার তৈরি করতে হয় তা দেখানো হয়।
সতর্কতা: ডিভাইসে যদি এমন কোনও অ্যাপ না থাকে যা
ইমপ্লিসিট ইনটেন্ট গ্রহণ করতে পারে, তাহলে startActivity() কল করলে অ্যাপ ক্র্যাশ করে। ইন্টেন্ট গ্রহণ করার জন্য কোনও অ্যাপ আছে কিনা তা প্রথমে যাচাই করতে, আপনার Intent অবজেক্টে resolveActivity() কল করুন। ফলাফলটি শূন্য না হলে, অন্তত
একটি অ্যাপ আছে যা ইনটেন্ট হ্যান্ডেল করতে পারে এবং startActivity() কল করা নিরাপদ। ফলাফল
নাল হলে, ইনটেন্ট ব্যবহার করবেন না এবং সম্ভব হলে, যে ফিচার ইনটেন্টকে
ইনভোক করে সেটি বন্ধ করে দিন।
আপনি যদি কীভাবে ইনটেন্ট বা ইনটেন্ট ফিল্টার তৈরি করতে হয় তা না জানেন, তাহলে প্রথমে ইনটেন্ট ও ইনটেন্ট ফিল্টার পড়ুন।
আপনার ডেভেলপমেন্ট হোস্ট থেকে এই পৃষ্ঠায় তালিকাভুক্ত ইনটেন্ট কীভাবে ফায়ার করতে হয় তা জানতে, Android Debug Bridge-এর মাধ্যমে ইনটেন্ট যাচাই করুন বিভাগ দেখুন।
Google Voice অ্যাকশন
Google Voice অ্যাকশন ভয়েস কমান্ডের উত্তরে এই পৃষ্ঠায় তালিকাভুক্ত কিছু ইনটেন্ট ফায়ার করে। আরও তথ্যের জন্য, সিস্টেম ভয়েস অ্যাকশন ব্যবহার করা শুরু করুন দেখুন।
অ্যালার্ম ঘড়ি
অ্যালার্ম ক্লক অ্যাপের জন্য নিম্নলিখিত সাধারণ অ্যাকশনগুলি হল, আপনার অ্যাপের প্রতিটি অ্যাকশন পারফর্ম করার ক্ষমতা বিজ্ঞাপন দেওয়ার জন্য ইনটেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্য।
অ্যালার্ম তৈরি করা
নতুন অ্যালার্ম তৈরি করতে, ACTION_SET_ALARM
অ্যাকশন ব্যবহার করুন এবং নিম্নলিখিত এক্সট্রা ব্যবহার করে সময় ও মেসেজের মতো অ্যালার্মের বিবরণ নির্দিষ্ট করুন।
মনে রাখবেন: Android 2.3 (API লেভেল 9) ও তার আগের ভার্সনে শুধু ঘণ্টা, মিনিট ও মেসেজ এক্সট্রা উপলভ্য থাকে। অন্যান্য অতিরিক্ত ফিচারগুলি প্ল্যাটফর্মের উন্নত ভার্সনে উপলভ্য।
- অ্যাকশন
ACTION_SET_ALARM- ডেটা URI
- কোনওটিই নয়
- MIME-এর ধরন
- কোনওটিই নয়
- অতিরিক্ত
-
EXTRA_HOUR- অ্যালার্মের সময়।
EXTRA_MINUTES- অ্যালার্মের মিনিট।
EXTRA_MESSAGE- অ্যালার্ম শনাক্ত করার জন্য কাস্টম মেসেজ।
EXTRA_DAYSArrayList, এই অ্যালার্ম রিপিট হওয়ার প্রতিটি সপ্তাহের দিন সহ ।Calendarক্লাস থেকে প্রতিটি দিনকে একটি পূর্ণসংখ্যা দিয়ে ঘোষণা করতে হবে, যেমনMONDAY।এককালীন অ্যালার্মের জন্য, এই অতিরিক্ত তথ্য উল্লেখ করবেন না।
EXTRA_RINGTONE- অ্যালার্মের সাথে ব্যবহার করার জন্য রিংটোন নির্দিষ্ট করে এমন
content:URI অথবাVALUE_RINGTONE_SILENTকোনও রিংটোন না থাকার জন্য।ডিফল্ট রিংটোন ব্যবহার করতে, এই অতিরিক্ত তথ্য নির্দিষ্ট করবেন না।
EXTRA_VIBRATE- এই অ্যালার্মের জন্য ভাইব্রেট করবে কিনা তা নির্দিষ্ট করে এমন বুলিয়ান।
EXTRA_SKIP_UI- অ্যালার্ম সেট করার সময় উত্তর দেওয়া অ্যাপকে UI এড়িয়ে যেতে হবে কিনা তা নির্দিষ্ট করে এমন বুলিয়ান। মান 'ট্রু' হলে, অ্যাপকে অবশ্যই কোনও কনফার্মেশন UI বাইপাস করতে হবে এবং নির্দিষ্ট অ্যালার্ম সেট করতে হবে।
ইনটেন্টের উদাহরণ:
Kotlin
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 অ্যাকশন ব্যবহার করুন এবং নিম্নলিখিত এক্সট্রা ব্যবহার করে সময়সীমার মতো টাইমার
বিবরণ নির্দিষ্ট করুন।
মনে রাখবেন: এই ইনটেন্ট Android 4.4 (API লেভেল 19) ও তার পরবর্তী যেকোনও ভার্সনে উপলভ্য।
- অ্যাকশন
ACTION_SET_TIMER- ডেটা URI
- কোনওটিই নয়
- MIME-এর ধরন
- কোনওটিই নয়
- অতিরিক্ত
-
EXTRA_LENGTH- টাইমারের দৈর্ঘ্য সেকেন্ডে।
EXTRA_MESSAGE- টাইমার শনাক্ত করার জন্য কাস্টম মেসেজ।
EXTRA_SKIP_UI- টাইমার সেট করার সময় উত্তর দেওয়া অ্যাপকে UI এড়িয়ে যেতে হবে কিনা তা নির্দিষ্ট করে এমন বুলিয়ান। সত্য হলে, অ্যাপটিকে অবশ্যই কোনও কনফার্মেশন UI বাইপাস করতে হবে এবং নির্দিষ্ট টাইমার শুরু করতে হবে।
ইনটেন্টের উদাহরণ:
Kotlin
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
অ্যাকশন ব্যবহার করুন।
যদিও অনেক অ্যাপ এই ইনটেন্ট ব্যবহার করে না, কারণ এটি মূলত সিস্টেম অ্যাপের দ্বারা ব্যবহৃত হয়, অ্যালার্ম ঘড়ি হিসেবে কাজ করে এমন যেকোনও অ্যাপ এই ইনটেন্ট ফিল্টার প্রয়োগ করতে পারে এবং বর্তমান অ্যালার্মের তালিকা দেখিয়ে উত্তর দিতে পারে।
মনে রাখবেন: এই ইনটেন্ট Android 4.4 (API লেভেল 19) ও তার পরবর্তী যেকোনও ভার্সনে উপলভ্য।
- অ্যাকশন
ACTION_SHOW_ALARMS- ডেটা URI
- কোনওটিই নয়
- 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- ডেটা URI
Events.CONTENT_URI- MIME-এর ধরন
"vnd.android.cursor.dir/event"- অতিরিক্ত
-
EXTRA_EVENT_ALL_DAY- এটি সারাদিনের ইভেন্ট কিনা তা নির্দিষ্ট করে এমন বুলিয়ান।
EXTRA_EVENT_BEGIN_TIME- ইভেন্ট শুরু হওয়ার সময় (epoch থেকে মিলিসেকেন্ড)।
EXTRA_EVENT_END_TIME- ইভেন্ট শেষ হওয়ার সময় (epoch থেকে মিলিসেকেন্ড)।
TITLE- ইভেন্টের নাম।
DESCRIPTION- ইভেন্টের বিবরণ।
EVENT_LOCATION- ইভেন্টের লোকেশন।
EXTRA_EMAIL- কমা দিয়ে আলাদা করা ইমেল আইডির তালিকা যা আমন্ত্রিতদের নির্দিষ্ট করে।
CalendarContract.EventsColumnsক্লাসে সংজ্ঞায়িত ধ্রুবক ব্যবহার করে আরও অনেক ইভেন্টের বিবরণ নির্দিষ্ট করা যেতে পারে।
ইনটেন্টের উদাহরণ:
Kotlin
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 অ্যাকশন ব্যবহার করুন। এছাড়াও, আপনি যে URI লোকেশনে ক্যামেরা দিয়ে তোলা ফটো বা ভিডিও সেভ করতে চান, সেটি EXTRA_OUTPUT
extra-তে
নির্দিষ্ট করুন।
- অ্যাকশন
ACTION_IMAGE_CAPTUREবা
ACTION_VIDEO_CAPTURE- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
- কোনওটিই নয়
- অতিরিক্ত
-
EXTRA_OUTPUT- URI লোকেশন যেখানে ক্যামেরা অ্যাপ ফটো বা
ভিডিও ফাইল সেভ করে (
Uriঅবজেক্ট হিসেবে)।
ক্যামেরা অ্যাপ আপনার অ্যাক্টিভিটিতে সফলভাবে
ফোকাস ফিরিয়ে দিলে—অন্য কথায়, আপনার অ্যাপ onActivityResult() কলব্যাক পেলে—আপনি
EXTRA_OUTPUT ভ্যালু সহ আপনার নির্দিষ্ট করা URI-তে ফটো বা ভিডিও অ্যাক্সেস
করতে পারবেন।
মনে রাখবেন: আপনি ACTION_IMAGE_CAPTURE ব্যবহার করে ছবি তুললে, ক্যামেরাটি ফলাফলে Intent ছবির একটি
ছোট কপি বা থাম্বনেলও রিটার্ন করতে পারে, যা
"data" নামের একটি অতিরিক্ত ফিল্ডে Bitmap হিসেবে সেভ করা হয়।
ইনটেন্টের উদাহরণ:
Kotlin
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. ... } }
Android 12 (API লেভেল 31) বা এর পরের যেকোনও ভার্সনে কাজ করার সময় এটি করতে, নিম্নলিখিত ইনটেন্ট উদাহরণ দেখুন।
ইনটেন্টের উদাহরণ:
Kotlin
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>
এই ইনটেন্ট হ্যান্ডেল করার সময়, আপনার অ্যাক্টিভিটি যেন EXTRA_OUTPUT অতিরিক্ত ইনকামিং Intent চেক করে, তারপর ক্যাপচার করা ছবি বা ভিডিওটি অতিরিক্তের উল্লেখ করা লোকেশনে সেভ করে এবং Intent সহ setResult() কল করে, যার মধ্যে "data" নামের অতিরিক্তে
কম্প্রেস করা থাম্বনেল থাকে।
স্টিল ইমেজ মোডে ক্যামেরা অ্যাপ চালু করুন
স্টিল ইমেজ মোডে ক্যামেরা অ্যাপ খুলতে, INTENT_ACTION_STILL_IMAGE_CAMERA অ্যাকশন ব্যবহার করুন।
- অ্যাকশন
INTENT_ACTION_STILL_IMAGE_CAMERA- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
- কোনওটিই নয়
- অতিরিক্ত
- কোনওটিই নয়
ইনটেন্টের উদাহরণ:
Kotlin
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- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
- কোনওটিই নয়
- অতিরিক্ত
- কোনওটিই নয়
ইনটেন্টের উদাহরণ:
Kotlin
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() কলব্যাকে ডেলিভার করা Intent ফলাফলে বেছে নেওয়া পরিচিতির দিকে
content: নির্দেশ করে এমন URI থাকে। পরিচিতি প্রদানকারী API ব্যবহার করে সেই পরিচিতি রিড করার জন্য
আপনার অ্যাপকে সাময়িক অনুমতি দেওয়া হয়, এমনকি আপনার অ্যাপে READ_CONTACTS অনুমতি না থাকলেও
এই অনুমতি দেওয়া হয়।
পরামর্শ: আপনার যদি শুধু ফোন নম্বর বা ইমেল আইডির মতো নির্দিষ্ট যোগাযোগের তথ্য অ্যাক্সেস করার প্রয়োজন হয়, তাহলে কীভাবে নির্দিষ্ট পরিচিতির ডেটা বেছে নিতে হয় সেই সম্পর্কে পরবর্তী বিভাগটি দেখুন।
- অ্যাকশন
ACTION_PICK- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
Contacts.CONTENT_TYPE
ইনটেন্টের উদাহরণ:
Kotlin
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 পাওয়ার পরে কীভাবে পরিচিতির বিবরণ পুনরুদ্ধার করতে হয় সেই সম্পর্কে জানতে, পরিচিতির বিবরণ পুনরুদ্ধার করুন লিঙ্কে ক্লিক করুন।
এই ইনটেন্ট ব্যবহার করে পরিচিতির URI রিট্রিভ করলে, সাধারণত আপনাকে
সেই পরিচিতির প্রাথমিক বিবরণ যেমন, ডিসপ্লে নাম এবং
পরিচিতিটি স্টার করা আছে কিনা তা
READ_CONTACTS
পড়তে অনুমতি নিতে হয় না। তবে, আপনি যদি কোনও পরিচিতি সম্পর্কে
আরও নির্দিষ্ট ডেটা পড়তে চান—যেমন
তার ফোন নম্বর বা ইমেল আইডি—তাহলে আপনার READ_CONTACTS
অনুমতি প্রয়োজন।
পরিচিতির নির্দিষ্ট ডেটা বেছে নিন
ব্যবহারকারীকে পরিচিতি থেকে নির্দিষ্ট তথ্য বেছে নিতে বলতে, যেমন
ফোন নম্বর, ইমেল আইডি বা অন্য কোনও ডেটার ধরন,
ACTION_PICK অ্যাকশন ব্যবহার করুন এবং নিম্নলিখিত কন্টেন্টের
কোনও একটির জন্য MIME টাইপ নির্দিষ্ট করুন, যেমন
CommonDataKinds.Phone.CONTENT_TYPE পরিচিতির ফোন নম্বর পেতে।
মনে রাখবেন: অনেক ক্ষেত্রে, আপনার অ্যাপের
READ_CONTACTS
কোনও নির্দিষ্ট পরিচিতি সম্পর্কে নির্দিষ্ট তথ্য দেখার অনুমতি থাকতে হবে।
আপনি যদি কোনও পরিচিতি থেকে শুধুমাত্র এক ধরনের ডেটা পেতে চান, তাহলে এই কৌশলটি
CONTENT_TYPE থেকে
ContactsContract.CommonDataKinds ক্লাস ব্যবহার করার সাথে সাথে
Contacts.CONTENT_TYPE ব্যবহার করার চেয়ে বেশি কার্যকর, যেমনটি আগের বিভাগে দেখানো হয়েছে। ফলাফল আপনাকে সরাসরি
কাঙ্ক্ষিত ডেটা অ্যাক্সেস করার সুবিধা দেয়, এর জন্য আপনাকে পরিচিতি প্রদানকারীর কাছে আরও জটিল কোয়েরি করতে হয় না।
আপনার onActivityResult() কলব্যাকে ডেলিভার করা Intent ফলাফলে বেছে নেওয়া পরিচিতি সংক্রান্ত ডেটার দিকে পয়েন্ট করা
content: URI থাকে। উত্তরে আপনার অ্যাপকে
সেই পরিচিতি ডেটা পড়ার জন্য সাময়িক অনুমতি দেওয়া হয়, এমনকি আপনার অ্যাপে READ_CONTACTS অনুমতি না থাকলেও।
- অ্যাকশন
ACTION_PICK- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
-
CommonDataKinds.Phone.CONTENT_TYPE- ফোন নম্বর আছে এমন পরিচিতি থেকে বেছে নিন।
CommonDataKinds.Email.CONTENT_TYPE- ইমেল আইডি আছে এমন পরিচিতি থেকে বেছে নিন।
CommonDataKinds.StructuredPostal.CONTENT_TYPE- পোস্টাল অ্যাড্রেস আছে এমন পরিচিতি থেকে বেছে নিন।
অথবা
ContactsContract-এর অধীনে থাকা অন্যান্যCONTENT_TYPEভ্যালুর মধ্যে একটি।
ইনটেন্টের উদাহরণ:
Kotlin
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- ডেটা URI স্কিম
content:<URI>- MIME-এর ধরন
- কোনওটিই নয়। পরিচিতির URI থেকে ধরনটি অনুমান করা হয়।
ইনটেন্টের উদাহরণ:
Kotlin
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-এ
ধ্রুবক দ্বারা নির্দিষ্ট করা অতিরিক্ত তথ্যে কোনও পরিচিত পরিচিতির তথ্য অন্তর্ভুক্ত করুন।
প্রাথমিকভাবে পরিচিতির URI পাওয়ার দুটি প্রধান উপায় আছে:
- আগের বিভাগে দেখানো
ACTION_PICKঅ্যাকশন থেকে পাওয়া পরিচিতির URI ব্যবহার করুন। এই পদ্ধতিতে কোনও অ্যাপ অনুমতি লাগে না। - পরিচিতির তালিকা
রিট্রিভ করুন নিবন্ধে যেভাবে বর্ণনা করা হয়েছে, সেইভাবে সরাসরি সব পরিচিতির তালিকা অ্যাক্সেস করুন। এই পদ্ধতির জন্য
READ_CONTACTSঅনুমতি প্রয়োজন।
- অ্যাকশন
ACTION_EDIT- ডেটা URI স্কিম
content:<URI>- MIME-এর ধরন
- পরিচিতির URI থেকে ধরনটি অনুমান করা হয়।
- অতিরিক্ত
ContactsContract.Intents.Insert-এ সংজ্ঞায়িত করা এক বা একাধিক এক্সট্রা যাতে আপনি পরিচিতির বিবরণের ফিল্ড পূরণ করতে পারেন।
ইনটেন্টের উদাহরণ:
Kotlin
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 অ্যাকশন ব্যবহার করুন,
Contacts.CONTENT_TYPE-কে
MIME ধরন হিসেবে নির্দিষ্ট করুন এবং ContactsContract.Intents.Insert-এ
ধ্রুবক দ্বারা নির্দিষ্ট করা এক্সট্রাতে পরিচিতির পরিচিত তথ্য অন্তর্ভুক্ত করুন।
- অ্যাকশন
ACTION_INSERT- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
Contacts.CONTENT_TYPE- অতিরিক্ত
ContactsContract.Intents.Insert-এ সংজ্ঞায়িত করা অতিরিক্ত ডেটার মধ্যে একটি বা একাধিক।
ইনটেন্টের উদাহরণ:
Kotlin
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(একাধিক অ্যাটাচমেন্ট থাকলে)- ডেটা URI স্কিম
- কোনওটিই নয়
- 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অ্যাকশন ব্যবহার করলে, এটি পরিবর্তে একটিArrayListযার মধ্যে একাধিকUriঅবজেক্ট আছে।
ইনটেন্টের উদাহরণ:
Kotlin
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:" ডেটা স্কিম অন্তর্ভুক্ত করুন:
Kotlin
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 বিভাগটি
যোগ করুন।
Android 4.3 (API লেভেল 18) ও তার পরবর্তী যেকোনও ভার্সনে,
আপনি true-এ সেট করা ইনটেন্টে
EXTRA_ALLOW_MULTIPLE যোগ করে ব্যবহারকারীকে একাধিক ফাইল বেছে নিতে দিতে পারেন।
তারপরে, আপনি getClipData()-এর মাধ্যমে রিটার্ন করা ClipData
অবজেক্টে বেছে নেওয়া প্রতিটি ফাইল অ্যাক্সেস করতে পারবেন।
- অ্যাকশন
ACTION_GET_CONTENT- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
- ব্যবহারকারীকে বেছে নিতে হবে এমন ফাইলের ধরনের সাথে সম্পর্কিত MIME-এর ধরন।
- অতিরিক্ত
-
EXTRA_ALLOW_MULTIPLE- ব্যবহারকারী একই সময়ে একাধিক ফাইল বেছে নিতে পারবেন কিনা তা ঘোষণা করে এমন একটি বুলিয়ান।
EXTRA_LOCAL_ONLY- একটি বুলিয়ান যা ঘোষণা করে যে রিটার্ন করা ফাইলটি সরাসরি ডিভাইস থেকে উপলভ্য হতে হবে এবং রিমোট পরিষেবা থেকে ডাউনলোড করার প্রয়োজন হবে না।
- বিভাগ (ঐচ্ছিক)
-
CATEGORY_OPENABLE- শুধুমাত্র "খোলা যায়" এমন ফাইল ফেরত পেতে, যেগুলিকে ফাইল স্ট্রিম হিসেবে দেখানো যায়
openFileDescriptor()-এর মাধ্যমে।
ফটো পাওয়ার জন্য ইনটেন্টের উদাহরণ:
Kotlin
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>
নির্দিষ্ট ধরনের ফাইল খোলা
আপনার অ্যাপে ইমপোর্ট করতে হবে এমন ফাইলের কপি রিট্রিভ করার পরিবর্তে, Android
4.4 বা এর পরের যেকোনও ভার্সনে ACTION_GET_CONTENT অ্যাকশন ব্যবহার করার সময়, আপনি ACTION_OPEN_DOCUMENT অ্যাকশন ব্যবহার করে এবং MIME টাইপ নির্দিষ্ট করে অন্য অ্যাপের ম্যানেজ করা ফাইল খোলার অনুরোধ করতে পারেন।
এছাড়াও, আপনার অ্যাপ যাতে লিখতে পারে এমন একটি নতুন ডকুমেন্ট ব্যবহারকারীকে তৈরি করতে দিতে, ACTION_CREATE_DOCUMENT অ্যাকশন ব্যবহার করুন।
যেমন, আগে থেকে থাকা PDF ডকুমেন্ট থেকে বেছে নেওয়ার পরিবর্তে, 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() নাল ভ্যালু রিটার্ন করে এবং আপনাকে তার পরিবর্তে getClipData()-এর রিটার্ন করা ClipData
অবজেক্ট থেকে প্রতিটি আইটেম
রিট্রিভ করতে হবে।
মনে রাখবেন: আপনার ইনটেন্টে অবশ্যই MIME-এর ধরন উল্লেখ করতে হবে এবং
অবশ্যই CATEGORY_OPENABLE বিভাগ ঘোষণা করতে হবে। উপযুক্ত হলে, আপনি
EXTRA_MIME_TYPES extra-এর সাথে MIME ধরনের একটি অ্যারে যোগ করে একাধিক MIME ধরনের উল্লেখ করতে পারেন—আপনি এটি করলে, আপনাকে অবশ্যই setType()-এ
প্রাথমিক MIME ধরনের মান "*/*" হিসেবে সেট করতে হবে।
- অ্যাকশন
ACTION_OPEN_DOCUMENTঅথবা
ACTION_CREATE_DOCUMENT- ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
- ব্যবহারকারীকে বেছে নিতে হবে এমন ফাইলের ধরনের সাথে সম্পর্কিত MIME-এর ধরন।
- অতিরিক্ত
-
EXTRA_MIME_TYPES- আপনার অ্যাপ যে ধরনের ফাইলের অনুরোধ করছে, সেই ধরনের ফাইলের সাথে সম্পর্কিত MIME ধরনের একটি অ্যারে।
এই অতিরিক্ত ব্যবহার করার সময়, আপনাকে অবশ্যই
setType()-এ"*/*"প্রাথমিক MIME-এর ধরন সেট করতে হবে। EXTRA_ALLOW_MULTIPLE- ব্যবহারকারী একই সময়ে একাধিক ফাইল বেছে নিতে পারবেন কিনা তা ঘোষণা করে এমন একটি বুলিয়ান।
EXTRA_TITLEACTION_CREATE_DOCUMENT-এর সাথে ব্যবহার করে প্রাথমিক ফাইলের নাম নির্দিষ্ট করতে।EXTRA_LOCAL_ONLY- একটি বুলিয়ান যা ঘোষণা করে যে রিটার্ন করা ফাইলটি সরাসরি ডিভাইস থেকে উপলভ্য হতে হবে এবং রিমোট পরিষেবা থেকে ডাউনলোড করার প্রয়োজন হবে না।
- বিভাগ
-
CATEGORY_OPENABLE- শুধুমাত্র "খোলা যায়" এমন ফাইল ফেরত পেতে, যেগুলিকে ফাইল স্ট্রিম হিসেবে দেখানো যায়
openFileDescriptor()-এর মাধ্যমে।
ফটো পাওয়ার জন্য ইনটেন্টের উদাহরণ:
Kotlin
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>
আপনার অ্যাপ ম্যানেজ করে এমন ফাইল কীভাবে অন্য অ্যাপ থেকে খোলা যায় সেই সম্পর্কে আরও জানতে, স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করে ফাইল খোলা নিবন্ধটি পড়ুন।
স্থানীয় অ্যাকশন
গাড়ি কল করা হল একটি সাধারণ স্থানীয় অ্যাকশন। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে এই অ্যাকশন পারফর্ম করার জন্য আপনার অ্যাপের ক্ষমতা বিজ্ঞাপন দিতে একটি ইনটেন্ট ফিল্টার তৈরি করুন।
ভাড়া করার জন্য একটি গাড়িকে কল করুন
ট্যাক্সি কল করতে, ACTION_RESERVE_TAXI_RESERVATION
অ্যাকশন ব্যবহার করুন।
মনে রাখবেন: এই অ্যাকশন সম্পূর্ণ করার আগে অ্যাপকে অবশ্যই ব্যবহারকারীর কাছ থেকে কনফার্মেশন নিতে হবে।
- অ্যাকশন
ACTION_RESERVE_TAXI_RESERVATION- ডেটা URI
- কোনওটিই নয়
- MIME-এর ধরন
- কোনওটিই নয়
- অতিরিক্ত
- কোনওটিই নয়
ইনটেন্টের উদাহরণ:
Kotlin
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>
Maps
ম্যাপ অ্যাপের ক্ষেত্রে ম্যাপে লোকেশন দেখানো একটি সাধারণ অ্যাকশন। নিচের বিভাগে দেওয়া তথ্য ব্যবহার করে এই অ্যাকশন পারফর্ম করার ব্যাপারে আপনার অ্যাপের ক্ষমতা বিজ্ঞাপন দেওয়ার জন্য একটি ইনটেন্ট ফিল্টার তৈরি করুন।
ম্যাপে কোনও লোকেশন দেখানো
ম্যাপ খুলতে, ACTION_VIEW অ্যাকশন ব্যবহার করুন এবং নিম্নলিখিত স্কিমের মধ্যে একটির সাহায্যে
ইনটেন্ট ডেটাতে লোকেশন সংক্রান্ত তথ্য নির্দিষ্ট করুন।
- অ্যাকশন
ACTION_VIEW- ডেটা URI স্কিম
-
geo:latitude,longitude- প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে ম্যাপ দেখাও।
উদাহরণ:
"geo:47.6,-122.3" geo:latitude,longitude?z=zoom- নির্দিষ্ট জুম লেভেলে প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে ম্যাপ দেখাও। ১-এর
জুম লেভেল থেকে প্রদত্ত lat,lng-এ কেন্দ্র করে সম্পূর্ণ পৃথিবী দেখা যায়। সর্বোচ্চ
(সবচেয়ে ক্লোজ) জুম লেভেল হল ২৩।
উদাহরণ:
"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"মনে রাখবেন:
geoURI-তে পাস করা সব স্ট্রিং অবশ্যই এনকোড করতে হবে। যেমন, স্ট্রিং1st & Pike, Seattleহয়ে যায়1st%20%26%20Pike%2C%20Seattle. স্ট্রিংয়ে স্পেস থাকলে তা%20দিয়ে এনকোড করা হয় অথবা প্লাস চিহ্ন (+) দিয়ে পাল্টে দেওয়া হয়।
- MIME-এর ধরন
- কোনওটিই নয়
ইনটেন্টের উদাহরণ:
Kotlin
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- ডেটা URI স্কিম
-
file:<URI>content:<URI>http:<URL>
- MIME-এর ধরন
-
"audio/*""application/ogg""application/x-ogg""application/itunes"- অথবা আপনার অ্যাপের প্রয়োজন এমন অন্য কোনও অনুমতি।
ইনটেন্টের উদাহরণ:
Kotlin
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- ডেটা URI স্কিম
- কোনওটিই নয়
- 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(প্রয়োজনীয়): এমন একটি স্ট্রিং যাতে অ্যালবাম, আর্টিস্ট, জনরা, প্লেলিস্ট বা শীর্ষকের যেকোনও কম্বিনেশন থাকে। ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য এই অতিরিক্ত তথ্য সবসময় দেওয়া হয়। আগে থেকে থাকা অ্যাপ যা সার্চ মোড সম্পর্কে জানে না, তা এই ইনটেন্টকে আনস্ট্রাকচার্ড সার্চ হিসেবে প্রসেস করতে পারে।
ইনটেন্টের উদাহরণ:
ব্যবহারকারী যদি কোনও নির্দিষ্ট আর্টিস্টের মিউজিক শুনতে চান, তাহলে সার্চ অ্যাপ নিম্নলিখিত ইন্টেন্ট তৈরি করতে পারে:
Kotlin
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 এক্সট্রার ভ্যালু চেক করুন। আপনার অ্যাক্টিভিটি সার্চ মোড শনাক্ত করার পরে, সেই নির্দিষ্ট সার্চ মোডের জন্য অতিরিক্ত এক্সট্রার ভ্যালু পড়ুন।
এই তথ্যের সাহায্যে, আপনার অ্যাপ তার ইনভেনটরির মধ্যে সার্চ কোয়েরির সাথে ম্যাচ করা কন্টেন্ট
প্লে করতে সার্চ করতে পারবে। নিচে দেওয়া উদাহরণে এটি দেখানো হয়েছে।
Kotlin
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 - ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
-
PLAIN_TEXT_TYPE - "*/*"
- অতিরিক্ত
-
-
EXTRA_NAME - নোটের শীর্ষক বা বিষয় নির্দেশ করে এমন স্ট্রিং।
-
EXTRA_TEXT - নোটের টেক্সট নির্দেশ করে এমন একটি স্ট্রিং।
-
- অ্যাকশন
-
ACTION_DIAL- ডায়ালার বা ফোন অ্যাপ খোলে।ACTION_CALL- ফোন কল করে (এর জন্যCALL_PHONEঅনুমতি প্রয়োজন)
- ডেটা URI স্কিম
-
tel:<phone-number>voicemail:<phone-number>
- MIME-এর ধরন
- কোনওটিই নয়
tel:2125551212tel:(212) 555 1212- অ্যাকশন
-
"com.google.android.gms.actions.SEARCH_ACTION"- Google Voice অ্যাকশন থেকে সার্চ কোয়েরি সংক্রান্ত সহায়তা।
- অতিরিক্ত
-
QUERY- সার্চ কোয়েরি সহ স্ট্রিং।
- অ্যাকশন
ACTION_WEB_SEARCH- ডেটা URI স্কিম
- কোনওটিই নয়
- 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ডকুমেন্টেশন দেখুন। - ডেটা URI স্কিম
- কোনওটিই নয়
- MIME-এর ধরন
- কোনওটিই নয়
- অ্যাকশন
ACTION_SENDTOবা
ACTION_SENDবা
ACTION_SEND_MULTIPLE- ডেটা URI স্কিম
-
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অ্যাকশন ব্যবহার করলে, এই অতিরিক্ত হল অ্যাটাচ করার জন্য ছবি বা ভিডিওর দিকে নির্দেশ করে এমনArrayListঅবUriঅবজেক্ট।
- অ্যাকশন
ACTION_VIEW- ডেটা URI স্কিম
http:<URL>
https:<URL>- MIME-এর ধরন
-
"text/plain""text/html""application/xhtml+xml""application/vnd.wap.xhtml+xml"
- ডেভেলপমেন্টের জন্য Android ডিভাইস সেট-আপ করুন অথবা ভার্চুয়াল ডিভাইস ব্যবহার করুন।
- আপনার অ্যাপের এমন একটি ভার্সন ইনস্টল করুন যা আপনার কাজ করে এমন ইনটেন্ট ম্যানেজ করে।
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
- প্রয়োজনীয় ইনটেন্ট ফিল্টার নির্ধারণ করলে, ইনটেন্ট হ্যান্ডেল করুন।
ইনটেন্টের উদাহরণ:
Kotlin
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()
পদ্ধতি ব্যবহার করুন।
ইনটেন্টের উদাহরণ:
Kotlin
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 ব্যবহার করার সাজেশন দিই না।
এর পরিবর্তে, অ্যাপ-মধ্যস্থ সার্চের জন্য Google Assistant-এর বিল্ট-ইন সহায়তাকে কাজে লাগাতে
GET_THING
অ্যাকশন প্রয়োগ করুন। আরও তথ্যের জন্য, Google Assistant-এর
অ্যাপ অ্যাকশন
ডকুমেন্টেশন দেখুন।
ইনটেন্ট ফিল্টারের উদাহরণ:
<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 এক্সট্রাতে সার্চ স্ট্রিং নির্দিষ্ট করুন।
ইনটেন্টের উদাহরণ:
Kotlin
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); } }
সেটিংস
আপনার অ্যাপে ব্যবহারকারীকে কিছু পরিবর্তন করতে বলার প্রয়োজন হলে, সিস্টেম সেটিংস অ্যাপে স্ক্রিন খুলতে, নিম্নলিখিত ইনটেন্ট অ্যাকশনের মধ্যে একটি ব্যবহার করুন:
ইনটেন্টের উদাহরণ:
Kotlin
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); } }
পাঠ্য বার্তাপ্রেরণ
অ্যাটাচমেন্ট সহ SMS/MMS মেসেজ লেখা হল টেক্সট মেসেজিং অ্যাপের একটি সাধারণ অ্যাকশন। নিচের বিভাগে দেওয়া তথ্য ব্যবহার করে এই অ্যাকশন পারফর্ম করার ব্যাপারে আপনার অ্যাপের ক্ষমতা বিজ্ঞাপন দেওয়ার জন্য একটি ইনটেন্ট ফিল্টার তৈরি করুন।
অ্যাটাচমেন্ট সহ এসএমএস/এমএমএস মেসেজ লেখা
এসএমএস বা এমএমএস টেক্সট মেসেজ শুরু করতে, নিম্নলিখিত ইনটেন্ট অ্যাকশনের মধ্যে একটি ব্যবহার করুন এবং নিম্নলিখিত অতিরিক্ত কী ব্যবহার করে ফোন নম্বর, বিষয় ও মেসেজ বডির মতো মেসেজ বিবরণ নির্দিষ্ট করুন।
ইনটেন্টের উদাহরণ:
Kotlin
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:" ডেটা স্কিম অন্তর্ভুক্ত করুন:
Kotlin
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>
মনে রাখবেন: আপনি কোনও এসএমএস/এমএমএস মেসেজিং অ্যাপ ডেভেলপ করলে, Android 4.4 ও তার পরের যেকোনও ভার্সনে
ডিফল্ট এসএমএস অ্যাপ হিসেবে উপলভ্য হতে হলে আপনাকে অবশ্যই
অতিরিক্ত অ্যাকশনের জন্য ইনটেন্ট ফিল্টার প্রয়োগ করতে হবে। আরও তথ্যের জন্য, Telephony-এ ডকুমেন্টেশন
দেখুন।
ওয়েব ব্রাউজার
ওয়েব URL লোড করা হল ওয়েব ব্রাউজার অ্যাপের একটি সাধারণ অ্যাকশন। নিচের বিভাগে দেওয়া তথ্য ব্যবহার করে এই অ্যাকশন পারফর্ম করার ব্যাপারে আপনার অ্যাপের ক্ষমতা বিজ্ঞাপন দেওয়ার জন্য একটি ইনটেন্ট ফিল্টার তৈরি করুন।
ওয়েব URL লোড করা
ওয়েবপেজ খুলতে, ACTION_VIEW অ্যাকশন
ব্যবহার করুন
এবং ইনটেন্ট ডেটাতে ওয়েব URL উল্লেখ করুন।
ইনটেন্টের উদাহরণ:
Kotlin
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>
পরামর্শ: আপনার Android অ্যাপ যদি আপনার ওয়েবসাইটের মতো একই ধরনের কার্যকারিতা প্রদান করে, তাহলে আপনার ওয়েবসাইটের দিকে নির্দেশ করে এমন URL-এর জন্য একটি ইনটেন্ট ফিল্টার অন্তর্ভুক্ত করুন। তারপরে, ব্যবহারকারীদের ডিভাইসে আপনার অ্যাপ ইনস্টল করা থাকলে, ইমেল বা অন্যান্য ওয়েবপেজ থেকে আপনার ওয়েবসাইটে পয়েন্ট করা লিঙ্ক আপনার ওয়েবপেজের পরিবর্তে আপনার Android অ্যাপ খুলবে। Android অ্যাপ লিঙ্ক ম্যানেজ করা নিবন্ধ থেকে আরও জানুন।
Android 12 (API লেভেল 31) থেকে শুরু করে, কোনও জেনেরিক ওয়েব ইনটেন্ট আপনার অ্যাপের অ্যাক্টিভিটিতে তখনই সমাধান করা হয়, যদি আপনার অ্যাপটি সেই ওয়েব ইনটেন্টে থাকা নির্দিষ্ট ডোমেনের জন্য অনুমোদিত হয়। আপনার অ্যাপ ডোমেনের জন্য অনুমোদিত না হলে, ওয়েব ইনটেন্ট ব্যবহারকারীর ডিফল্ট ব্রাউজার অ্যাপে রিডাইরেক্ট করা হবে।
Android Debug Bridge-এর মাধ্যমে ইনটেন্ট যাচাই করা
আপনার অ্যাপ যে ইনটেন্ট কাজ করে তা যাচাই করতে, আপনি
adb টুল ব্যবহার করে নির্দিষ্ট ইনটেন্ট ফায়ার করতে পারেন। এর জন্য
নিচে উল্লেখ করা ধাপগুলি অনুসরণ করুন:
আরও তথ্যের জন্য, শেল কমান্ড ইস্যু করা দেখুন।