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

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

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

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

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

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

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

Google Voice অ্যাকশন

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

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

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

অ্যালার্ম তৈরি করা

Google Voice অ্যাকশন

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

নতুন অ্যালার্ম তৈরি করতে, 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 Voice অ্যাকশন

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

কাউন্টডাউন টাইমার তৈরি করতে, 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" নামের অতিরিক্তে কম্প্রেস করা থাম্বনেল থাকে।

স্টিল ইমেজ মোডে ক্যামেরা অ্যাপ চালু করুন

Google Voice অ্যাকশন

  • "ছবি তোলো"

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

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

ভিডিও মোডে ক্যামেরা অ্যাপ খুলতে, 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 supports OpenableColumns
             and ContentResolver.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_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 Voice অ্যাকশন

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

(শুধুমাত্র 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 Voice অ্যাকশন

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

সার্চ কোয়েরির উপর ভিত্তি করে মিউজিক চালাতে, 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>

আপনার অ্যাক্টিভিটিতে এই ইনটেন্ট হ্যান্ডেল করার সময়, সার্চ মোড নির্ধারণ করতে, ইনকামিং 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
নোটের টেক্সট নির্দেশ করে এমন একটি স্ট্রিং।

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

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

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

সরাসরি ফোন কল করতে, 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

ফোন অ্যাপের ডায়লার স্কিম স্বাভাবিক করার ব্যাপারে খুবই ভাল, যেমন ফোন নম্বর। তাই, বর্ণিত স্কিমটি 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 Voice অ্যাকশন

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

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

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

অ্যাকশন
"com.google.android.gms.actions.SEARCH_ACTION"
Google Voice অ্যাকশন থেকে সার্চ কোয়েরি সংক্রান্ত সহায়তা।
অতিরিক্ত
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);
    }
}

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

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

অ্যাটাচমেন্ট সহ এসএমএস/এমএমএস মেসেজ লেখা

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

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

  • "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 Debug Bridge-এর মাধ্যমে ইনটেন্ট যাচাই করা

আপনার অ্যাপ যে ইনটেন্ট কাজ করে তা যাচাই করতে, আপনি 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. প্রয়োজনীয় ইনটেন্ট ফিল্টার নির্ধারণ করলে, ইনটেন্ট হ্যান্ডেল করুন।

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