সাধারণ ইনটেন্ট

ইনটেন্ট আপনাকে অন্য অ্যাপে কোনও অ্যাক্টিভিটি শুরু করতে দেয়। এর জন্য আপনি যে অ্যাকশন করতে চান, যেমন "ম্যাপ দেখা" বা "ছবি তোলা", তা Intent অবজেক্টে বর্ণনা করতে হয়। এই ধরনের ইনটেন্টকে ইমপ্লিসিট ইনটেন্ট বলা হয় কারণ এটি শুরু করার জন্য অ্যাপের কম্পোনেন্ট নির্দিষ্ট করে না, পরিবর্তে একটি অ্যাকশন নির্দিষ্ট করে এবং অ্যাকশনটি পারফর্ম করার জন্য কিছু ডেটা প্রদান করে।

আপনি যখন startActivity() বা startActivityForResult()-কে কল করেন এবং এটিকে একটি ইমপ্লিসিট ইনটেন্ট পাস করেন, তখন সিস্টেম ইনটেন্টটিকে এমন একটি অ্যাপে রিজলভ করে যা ইনটেন্টটি ম্যানেজ করতে পারে এবং এর অনুরূপ Activity শুরু করে। যদি একাধিক অ্যাপ থাকে যা ইনটেন্ট হ্যান্ডেল করতে পারে, তাহলে সিস্টেম ব্যবহারকারীকে একটি ডায়ালগ দেখায় কোন অ্যাপটি ব্যবহার করতে হবে তা বেছে নেওয়ার জন্য।

এই পৃষ্ঠায় এমন কিছু ইমপ্লিসিট ইনটেন্টের বিবরণ দেওয়া হয়েছে যেগুলি আপনি সাধারণ অ্যাকশন সম্পন্ন করার জন্য ব্যবহার করতে পারবেন। এগুলি ইনটেন্ট ম্যানেজ করে এমন অ্যাপের ধরন অনুযায়ী সাজানো থাকে। এছাড়াও, প্রতিটি বিভাগে দেখানো হয় যে কীভাবে আপনি একটি ইনটেন্ট ফিল্টার তৈরি করতে পারেন যাতে আপনার অ্যাপের অ্যাকশন পারফর্ম করার ক্ষমতা সম্পর্কে বিজ্ঞাপন দিতে পারেন।

সতর্কতা: ডিভাইসে এমন কোনও অ্যাপ না থাকলে যা ইমপ্লিসিট ইনটেন্ট রিসিভ করতে পারে, তাহলে startActivity() কল করার সময় অ্যাপ ক্র্যাশ করে। ইনটেন্ট রিসিভ করার জন্য কোনও অ্যাপ আছে কিনা তা প্রথমে যাচাই করতে, আপনার Intent অবজেক্টে resolveActivity() কল করুন। ফলাফল নন-নাল হলে, অন্তত একটি অ্যাপ আছে যা ইনটেন্ট ম্যানেজ করতে পারে এবং startActivity() কল করা নিরাপদ। ফলাফল null হলে, ইনটেন্ট ব্যবহার করবেন না এবং সম্ভব হলে, ইনটেন্টকে কল করে এমন ফিচার বন্ধ করে দিন।

ইনটেন্ট বা ইনটেন্ট ফিল্টার কীভাবে তৈরি করতে হয় তা জানা না থাকলে, প্রথমে ইনটেন্ট ও ইনটেন্ট ফিল্টার সম্পর্কে পড়ুন।

আপনার ডেভেলপমেন্ট হোস্ট থেকে এই পৃষ্ঠায় তালিকাভুক্ত ইনটেন্ট কীভাবে ফায়ার করবেন তা জানতে, Android ডিবাগ ব্রিজের মাধ্যমে ইনটেন্ট যাচাই করুন বিভাগটি দেখুন।

Google ভয়েস অ্যাকশন

Google Voice Actions ভয়েস কমান্ডের উত্তরে এই পৃষ্ঠায় তালিকাভুক্ত কিছু ইনটেন্ট ট্রিগার করে। আরও তথ্যের জন্য, সিস্টেম ভয়েস অ্যাকশন ব্যবহার শুরু করুন।

অ্যালার্ম ঘড়ি

অ্যালার্ম ক্লক অ্যাপের জন্য সাধারণ অ্যাকশন নিচে দেওয়া হল, এর মধ্যে আপনার অ্যাপের প্রতিটি অ্যাকশন পারফর্ম করার ক্ষমতা বিজ্ঞাপন করার জন্য ইনটেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও অন্তর্ভুক্ত।

অ্যালার্ম সেট করুন

Google ভয়েস অ্যাকশন

  • "সকাল ৭টায় অ্যালার্ম সেট করো"

নতুন অ্যালার্ম তৈরি করতে, ACTION_SET_ALARM অ্যাকশন ব্যবহার করুন এবং নিম্নলিখিত অতিরিক্ত তথ্য ব্যবহার করে সময় ও মেসেজের মতো অ্যালার্মের বিবরণ নির্দিষ্ট করুন।

মনে রাখবেন: Android 2.3 (API লেভেল 9) এবং তার আগের ভার্সনে শুধুমাত্র ঘণ্টা, মিনিট এবং মেসেজ এক্সট্রা উপলভ্য। প্ল্যাটফর্মের আরও উন্নত ভার্সনে অন্যান্য অতিরিক্ত সুবিধা উপলভ্য।

অ্যাকশন
ACTION_SET_ALARM
ডেটা URI
কোনওটিই নয়
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 এড়িয়ে যাবে কিনা তা নির্দিষ্ট করার জন্য বুলিয়ান। সত্য হলে, অ্যাপটিকে অবশ্যই যেকোনো নিশ্চিতকরণ 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>

টাইমার সেট করুন

Google ভয়েস অ্যাকশন

  • "৫ মিনিটের জন্য টাইমার সেট করো"

কাউন্টডাউন টাইমার তৈরি করতে, ACTION_SET_TIMER অ্যাকশন ব্যবহার করুন এবং নিম্নলিখিত অতিরিক্ত তথ্য ব্যবহার করে টাইমারের বিবরণ যেমন সময়সীমা উল্লেখ করুন।

মনে রাখবেন: এই ইনটেন্ট Android 4.4 (API লেভেল ১৯) এবং তার পরবর্তী ভার্সনে উপলভ্য।

অ্যাকশন
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 লেভেল ১৯) এবং তার পরবর্তী ভার্সনে উপলভ্য।

অ্যাকশন
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
ইভেন্ট শেষ হওয়ার সময় (ইপক থেকে মিলিসেকেন্ড)।
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 অ্যাকশন ব্যবহার করুন। এছাড়াও, EXTRA_OUTPUT এক্সট্রাতে, আপনি ক্যামেরা দিয়ে তোলা ফটো বা ভিডিও যে URI লোকেশনে সেভ করতে চান সেটি উল্লেখ করুন।

অ্যাকশন
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>

এই ইনটেন্ট ম্যানেজ করার সময়, আপনার অ্যাক্টিভিটি ইনকামিং Intent-এ EXTRA_OUTPUT অতিরিক্তের জন্য চেক করে, তারপর ক্যাপচার করা ছবি বা ভিডিও সেই অতিরিক্তের মাধ্যমে নির্দিষ্ট করা লোকেশনে সেভ করে এবং "data" নামের অতিরিক্তে কম্প্রেস করা থাম্বনেল সহ Intent-এর সাথে setResult() কল করে।

স্থির ছবি মোডে ক্যামেরা অ্যাপ চালু করুন

Google ভয়েস অ্যাকশন

  • "ছবি তোলো"

স্টিল ইমেজ মোডে ক্যামেরা অ্যাপ খুলতে, 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>

ভিডিও মোডে ক্যামেরা অ্যাপ চালু করুন

Google ভয়েস অ্যাকশন

  • "ভিডিও রেকর্ড করো"

ভিডিও মোডে ক্যামেরা অ্যাপ খুলতে, 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 আছে যা বেছে নেওয়া পরিচিতিকে নির্দেশ করে। আপনার অ্যাপে READ_CONTACTS অনুমতি না থাকলেও, পরিচিতি সরবরাহকারী API ব্যবহার করে সেই পরিচিতি পড়ার জন্য আপনার অ্যাপকে সাময়িক অনুমতি দেয়।

পরামর্শ: আপনার যদি শুধুমাত্র কোনও নির্দিষ্ট পরিচিতির তথ্য, যেমন ফোন নম্বর বা ইমেল আইডি অ্যাক্সেস করার প্রয়োজন হয়, তাহলে এর পরিবর্তে কীভাবে নির্দিষ্ট পরিচিতির ডেটা বেছে নেবেন সেই সম্পর্কে পরবর্তী বিভাগটি দেখুন।

অ্যাকশন
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 অনুমতি থাকতে হবে।

কোনও পরিচিতি থেকে আপনাকে যদি শুধুমাত্র এক ধরনের ডেটা ফিরিয়ে আনতে হয়, তাহলে ContactsContract.CommonDataKinds ক্লাস থেকে CONTENT_TYPE সহ এই টেকনিকটি 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 অ্যাকশন ব্যবহার করুন, MIME-এর প্রকার হিসেবে Contacts.CONTENT_TYPE উল্লেখ করুন এবং 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) এবং তার পরবর্তী ভার্সনে, আপনি ব্যবহারকারীকে একাধিক ফাইল বেছে নেওয়ার অনুমতি দিতে পারেন, এর জন্য EXTRA_ALLOW_MULTIPLE ইনটেন্টে যোগ করুন, true-এ সেট করুন। তারপর আপনি 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 supports OpenableColumns
             and ContentResolver.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() নাল রিটার্ন করে এবং আপনাকে অবশ্যই getClipData()-এর মাধ্যমে রিটার্ন করা ClipData অবজেক্ট থেকে প্রতিটি আইটেম ফিরিয়ে আনতে হবে।

মনে রাখবেন: আপনার ইনটেন্টে অবশ্যই MIME-এর ধরন উল্লেখ করতে হবে এবং অবশ্যই CATEGORY_OPENABLE বিভাগ ঘোষণা করতে হবে। প্রয়োজন হলে, EXTRA_MIME_TYPES এক্সট্রা সহ MIME-এর প্রকারের অ্যারে যোগ করে আপনি একাধিক MIME-এর প্রকার উল্লেখ করতে পারেন—আপনি এটি করলে, setType()-এ প্রাথমিক MIME-এর প্রকার "*/*"-এ সেট করতে হবে।

অ্যাকশন
ACTION_OPEN_DOCUMENT অথবা
ACTION_CREATE_DOCUMENT
ডেটা URI স্কিম
কোনওটিই নয়
MIME-এর প্রকার
ব্যবহারকারীকে যে ফাইলের ধরন বেছে নিতে হবে তার সাথে সংশ্লিষ্ট MIME-এর ধরন।
অতিরিক্ত
EXTRA_MIME_TYPES
আপনার অ্যাপ যে ধরনের ফাইলের জন্য অনুরোধ করছে, তার সাথে সম্পর্কিত MIME প্রকারের অ্যারে। আপনি এই অতিরিক্ত সুবিধা ব্যবহার করলে, আপনাকে অবশ্যই setType()-এ প্রাইমারি MIME-এর প্রকার "*/*"-এ সেট করতে হবে।
EXTRA_ALLOW_MULTIPLE
একটি বুলিয়ান যা ব্যবহারকারী একবারে একাধিক ফাইল বেছে নিতে পারবেন কিনা তা ঘোষণা করে।
EXTRA_TITLE
প্রাথমিক ফাইলের নাম নির্দিষ্ট করতে ACTION_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>

আপনার অ্যাপের মাধ্যমে ম্যানেজ করা ফাইলগুলি কীভাবে অন্যান্য অ্যাপ থেকে খোলার উপযুক্ত করে তুলবেন সেই সম্পর্কে আরও তথ্য পেতে, স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করে ফাইল খুলুন নিবন্ধটি পড়ুন।

স্থানীয় কনভার্সন অ্যাকশন

গাড়ি ডাকা হল একটি সাধারণ স্থানীয় অ্যাকশন। নিম্নলিখিত বিভাগে দেওয়া তথ্য ব্যবহার করে এই অ্যাকশন পারফর্ম করার জন্য আপনার অ্যাপের ক্ষমতা বিজ্ঞাপন করতে একটি ইনটেন্ট ফিল্টার তৈরি করুন।

ভাড়া করার জন্য একটি গাড়িকে কল করুন

Google ভয়েস অ্যাকশন

  • "আমার জন্য ট্যাক্সি ডাকো"
  • "আমার জন্য একটা গাড়ি ডাকো"

(শুধুমাত্র Wear OS)

ট্যাক্সি ডাকতে, 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"

মনে রাখবেন: geo URI-তে পাস করা সব স্ট্রিং এনকোড করা থাকতে হবে। যেমন, 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>

সার্চ কোয়েরির ভিত্তিতে মিউজিক চালানো

Google ভয়েস অ্যাকশন

  • "মাইকেল জ্যাকসনের বিলি জিন চালাও"

সার্চ কোয়েরির ভিত্তিতে মিউজিক চালাতে, 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 (প্রয়োজনীয়): আর্টিস্ট, অ্যালবাম, গানের নাম বা জনরার যেকোনও কম্বিনেশন সহ স্ট্রিং।

জনরা - Audio.Genres.ENTRY_CONTENT_TYPE

নির্দিষ্ট কোনও জনরার মিউজিক চালান।

অতিরিক্ত সুবিধা:

  • "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>

আপনার অ্যাক্টিভিটিতে এই ইনটেন্ট ম্যানেজ করার সময়, সার্চ মোড নির্ধারণ করতে EXTRA_MEDIA_FOCUS ইনকামিংয়ের অতিরিক্ত ভ্যালু Intent চেক করুন। আপনার অ্যাক্টিভিটি সার্চ মোড শনাক্ত করার পরে, সেই নির্দিষ্ট সার্চ মোডের জন্য অতিরিক্ত এক্সট্রার ভ্যালু পড়ুন। এই তথ্যের সাহায্যে, আপনার অ্যাপ তখন সার্চ কোয়েরির সাথে মেলে এমন কন্টেন্ট চালানোর জন্য এর ইনভেনটরির মধ্যে সার্চ করতে পারে। এটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।

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
নোটের টেক্সট নির্দেশকারী স্ট্রিং।

ইনটেন্টের উদাহরণ:

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 স্কিম ব্যবহার করে একটি ফোন নম্বর উল্লেখ করুন। ফোন অ্যাপ খুললে, এটি ফোন নম্বর দেখায়, এবং ফোন কল শুরু করতে ব্যবহারকারীকে অবশ্যই কল করুন বোতামে ট্যাপ করতে হবে।

Google ভয়েস অ্যাকশন

  • "৫৫৫-৫৫৫৫ নম্বরে কল করো"
  • "ববকে কল করো"
  • "ভয়েসমেল কল করো"

সরাসরি ফোন কল করতে, ACTION_CALL অ্যাকশন ব্যবহার করুন এবং নিম্নলিখিত URI স্কিম ব্যবহার করে ফোন নম্বর উল্লেখ করুন। ফোন অ্যাপ খুললে, এটি ফোন কল শুরু করে। ব্যবহারকারীকে কল করুন বোতামে ট্যাপ করতে হবে না।

ACTION_CALL অ্যাকশনের জন্য আপনাকে ম্যানিফেস্ট ফাইলে CALL_PHONE অনুমতি যোগ করতে হবে:

<uses-permission android:name="android.permission.CALL_PHONE" />
অ্যাকশন
  • ACTION_DIAL - ডায়ালার বা ফোন অ্যাপ খোলে।
  • ACTION_CALL - ফোন কল করে (CALL_PHONE অনুমতি প্রয়োজন)
ডেটা URI স্কিম
  • tel:<phone-number>
  • voicemail:<phone-number>
MIME-এর প্রকার
কিছুই না

সঠিক টেলিফোন নম্বর হল সেগুলি যা IETF RFC 3966-এ উল্লেখ করা আছে। সঠিক উদাহরণের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:

  • tel:2125551212
  • tel:(212) 555 1212

Phone অ্যাপের ডায়ালার, টেলিফোন নম্বরের মতো স্কিমকে স্বাভাবিক করার ক্ষেত্রে ভালো কাজ করে। তাই 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);
    }
}

সার্চ অ্যাপের জন্য সাধারণ অ্যাকশন নিচে দেওয়া হল, এর মধ্যে আপনার অ্যাপের প্রতিটি অ্যাকশন পারফর্ম করার ক্ষমতা বিজ্ঞাপন করার জন্য ইনটেন্ট ফিল্টার তৈরি করতে প্রয়োজনীয় তথ্যও অন্তর্ভুক্ত।

নির্দিষ্ট অ্যাপ ব্যবহার করে সার্চ করা

Google ভয়েস অ্যাকশন

  • "myvideoapp-এ বিড়ালের ভিডিও সার্চ করো"

আপনার অ্যাপের প্রসঙ্গে সার্চের সুবিধা দিতে, আপনার অ্যাপে SEARCH_ACTION অ্যাকশন সহ একটি ইনটেন্ট ফিল্টার ঘোষণা করুন, যেমনটি নিম্নলিখিত ইনটেন্ট ফিল্টারের উদাহরণে দেখানো হয়েছে।

মনে রাখবেন: অ্যাপ সার্চ করার জন্য আমরা SEARCH_ACTION ব্যবহার করার সাজেশন দিই না। পরিবর্তে, GET_THING অ্যাকশন প্রয়োগ করুন যাতে অ্যাপ-মধ্যস্থ সার্চের জন্য Google Assistant-এর বিল্ট-ইন সহায়তা কাজে লাগানো যায়। আরও তথ্যের জন্য, Google Assistant অ্যাপ অ্যাকশন ডকুমেন্টেশন দেখুন।

অ্যাকশন
"com.google.android.gms.actions.SEARCH_ACTION"
Google ভয়েস অ্যাকশন থেকে সার্চ কোয়েরি সাপোর্ট করে।
অতিরিক্ত
QUERY
সার্চ কোয়েরি সহ স্ট্রিং।

ইনটেন্ট ফিল্টারের উদাহরণ:

<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 এক্সট্রাতে সার্চ স্ট্রিং নির্দিষ্ট করুন।

অ্যাকশন
ACTION_WEB_SEARCH
ডেটা URI স্কিম
কোনওটিই নয়
MIME-এর প্রকার
কোনওটিই নয়
অতিরিক্ত
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);
    }
}

সেটিংস

আপনার অ্যাপে ব্যবহারকারীর কিছু পরিবর্তন করার প্রয়োজন হলে, সিস্টেম সেটিংস অ্যাপে স্ক্রিন খুলতে, নিম্নলিখিত ইনটেন্ট অ্যাকশনের মধ্যে যেকোনও একটি ব্যবহার করুন:

অ্যাকশন
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-এর প্রকার
কিছুই না

ইনটেন্টের উদাহরণ:

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

পাঠ্য বার্তাপ্রেরণ

অ্যাটাচমেন্ট সহ এসএমএস/এমএমএস মেসেজ কম্পোজ করা হল টেক্সট মেসেজিং অ্যাপের জন্য একটি সাধারণ অ্যাকশন। নিম্নলিখিত বিভাগের তথ্য ব্যবহার করে এই অ্যাকশন পারফর্ম করার জন্য আপনার অ্যাপের ক্ষমতা বিজ্ঞাপন করতে একটি ইনটেন্ট ফিল্টার তৈরি করুন।

অ্যাটাচমেন্ট সহ এসএমএস/এমএমএস মেসেজ কম্পোজ করুন

এসএমএস বা এমএমএস টেক্সট মেসেজ শুরু করতে, নিম্নলিখিত ইনটেন্ট অ্যাকশনের মধ্যে যেকোনও একটি ব্যবহার করুন এবং নিম্নলিখিত অতিরিক্ত কী ব্যবহার করে ফোন নম্বর, বিষয় ও মেসেজের বিষয়বস্তুর মতো মেসেজের বিবরণ নির্দিষ্ট করুন।

অ্যাকশন
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 অবজেক্ট যা অ্যাটাচ করার জন্য ছবি বা ভিডিওতে পয়েন্ট করে।

ইনটেন্টের উদাহরণ:

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 লোড করুন

Google ভয়েস অ্যাকশন

  • "example.com খোলো"

কোনও ওয়েব পেজ খুলতে, ACTION_VIEW অ্যাকশন ব্যবহার করুন এবং ইনটেন্ট ডেটাতে ওয়েব URL উল্লেখ করুন।

অ্যাকশন
ACTION_VIEW
ডেটা URI স্কিম
http:<URL>
https:<URL>
MIME-এর প্রকার
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"

ইনটেন্টের উদাহরণ:

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 ডিবাগ ব্রিজের মাধ্যমে ইনটেন্ট যাচাই করা

আপনার অ্যাপ যে ইনটেন্টকে সাপোর্ট করতে চান সেটির উত্তর দেয় কিনা তা যাচাই করতে, আপনি adb টুল ব্যবহার করে নির্দিষ্ট ইনটেন্ট ফায়ার করতে পারেন। এর জন্য নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ডেভেলপমেন্ট-এর জন্য Android ডিভাইস সেট-আপ করুন অথবা ভার্চুয়াল ডিভাইস ব্যবহার করুন।
  2. আপনার অ্যাপের এমন একটি ভার্সন ইনস্টল করুন যা আপনার পছন্দের ইনটেন্ট ম্যানেজ করে।
  3. 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
    
  4. আপনি যদি প্রয়োজনীয় ইনটেন্ট ফিল্টার নির্ধারণ করেন, তাহলে ইনটেন্ট ম্যানেজ করুন।

আরও তথ্যের জন্য, শেল কমান্ড ইস্যু করুন দেখুন।