সাধারণ অভিপ্রায়

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

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

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

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

আপনি যদি ইনটেন্ট বা ইনটেন্ট ফিল্টার তৈরি করার পদ্ধতি সম্পর্কে পরিচিত না হন, তাহলে প্রথমে ইনটেন্ট এবং ইনটেন্ট ফিল্টার পড়ুন।

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

গুগল ভয়েস অ্যাকশন

গুগল ভয়েস অ্যাকশনস ভয়েস কমান্ডের জবাবে এই পৃষ্ঠায় তালিকাভুক্ত কিছু ইন্টেন্ট চালু করে। আরও তথ্যের জন্য, ‘সিস্টেম ভয়েস অ্যাকশনস দিয়ে শুরু করুন ’ দেখুন।

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

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

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

গুগল ভয়েস অ্যাকশন

  • সকাল ৭টার জন্য অ্যালার্ম সেট করুন।

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

দ্রষ্টব্য: শুধুমাত্র ঘন্টা, মিনিট এবং মেসেজের অতিরিক্ত সুবিধাগুলো অ্যান্ড্রয়েড ২.৩ (এপিআই লেভেল ৯) এবং এর নিচের সংস্করণগুলোতে পাওয়া যায়। অন্যান্য অতিরিক্ত সুবিধাগুলো প্ল্যাটফর্মের উচ্চতর সংস্করণগুলোতে পাওয়া যাবে।

পদক্ষেপ
ACTION_SET_ALARM
ডেটা ইউআরআই
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
EXTRA_HOUR
অ্যালার্ম বাজানোর সময়।
EXTRA_MINUTES
অ্যালার্মের জন্য মিনিটগুলো।
EXTRA_MESSAGE
অ্যালার্মটি শনাক্ত করার জন্য একটি বিশেষ বার্তা।
EXTRA_DAYS
একটি ArrayList যাতে সপ্তাহের প্রতিটি দিন অন্তর্ভুক্ত থাকবে যেদিন এই অ্যালার্মটি পুনরাবৃত্তি হবে। প্রতিটি দিনকে অবশ্যই Calendar ক্লাসের একটি পূর্ণসংখ্যা দিয়ে ঘোষণা করতে হবে, যেমন MONDAY

এককালীন অ্যালার্মের জন্য এই অতিরিক্ত বিষয়টি উল্লেখ করবেন না।

EXTRA_RINGTONE
content: অ্যালার্মের সাথে ব্যবহার করার জন্য রিংটোন নির্দিষ্টকারী URI, অথবা কোনো রিংটোন না থাকার জন্য VALUE_RINGTONE_SILENT

ডিফল্ট রিংটোন ব্যবহার করতে, এই অতিরিক্তটি নির্দিষ্ট করবেন না।

EXTRA_VIBRATE
এই অ্যালার্মের জন্য ভাইব্রেট করা হবে কিনা তা নির্ধারণকারী একটি বুলিয়ান।
EXTRA_SKIP_UI
একটি বুলিয়ান যা নির্ধারণ করে যে অ্যালার্ম সেট করার সময় প্রতিক্রিয়াশীল অ্যাপটিকে তার UI এড়িয়ে যেতে হবে কিনা। যদি 'true' হয়, তবে অ্যাপটিকে অবশ্যই যেকোনো নিশ্চিতকরণ UI এড়িয়ে যেতে হবে এবং নির্দিষ্ট অ্যালার্মটি সেট করতে হবে।

উদাহরণ অভিপ্রায়:

কোটলিন

fun createAlarm(message: String, hour: Int, minutes: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_HOUR, hour)
        putExtra(AlarmClock.EXTRA_MINUTES, minutes)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void createAlarm(String message, int hour, int minutes) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_HOUR, hour)
            .putExtra(AlarmClock.EXTRA_MINUTES, minutes);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
দ্রষ্টব্য:

ACTION_SET_ALARM ইন্টেন্টটি চালু করতে হলে, আপনার অ্যাপের SET_ALARM পারমিশন থাকতে হবে:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_ALARM" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

একটি টাইমার তৈরি করুন

গুগল ভয়েস অ্যাকশন

  • ৫ মিনিটের জন্য টাইমার সেট করুন।

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

দ্রষ্টব্য: এই ইন্টেন্টটি অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ১৯) এবং এর পরবর্তী সংস্করণগুলোতে উপলব্ধ।

পদক্ষেপ
ACTION_SET_TIMER
ডেটা ইউআরআই
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
EXTRA_LENGTH
টাইমারের সময়কাল সেকেন্ডে।
EXTRA_MESSAGE
টাইমারটি শনাক্ত করার জন্য একটি বিশেষ বার্তা।
EXTRA_SKIP_UI
একটি বুলিয়ান যা নির্ধারণ করে যে টাইমার সেট করার সময় প্রতিক্রিয়াশীল অ্যাপটিকে তার UI এড়িয়ে যেতে হবে কিনা। যদি 'true' হয়, তবে অ্যাপটিকে অবশ্যই যেকোনো নিশ্চিতকরণ UI বাইপাস করে নির্দিষ্ট টাইমারটি শুরু করতে হবে।

উদাহরণ অভিপ্রায়:

কোটলিন

fun startTimer(message: String, seconds: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_LENGTH, seconds)
        putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void startTimer(String message, int seconds) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
দ্রষ্টব্য:

ACTION_SET_TIMER ইন্টেন্টটি চালু করতে হলে, আপনার অ্যাপের SET_ALARM পারমিশন থাকতে হবে:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_TIMER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

সমস্ত অ্যালার্ম দেখান

অ্যালার্মের তালিকা দেখানোর জন্য ACTION_SHOW_ALARMS অ্যাকশনটি ব্যবহার করুন।

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

দ্রষ্টব্য: এই ইন্টেন্টটি অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ১৯) এবং এর পরবর্তী সংস্করণগুলোতে উপলব্ধ।

পদক্ষেপ
ACTION_SHOW_ALARMS
ডেটা ইউআরআই
কোনোটিই না
MIME টাইপ
কোনোটিই না

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SHOW_ALARMS" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

ক্যালেন্ডার

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

ক্যালেন্ডারে একটি ইভেন্ট যোগ করুন

ব্যবহারকারীর ক্যালেন্ডারে একটি নতুন ইভেন্ট যোগ করতে, ACTION_INSERT অ্যাকশনটি ব্যবহার করুন এবং Events.CONTENT_URI ব্যবহার করে ডেটা URI নির্দিষ্ট করুন। এরপর আপনি নিম্নলিখিত এক্সট্রাগুলো ব্যবহার করে ইভেন্টের বিভিন্ন বিবরণ নির্দিষ্ট করতে পারেন।

পদক্ষেপ
ACTION_INSERT
ডেটা ইউআরআই
Events.CONTENT_URI
MIME টাইপ
"vnd.android.cursor.dir/event"
অতিরিক্ত
EXTRA_EVENT_ALL_DAY
এটি একটি দিনব্যাপী অনুষ্ঠান কিনা তা নির্দেশকারী একটি বুলিয়ান।
EXTRA_EVENT_BEGIN_TIME
ঘটনাটির শুরুর সময় (ইপক থেকে মিলিসেকেন্ডে)।
EXTRA_EVENT_END_TIME
ঘটনাটির শেষ সময় (ইপক থেকে মিলিসেকেন্ডে)।
TITLE
অনুষ্ঠানের শিরোনাম।
DESCRIPTION
ঘটনার বিবরণ।
EVENT_LOCATION
অনুষ্ঠানের স্থান।
EXTRA_EMAIL
আমন্ত্রিতদের ইমেইল ঠিকানাগুলোর একটি কমা দ্বারা পৃথক করা তালিকা।

CalendarContract.EventsColumns ক্লাসে সংজ্ঞায়িত কনস্ট্যান্টগুলো ব্যবহার করে ইভেন্টের আরও অনেক বিবরণ নির্দিষ্ট করা যেতে পারে।

উদাহরণ অভিপ্রায়:

কোটলিন

fun addEvent(title: String, location: String, begin: Long, end: Long) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        data = Events.CONTENT_URI
        putExtra(Events.TITLE, title)
        putExtra(Events.EVENT_LOCATION, location)
        putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
        putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void addEvent(String title, String location, long begin, long end) {
    Intent intent = new Intent(Intent.ACTION_INSERT)
            .setData(Events.CONTENT_URI)
            .putExtra(Events.TITLE, title)
            .putExtra(Events.EVENT_LOCATION, location)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.INSERT" />
        <data android:mimeType="vnd.android.cursor.dir/event" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

ক্যামেরা

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

একটি ছবি বা ভিডিও তুলে ফেরত দিন।

ক্যামেরা অ্যাপ খুলতে এবং প্রাপ্ত ছবি বা ভিডিও গ্রহণ করতে, ACTION_IMAGE_CAPTURE বা ACTION_VIDEO_CAPTURE অ্যাকশনটি ব্যবহার করুন। এছাড়াও, EXTRA_OUTPUT এক্সট্রা-তে সেই URI লোকেশনটি উল্লেখ করুন যেখানে আপনি ক্যামেরাটিকে ছবি বা ভিডিওটি সেভ করতে চান।

পদক্ষেপ
ACTION_IMAGE_CAPTURE অথবা
ACTION_VIDEO_CAPTURE
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
EXTRA_OUTPUT
ক্যামেরা অ্যাপটি যে URI লোকেশনে ফটো বা ভিডিও ফাইলটি সেভ করে (একটি Uri অবজেক্ট হিসেবে)।

যখন ক্যামেরা অ্যাপটি সফলভাবে আপনার অ্যাক্টিভিটিতে ফোকাস ফিরিয়ে আনে—অর্থাৎ, আপনার অ্যাপটি onActivityResult() কলব্যাকটি পায়—তখন আপনি EXTRA_OUTPUT ভ্যালু দিয়ে নির্দিষ্ট করা URI-তে থাকা ফটো বা ভিডিওটি অ্যাক্সেস করতে পারবেন।

দ্রষ্টব্য: যখন আপনি ACTION_IMAGE_CAPTURE ব্যবহার করে কোনো ছবি তোলেন, তখন ক্যামেরাটি ফলাফল Intent এ থাকা ছবিটির একটি ছোট আকারের অনুলিপি বা থাম্বনেইলও ফেরত দিতে পারে, যা "data" নামের একটি অতিরিক্ত ফিল্ডে Bitmap হিসেবে সংরক্ষিত হয়।

উদাহরণ অভিপ্রায়:

কোটলিন

const val REQUEST_IMAGE_CAPTURE = 1
val locationForPhotos: Uri = ...

fun capturePhoto(targetFilename: String) {
    val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
        putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename))
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
        val thumbnail: Bitmap = data.getParcelableExtra("data")
        // Do other work with full size photo saved in locationForPhotos.
        ...
    }
}

জাভা

static final int REQUEST_IMAGE_CAPTURE = 1;
static final Uri locationForPhotos;

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(locationForPhotos, targetFilename));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelableExtra("data");
        // Do other work with full size photo saved in locationForPhotos.
        ...
    }
}

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) বা তার উচ্চতর সংস্করণে এটি করার জন্য, নিম্নলিখিত ইন্টেন্ট উদাহরণটি দেখুন।

উদাহরণ অভিপ্রায়:

কোটলিন

val REQUEST_IMAGE_CAPTURE = 1

private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // Display error state to the user.
    }
}

জাভা

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } catch (ActivityNotFoundException e) {
        // Display error state to the user.
    }
}
</section></div>

এই ইন্টেন্টটি ব্যবহার করে কীভাবে ছবি তুলতে হয়, আউটপুট লোকেশনের জন্য কীভাবে একটি উপযুক্ত Uri তৈরি করতে হয় তা সহ, সে সম্পর্কে আরও তথ্যের জন্য "ছবি তুলুন" বা "ভিডিও তুলুন" পড়ুন।

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

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

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

স্থির চিত্র মোডে একটি ক্যামেরা অ্যাপ চালু করুন

গুগল ভয়েস অ্যাকশন

  • ছবি তুলুন

ক্যামেরা অ্যাপকে স্টিল ইমেজ মোডে খুলতে, INTENT_ACTION_STILL_IMAGE_CAMERA অ্যাকশনটি ব্যবহার করুন।

পদক্ষেপ
INTENT_ACTION_STILL_IMAGE_CAMERA
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
কোনোটিই না

উদাহরণ অভিপ্রায়:

কোটলিন

private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // Display error state to the user.
    }
}

জাভা

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(locationForPhotos, targetFilename));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

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

গুগল ভয়েস অ্যাকশন

  • একটি ভিডিও রেকর্ড করুন

ভিডিও মোডে ক্যামেরা অ্যাপ খুলতে, INTENT_ACTION_VIDEO_CAMERA অ্যাকশনটি ব্যবহার করুন।

পদক্ষেপ
INTENT_ACTION_VIDEO_CAMERA
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
কোনোটিই না

উদাহরণ অভিপ্রায়:

কোটলিন

fun capturePhoto() {
    val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA)
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

জাভা

public void capturePhoto() {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.VIDEO_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

পরিচিতি/ব্যক্তি অ্যাপ

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

একটি যোগাযোগ নির্বাচন করুন

ব্যবহারকারীকে কোনো কন্ট্যাক্ট নির্বাচন করতে এবং আপনার অ্যাপকে সেই কন্ট্যাক্টের সমস্ত তথ্যে অ্যাক্সেস দিতে, ACTION_PICK অ্যাকশনটি ব্যবহার করুন এবং MIME টাইপ হিসেবে Contacts.CONTENT_TYPE নির্দিষ্ট করে দিন।

আপনার onActivityResult() কলব্যাকে পাঠানো result Intent নির্বাচিত কন্ট্যাক্টটির content: URI থাকে। এই রেসপন্সটি আপনার অ্যাপকে Contacts Provider API ব্যবহার করে সেই কন্ট্যাক্টটি পড়ার জন্য অস্থায়ী অনুমতি দেয়, এমনকি যদি আপনার অ্যাপে READ_CONTACTS পারমিশনটি অন্তর্ভুক্ত না-ও থাকে।

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

পদক্ষেপ
ACTION_PICK
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
Contacts.CONTENT_TYPE

উদাহরণ অভিপ্রায়:

কোটলিন

const val REQUEST_SELECT_CONTACT = 1

fun selectContact() {
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        val contactUri: Uri = data.data
        // Do something with the selected contact at contactUri.
        //...
    }
}

জাভা

static final int REQUEST_SELECT_CONTACT = 1;

public void selectContact() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        Uri contactUri = data.getData();
        // Do something with the selected contact at contactUri.
        ...
    }
}

একবার কন্টাক্ট URI হাতে পেলে কীভাবে যোগাযোগের বিবরণ পুনরুদ্ধার করবেন, সে সম্পর্কে জানতে “Retrieve details for a contact” পড়ুন।

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

নির্দিষ্ট যোগাযোগের তথ্য নির্বাচন করুন

ব্যবহারকারীকে কোনো কন্ট্যাক্ট থেকে ফোন নম্বর, ইমেল অ্যাড্রেস বা অন্য কোনো ডেটা টাইপের মতো নির্দিষ্ট তথ্য নির্বাচন করাতে, ACTION_PICK অ্যাকশনটি ব্যবহার করুন এবং MIME টাইপ হিসেবে নিম্নলিখিত কন্টেন্ট টাইপগুলোর মধ্যে একটি নির্দিষ্ট করে দিন; যেমন, কন্ট্যাক্টটির ফোন নম্বর পেতে CommonDataKinds.Phone.CONTENT_TYPE ব্যবহার করুন।

দ্রষ্টব্য: অনেক ক্ষেত্রে, কোনো নির্দিষ্ট কন্ট্যাক্টের বিশেষ তথ্য দেখার জন্য আপনার অ্যাপের READ_CONTACTS পারমিশন থাকা প্রয়োজন।

যদি কোনো কন্ট্যাক্ট থেকে শুধুমাত্র এক ধরনের ডেটা পুনরুদ্ধার করার প্রয়োজন হয়, তাহলে পূর্ববর্তী বিভাগে দেখানো Contacts.CONTENT_TYPE ব্যবহার করার চেয়ে ContactsContract.CommonDataKinds ক্লাসের CONTENT_TYPE ব্যবহার করার এই কৌশলটি বেশি কার্যকর। এর ফলে Contacts Provider- এ আরও জটিল কোয়েরি চালানোর প্রয়োজন ছাড়াই আপনি সরাসরি কাঙ্ক্ষিত ডেটা অ্যাক্সেস করতে পারবেন।

আপনার onActivityResult() কলব্যাকে পাঠানো result Intent নির্বাচিত কন্ট্যাক্ট ডেটার content: URI থাকে। এই রেসপন্সটি আপনার অ্যাপকে সেই কন্ট্যাক্ট ডেটা পড়ার জন্য অস্থায়ী অনুমতি দেয়, এমনকি যদি আপনার অ্যাপে READ_CONTACTS পারমিশনটি অন্তর্ভুক্ত না-ও থাকে।

পদক্ষেপ
ACTION_PICK
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
CommonDataKinds.Phone.CONTENT_TYPE
ফোন নম্বরসহ পরিচিতিগুলো থেকে বাছাই করুন।
CommonDataKinds.Email.CONTENT_TYPE
যাদের ইমেল ঠিকানা আছে, তাদের মধ্য থেকে বাছাই করুন।
CommonDataKinds.StructuredPostal.CONTENT_TYPE
ডাক ঠিকানা আছে এমন পরিচিতিগুলো থেকে বাছাই করুন।

অথবা ContactsContract অধীনে থাকা অন্যান্য অনেক CONTENT_TYPE ভ্যালুগুলোর মধ্যে একটি।

উদাহরণ অভিপ্রায়:

কোটলিন

const val REQUEST_SELECT_PHONE_NUMBER = 1

fun selectContact() {
    // Start an activity for the user to pick a phone number from contacts.
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = CommonDataKinds.Phone.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) {
        // Get the URI and query the content provider for the phone number.
        val contactUri: Uri = data.data
        val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER)
        contentResolver.query(contactUri, projection, null, null, null).use { cursor ->
            // If the cursor returned is valid, get the phone number.
            if (cursor.moveToFirst()) {
                val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER)
                val number = cursor.getString(numberIndex)
                // Do something with the phone number.
                ...
            }
        }
    }
}

জাভা

static final int REQUEST_SELECT_PHONE_NUMBER = 1;

public void selectContact() {
    // Start an activity for the user to pick a phone number from contacts.
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {
        // Get the URI and query the content provider for the phone number.
        Uri contactUri = data.getData();
        String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
        Cursor cursor = getContentResolver().query(contactUri, projection,
                null, null, null);
        // If the cursor returned is valid, get the phone number.
        if (cursor != null && cursor.moveToFirst()) {
            int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number.
            //...
        }
    }
}

একটি যোগাযোগ দেখুন

পরিচিত কোনো কন্ট্যাক্টের বিবরণ দেখতে, ACTION_VIEW অ্যাকশনটি ব্যবহার করুন এবং ইন্টেন্ট ডেটা হিসেবে content: URI সহ কন্ট্যাক্টটি নির্দিষ্ট করুন।

প্রাথমিকভাবে কন্ট্যাক্টের URI পুনরুদ্ধার করার দুটি প্রধান উপায় রয়েছে:

  • পূর্ববর্তী বিভাগে দেখানো ACTION_PICK অ্যাকশন দ্বারা প্রাপ্ত কন্টাক্ট URI ব্যবহার করুন। এই পদ্ধতির জন্য কোনো অ্যাপ পারমিশনের প্রয়োজন হয় না।
  • ‘যোগাযোগের তালিকা পুনরুদ্ধার করুন’ অংশে বর্ণিত পদ্ধতি অনুসরণ করে সরাসরি সমস্ত পরিচিতির তালিকা অ্যাক্সেস করুন। এই পদ্ধতির জন্য READ_CONTACTS পারমিশন প্রয়োজন।
পদক্ষেপ
ACTION_VIEW
ডেটা ইউআরআই স্কিম
content:<URI>
MIME টাইপ
কোনোটিই নয়। যোগাযোগের URI থেকে ধরণটি অনুমান করা হয়।

উদাহরণ অভিপ্রায়:

কোটলিন

fun viewContact(contactUri: Uri) {
    val intent = Intent(Intent.ACTION_VIEW, contactUri)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void viewContact(Uri contactUri) {
    Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

বিদ্যমান পরিচিতি সম্পাদনা করুন

পরিচিত কোনো কন্ট্যাক্ট সম্পাদনা করতে, ACTION_EDIT অ্যাকশনটি ব্যবহার করুন, ইন্টেন্ট ডেটা হিসেবে content: URI সহ কন্ট্যাক্টটি নির্দিষ্ট করুন, এবং ContactsContract.Intents.Insert এর কনস্ট্যান্ট দ্বারা নির্দিষ্ট এক্সট্রাগুলোর মধ্যে পরিচিত কন্ট্যাক্টের যেকোনো তথ্য অন্তর্ভুক্ত করুন।

প্রাথমিকভাবে কন্টাক্ট ইউআরআই পুনরুদ্ধার করার দুটি প্রধান উপায় রয়েছে:

  • পূর্ববর্তী বিভাগে দেখানো ACTION_PICK অ্যাকশন দ্বারা প্রাপ্ত কন্টাক্ট URI ব্যবহার করুন। এই পদ্ধতির জন্য কোনো অ্যাপ পারমিশনের প্রয়োজন হয় না।
  • ‘যোগাযোগের তালিকা পুনরুদ্ধার করুন’ অংশে বর্ণিত পদ্ধতি অনুসরণ করে সরাসরি সমস্ত পরিচিতির তালিকা অ্যাক্সেস করুন। এই পদ্ধতির জন্য READ_CONTACTS পারমিশন প্রয়োজন।
পদক্ষেপ
ACTION_EDIT
ডেটা ইউআরআই স্কিম
content:<URI>
MIME টাইপ
কন্টাক্ট ইউআরআই থেকে ধরণটি অনুমান করা হয়।
অতিরিক্ত
ContactsContract.Intents.Insert এ সংজ্ঞায়িত এক বা একাধিক অতিরিক্ত অপশন ব্যবহার করে আপনি যোগাযোগের বিবরণের ফিল্ডগুলি পূরণ করতে পারেন।

উদাহরণ অভিপ্রায়:

কোটলিন

fun editContact(contactUri: Uri, email: String) {
    val intent = Intent(Intent.ACTION_EDIT).apply {
        data = contactUri
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void editContact(Uri contactUri, String email) {
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setData(contactUri);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

কীভাবে একটি কন্ট্যাক্ট সম্পাদনা করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, ‘ইন্টেন্ট ব্যবহার করে কন্ট্যাক্ট পরিবর্তন করুন’ পড়ুন।

একটি যোগাযোগ প্রবেশ করান

নতুন কোনো কন্ট্যাক্ট যোগ করতে, ACTION_INSERT অ্যাকশনটি ব্যবহার করুন, MIME টাইপ হিসেবে Contacts.CONTENT_TYPE নির্দিষ্ট করুন, এবং ContactsContract.Intents.Insert এর কনস্ট্যান্ট দ্বারা নির্দিষ্ট এক্সট্রাগুলোর মধ্যে যেকোনো পরিচিত কন্ট্যাক্ট তথ্য অন্তর্ভুক্ত করুন।

পদক্ষেপ
ACTION_INSERT
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
Contacts.CONTENT_TYPE
অতিরিক্ত
ContactsContract.Intents.Insert এ সংজ্ঞায়িত এক বা একাধিক অতিরিক্ত বৈশিষ্ট্য।

উদাহরণ অভিপ্রায়:

কোটলিন

fun insertContact(name: String, email: String) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
        putExtra(ContactsContract.Intents.Insert.NAME, name)
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void insertContact(String name, String email) {
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setType(Contacts.CONTENT_TYPE);
    intent.putExtra(Intents.Insert.NAME, name);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

কীভাবে একটি কন্ট্যাক্ট যুক্ত করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, ‘ইন্টেন্ট ব্যবহার করে কন্ট্যাক্ট পরিবর্তন করুন’ পড়ুন।

ইমেল

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

ঐচ্ছিক সংযুক্তি সহ একটি ইমেল রচনা করুন

ইমেল কম্পোজ করতে, আপনি অ্যাটাচমেন্ট যুক্ত করবেন কি না তার উপর ভিত্তি করে নিম্নলিখিত অ্যাকশনগুলোর মধ্যে একটি ব্যবহার করুন এবং তালিকাভুক্ত অতিরিক্ত কীগুলো ব্যবহার করে প্রাপক ও বিষয়ের মতো ইমেলের বিবরণ অন্তর্ভুক্ত করুন।

পদক্ষেপ
ACTION_SENDTO (সংযুক্তি ছাড়া হলে) অথবা
ACTION_SEND (একটি সংযুক্তি এর জন্য) অথবা
ACTION_SEND_MULTIPLE (একাধিক সংযুক্তি পাঠানোর জন্য)
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
"text/plain"
"*/*"
অতিরিক্ত
Intent.EXTRA_EMAIL
সকল প্রাপকের ইমেইল ঠিকানার একটি স্ট্রিং অ্যারে।
Intent.EXTRA_CC
সমস্ত "CC" প্রাপকের ইমেল ঠিকানাগুলির একটি স্ট্রিং অ্যারে।
Intent.EXTRA_BCC
"BCC"-তে থাকা সকল প্রাপকের ইমেল ঠিকানার একটি স্ট্রিং অ্যারে।
Intent.EXTRA_SUBJECT
ইমেইলের বিষয় সম্বলিত একটি স্ট্রিং।
Intent.EXTRA_TEXT
ইমেইলের মূল অংশ সম্বলিত একটি স্ট্রিং।
Intent.EXTRA_STREAM
অ্যাটাচমেন্টকে নির্দেশকারী একটি UriACTION_SEND_MULTIPLE অ্যাকশনটি ব্যবহার করা হলে, এর পরিবর্তে এটি একাধিক Uri অবজেক্ট সম্বলিত একটি ArrayList হয়।

উদাহরণ অভিপ্রায়:

কোটলিন

fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SEND).apply {
        type = "*/*"
        putExtra(Intent.EXTRA_EMAIL, addresses)
        putExtra(Intent.EXTRA_SUBJECT, subject)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void composeEmail(String[] addresses, String subject, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

আপনি যদি নিশ্চিত করতে চান যে আপনার ইনটেন্টটি শুধুমাত্র একটি ইমেল অ্যাপ দ্বারা পরিচালিত হবে, এবং কোনো টেক্সট মেসেজিং বা সোশ্যাল অ্যাপ দ্বারা নয়, তাহলে ACTION_SENDTO অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী "mailto:" ডেটা স্কিমটি অন্তর্ভুক্ত করুন:

কোটলিন

fun composeEmail(addresses: Array<String>, subject: String) {
    val intent = Intent(Intent.ACTION_SENDTO).apply {
        data = Uri.parse("mailto:") // Only email apps handle this.
        putExtra(Intent.EXTRA_EMAIL, addresses)
        putExtra(Intent.EXTRA_SUBJECT, subject)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // Only email apps handle this.
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:type="*/*" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SENDTO" />
        <data android:scheme="mailto" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

ফাইল স্টোরেজ

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

একটি নির্দিষ্ট ধরণের ফাইল পুনরুদ্ধার করুন

ব্যবহারকারীকে কোনো ডকুমেন্ট বা ছবির মতো ফাইল নির্বাচন করতে এবং আপনার অ্যাপে তার একটি রেফারেন্স ফেরত পাঠাতে অনুরোধ করার জন্য, ACTION_GET_CONTENT অ্যাকশনটি ব্যবহার করুন এবং আপনার কাঙ্ক্ষিত MIME টাইপ নির্দিষ্ট করে দিন। আপনার অ্যাপে ফেরত আসা ফাইল রেফারেন্সটি আপনার অ্যাক্টিভিটির বর্তমান লাইফসাইকেলের জন্য ক্ষণস্থায়ী, তাই আপনি যদি পরে এটি অ্যাক্সেস করতে চান, তবে আপনাকে এমন একটি কপি ইম্পোর্ট করতে হবে যা আপনি পরে পড়তে পারবেন।

এই ইন্টেন্টটি ব্যবহারকারীকে একই সাথে একটি নতুন ফাইল তৈরি করার সুযোগও দেয়। উদাহরণস্বরূপ, আগে থেকে থাকা কোনো ছবি নির্বাচন করার পরিবর্তে, ব্যবহারকারী ক্যামেরা দিয়ে একটি নতুন ছবি তুলতে পারেন।

আপনার onActivityResult() মেথডে পাঠানো রেজাল্ট ইন্টেন্টটিতে ফাইলটির দিকে নির্দেশকারী একটি URI সহ ডেটা অন্তর্ভুক্ত থাকে। URI-টি যেকোনো কিছু হতে পারে, যেমন একটি http: URI, file: URI, বা content: URI। তবে, যদি আপনি নির্বাচনযোগ্য ফাইলগুলিকে শুধুমাত্র সেই ফাইলগুলিতে সীমাবদ্ধ করতে চান যেগুলি একটি কন্টেন্ট প্রোভাইডার থেকে অ্যাক্সেসযোগ্য (একটি content: URI) এবং যেগুলি openFileDescriptor() এর মাধ্যমে একটি ফাইল স্ট্রিম হিসাবে উপলব্ধ, তাহলে আপনার ইন্টেন্টে CATEGORY_OPENABLE ক্যাটাগরিটি যোগ করুন।

অ্যান্ড্রয়েড ৪.৩ (এপিআই লেভেল ১৮) এবং এর পরবর্তী সংস্করণগুলোতে, ইন্টেন্টে EXTRA_ALLOW_MULTIPLE যোগ করে এবং সেটিকে true সেট করে আপনি ব্যবহারকারীকে একাধিক ফাইল নির্বাচন করার সুযোগ দিতে পারেন। এরপর, getClipData() দ্বারা ফেরত আসা ClipData অবজেক্টে আপনি নির্বাচিত প্রতিটি ফাইল অ্যাক্সেস করতে পারবেন।

পদক্ষেপ
ACTION_GET_CONTENT
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
ব্যবহারকারীকে ফাইলের ধরনের সাথে সঙ্গতিপূর্ণ MIME টাইপটি নির্বাচন করতে হবে।
অতিরিক্ত
EXTRA_ALLOW_MULTIPLE
একটি বুলিয়ান যা নির্ধারণ করে যে ব্যবহারকারী একই সময়ে একাধিক ফাইল নির্বাচন করতে পারবে কি না।
EXTRA_LOCAL_ONLY
একটি বুলিয়ান যা নির্ধারণ করে যে ফেরত আসা ফাইলটি কোনো রিমোট সার্ভিস থেকে ডাউনলোড করার প্রয়োজন ছাড়াই সরাসরি ডিভাইস থেকে পাওয়া যাবে কি না।
বিভাগ (ঐচ্ছিক)
CATEGORY_OPENABLE
শুধুমাত্র সেইসব 'খোলার যোগ্য' ফাইল ফেরত দিতে, যেগুলোকে openFileDescriptor() ব্যবহার করে ফাইল স্ট্রিম হিসেবে উপস্থাপন করা যায়।

ছবি পাওয়ার অভিপ্রায়ের উদাহরণ:

কোটলিন

const val REQUEST_IMAGE_GET = 1

fun selectImage() {
    val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
        type = "image/*"
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_GET)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) {
        val thumbnail: Bitmap = data.getParcelableExtra("data")
        val fullPhotoUri: Uri = data.data
        // Do work with photo saved at fullPhotoUri.
        ...
    }
}

জাভা

static final int REQUEST_IMAGE_GET = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_GET);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelable("data");
        Uri fullPhotoUri = data.getData();
        // Do work with photo saved at fullPhotoUri.
        ...
    }
}

একটি ছবি ফেরত দেওয়ার জন্য ইন্টেন্ট ফিল্টারের উদাহরণ:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The OPENABLE category declares that the returned file is accessible
             from a content provider that 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() null রিটার্ন করবে এবং সেক্ষেত্রে আপনাকে getClipData() দ্বারা রিটার্ন করা ClipData অবজেক্ট থেকে প্রতিটি আইটেম নিতে হবে।

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

পদক্ষেপ
ACTION_OPEN_DOCUMENT অথবা
ACTION_CREATE_DOCUMENT
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
ব্যবহারকারীকে ফাইলের ধরনের সাথে সঙ্গতিপূর্ণ MIME টাইপটি নির্বাচন করতে হবে।
অতিরিক্ত
EXTRA_MIME_TYPES
আপনার অ্যাপ যে ধরনের ফাইল অনুরোধ করছে, তার সাথে সঙ্গতিপূর্ণ MIME টাইপগুলোর একটি অ্যারে। যখন আপনি এই এক্সট্রাটি ব্যবহার করবেন, তখন আপনাকে অবশ্যই setType() প্রাইমারি MIME টাইপটি "*/*" হিসেবে সেট করতে হবে।
EXTRA_ALLOW_MULTIPLE
একটি বুলিয়ান যা নির্ধারণ করে যে ব্যবহারকারী একই সময়ে একাধিক ফাইল নির্বাচন করতে পারবে কি না।
EXTRA_TITLE
ACTION_CREATE_DOCUMENT সাথে প্রাথমিক ফাইলের নাম নির্দিষ্ট করার জন্য ব্যবহৃত হয়।
EXTRA_LOCAL_ONLY
একটি বুলিয়ান যা নির্ধারণ করে যে ফেরত আসা ফাইলটি কোনো রিমোট সার্ভিস থেকে ডাউনলোড করার প্রয়োজন ছাড়াই সরাসরি ডিভাইস থেকে পাওয়া যাবে কি না।
বিভাগ
CATEGORY_OPENABLE
শুধুমাত্র সেইসব 'খোলার যোগ্য' ফাইল ফেরত দিতে, যেগুলোকে openFileDescriptor() ব্যবহার করে ফাইল স্ট্রিম হিসেবে উপস্থাপন করা যায়।

ছবি পাওয়ার অভিপ্রায়ের উদাহরণ:

কোটলিন

const val REQUEST_IMAGE_OPEN = 1

fun selectImage2() {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        type = "image/*"
        addCategory(Intent.CATEGORY_OPENABLE)
    }
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) {
        val fullPhotoUri: Uri = data.data
        // Do work with full size photo saved at fullPhotoUri.
        ...
    }
}

জাভা

static final int REQUEST_IMAGE_OPEN = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType("image/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) {
        Uri fullPhotoUri = data.getData();
        // Do work with full size photo saved at fullPhotoUri.
        ...
    }
}

তৃতীয় পক্ষের অ্যাপগুলো ACTION_OPEN_DOCUMENT অ্যাকশন ব্যবহার করে কোনো ইন্টেন্টের প্রতিক্রিয়া জানাতে পারে না। এর পরিবর্তে, সিস্টেম এই ইন্টেন্টটি গ্রহণ করে এবং বিভিন্ন অ্যাপ থেকে উপলব্ধ সমস্ত ফাইল একটি সমন্বিত ইউজার ইন্টারফেসে প্রদর্শন করে।

এই UI-তে আপনার অ্যাপের ফাইলগুলি সরবরাহ করতে এবং অন্যান্য অ্যাপকে সেগুলি খোলার সুযোগ দিতে, আপনাকে অবশ্যই একটি DocumentsProvider ইমপ্লিমেন্ট করতে হবে এবং PROVIDER_INTERFACE ( "android.content.action.DOCUMENTS_PROVIDER" )-এর জন্য একটি ইন্টেন্ট ফিল্টার অন্তর্ভুক্ত করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<provider ...
    android:grantUriPermissions="true"
    android:exported="true"
    android:permission="android.permission.MANAGE_DOCUMENTS">
    <intent-filter>
        <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
    </intent-filter>
</provider>

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

স্থানীয় পদক্ষেপ

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

একটি গাড়ি ডাকুন

গুগল ভয়েস অ্যাকশন

  • আমার জন্য একটা ট্যাক্সি ডেকে দাও।
  • আমাকে একটি গাড়ি ডাকুন

(শুধুমাত্র OS পরিধান করুন)

ট্যাক্সি ডাকার জন্য ACTION_RESERVE_TAXI_RESERVATION অ্যাকশনটি ব্যবহার করুন।

দ্রষ্টব্য: এই কাজটি সম্পন্ন করার আগে অ্যাপগুলোকে অবশ্যই ব্যবহারকারীর কাছ থেকে নিশ্চিতকরণ চাইতে হবে।

পদক্ষেপ
ACTION_RESERVE_TAXI_RESERVATION
ডেটা ইউআরআই
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
কোনোটিই না

উদাহরণ অভিপ্রায়:

কোটলিন

fun callCar() {
    val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void callCar() {
    Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

মানচিত্র

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

মানচিত্রে একটি অবস্থান দেখান

মানচিত্র খুলতে, ACTION_VIEW অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত স্কিমগুলির মধ্যে যেকোনো একটি ব্যবহার করে ইন্টেন্ট ডেটাতে অবস্থানের তথ্য নির্দিষ্ট করুন।

পদক্ষেপ
ACTION_VIEW
ডেটা ইউআরআই স্কিম
geo: latitude , longitude
প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে মানচিত্রটি দেখান।

উদাহরণ: "geo:47.6,-122.3"

geo: latitude , longitude ?z= zoom
প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে একটি নির্দিষ্ট জুম স্তরে মানচিত্রটি দেখান। জুম স্তর ১ প্রদত্ত অক্ষাংশ ও দ্রাঘিমাংশে কেন্দ্র করে সমগ্র পৃথিবী দেখায়। সর্বোচ্চ (নিকটতম) জুম স্তর হলো ২৩।

উদাহরণ: "geo:47.6,-122.3?z=11"

geo:0,0?q=lat,lng(label)
প্রদত্ত দ্রাঘিমাংশ ও অক্ষাংশে একটি স্ট্রিং লেবেলসহ মানচিত্রটি দেখান।

উদাহরণ: "geo:0,0?q=34.99,-106.61(Treasure)"

geo:0,0?q=my+street+address
'আমার রাস্তার ঠিকানা'-র অবস্থান দেখান, যা একটি নির্দিষ্ট ঠিকানা বা অবস্থানের অনুসন্ধান হতে পারে।

উদাহরণ: "geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"

দ্রষ্টব্য: geo ইউআরআই-তে দেওয়া সমস্ত স্ট্রিং অবশ্যই এনকোড করতে হবে। উদাহরণস্বরূপ, 1st & Pike, Seattle স্ট্রিংটি 1st%20%26%20Pike%2C%20Seattle পরিণত হয়। স্ট্রিং-এর মধ্যে থাকা স্পেস %20 দিয়ে এনকোড করা হয় অথবা প্লাস চিহ্ন ( + ) দিয়ে প্রতিস্থাপন করা হয়।

MIME টাইপ
কোনোটিই না

উদাহরণ অভিপ্রায়:

কোটলিন

fun showMap(geoLocation: Uri) {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = geoLocation
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void showMap(Uri geoLocation) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(geoLocation);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="geo" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

সঙ্গীত বা ভিডিও

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

একটি মিডিয়া ফাইল চালান

একটি মিউজিক ফাইল প্লে করতে, ACTION_VIEW অ্যাকশনটি ব্যবহার করুন এবং ইন্টেন্ট ডেটাতে ফাইলটির URI লোকেশন উল্লেখ করুন।

পদক্ষেপ
ACTION_VIEW
ডেটা ইউআরআই স্কিম
file: <URI>
content: <URI>
http: <URL>
MIME টাইপ
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
অথবা আপনার অ্যাপের জন্য প্রয়োজনীয় অন্য যেকোনো কিছু।

উদাহরণ অভিপ্রায়:

কোটলিন

fun playMedia(file: Uri) {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = file
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void playMedia(Uri file) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(file);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:type="audio/*" />
        <data android:type="application/ogg" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

অনুসন্ধানের ভিত্তিতে গান চালান।

গুগল ভয়েস অ্যাকশন

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

সার্চ কোয়েরির উপর ভিত্তি করে মিউজিক প্লে করতে, INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH ইন্টেন্টটি ব্যবহার করুন। ব্যবহারকারীর মিউজিক প্লে করার ভয়েস কমান্ডের জবাবে কোনো অ্যাপ এই ইন্টেন্টটি ফায়ার করতে পারে। এই ইন্টেন্টটি গ্রহণকারী অ্যাপটি প্রদত্ত কোয়েরির সাথে বিদ্যমান কন্টেন্ট মেলানোর জন্য তার ইনভেন্টরিতে সার্চ করে এবং সেই কন্টেন্টটি প্লে করা শুরু করে।

এই ইন্টেন্টে, EXTRA_MEDIA_FOCUS স্ট্রিং এক্সট্রাটি অন্তর্ভুক্ত করুন, যা উদ্দিষ্ট সার্চ মোড নির্দিষ্ট করে। উদাহরণস্বরূপ, সার্চ মোডটি নির্দিষ্ট করতে পারে যে অনুসন্ধানটি কোনো শিল্পীর নাম দিয়ে করা হবে নাকি গানের নাম দিয়ে।

পদক্ষেপ
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
MediaStore.EXTRA_MEDIA_FOCUS (প্রয়োজনীয়)

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

যেকোনো - "vnd.android.cursor.item/*"

যেকোনো গান চালান। গ্রহণকারী অ্যাপটি ব্যবহারকারীর শোনা শেষ প্লেলিস্টের মতো একটি স্মার্ট পছন্দের উপর ভিত্তি করে কিছু গান বাজায়।

অতিরিক্ত সংযোজন:

  • QUERY (আবশ্যক): একটি খালি স্ট্রিং। পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রক্ষার জন্য এই অতিরিক্ত বৈশিষ্ট্যটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইনটেন্টটিকে একটি অসংগঠিত অনুসন্ধান হিসেবে প্রক্রিয়া করতে পারে।

অসংগঠিত - "vnd.android.cursor.item/*"

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

অতিরিক্ত সংযোজন:

  • QUERY (আবশ্যক): একটি স্ট্রিং যাতে শিল্পী, অ্যালবাম, গানের নাম বা জনরার যেকোনো সংমিশ্রণ থাকতে পারে।

ধরণ - 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 (আবশ্যক): একটি স্ট্রিং যাতে অ্যালবাম, শিল্পী, জনরা, প্লেলিস্ট বা শিরোনামের যেকোনো সংমিশ্রণ থাকতে পারে। পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রক্ষার জন্য এই অতিরিক্ত বৈশিষ্ট্যটি সর্বদা প্রদান করা হয়। যেসব বিদ্যমান অ্যাপ সার্চ মোড সম্পর্কে জানে না, তারা এই ইন্টেন্টটিকে একটি অসংগঠিত সার্চ হিসেবে প্রক্রিয়া করতে পারে।

উদাহরণ অভিপ্রায়:

যদি ব্যবহারকারী কোনো নির্দিষ্ট শিল্পীর গান শুনতে চান, তাহলে একটি সার্চ অ্যাপ নিম্নলিখিত ইন্টেন্টটি তৈরি করতে পারে:

কোটলিন

fun playSearchArtist(artist: String) {
    val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply {
        putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE)
        putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist)
        putExtra(SearchManager.QUERY, artist)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void playSearchArtist(String artist) {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
    intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS,
                    MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE);
    intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist);
    intent.putExtra(SearchManager.QUERY, artist);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

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

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS)
        val query: String? = intent.getStringExtra(SearchManager.QUERY)

        // Some of these extras might not be available depending on the search mode.
        val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM)
        val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST)
        val genre: String? = intent.getStringExtra("android.intent.extra.genre")
        val playlist: String? = intent.getStringExtra("android.intent.extra.playlist")
        val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE)

        // Determine the search mode and use the corresponding extras.
        when {
            mediaFocus == null -> {
                // 'Unstructured' search mode (backward compatible)
                playUnstructuredSearch(query)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> {
                if (query?.isNotEmpty() == true) {
                    // 'Unstructured' search mode.
                    playUnstructuredSearch(query)
                } else {
                    // 'Any' search mode.
                    playResumeLastPlaylist()
                }
            }
            mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Genre' search mode.
                playGenre(genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Artist' search mode.
                playArtist(artist, genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Album' search mode.
                playAlbum(album, artist)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> {
                // 'Song' search mode.
                playSong(album, artist, genre, title)
            }
            mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Playlist' search mode.
                playPlaylist(album, artist, genre, playlist, title)
            }
        }
    }
}

জাভা

protected void onCreate(Bundle savedInstanceState) {
    //...
    Intent intent = this.getIntent();
    if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS);
        String query = intent.getStringExtra(SearchManager.QUERY);

        // Some of these extras might not be available depending on the search mode.
        String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM);
        String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST);
        String genre = intent.getStringExtra("android.intent.extra.genre");
        String playlist = intent.getStringExtra("android.intent.extra.playlist");
        String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE);

        // Determine the search mode and use the corresponding extras.
        if (mediaFocus == null) {
            // 'Unstructured' search mode (backward compatible).
            playUnstructuredSearch(query);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) {
            if (query.isEmpty()) {
                // 'Any' search mode.
                playResumeLastPlaylist();
            } else {
                // 'Unstructured' search mode.
                playUnstructuredSearch(query);
            }

        } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) {
            // 'Genre' search mode.
            playGenre(genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Artist' search mode.
            playArtist(artist, genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) {
            // 'Album' search mode.
            playAlbum(album, artist);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) {
            // 'Song' search mode.
            playSong(album, artist, genre, title);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Playlist' search mode.
            playPlaylist(album, artist, genre, playlist, title);
        }
    }
}

নতুন নোট

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

একটি নোট তৈরি করুন

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

দ্রষ্টব্য: এই কাজটি সম্পন্ন করার আগে অ্যাপগুলোকে অবশ্যই ব্যবহারকারীর কাছ থেকে নিশ্চিতকরণ চাইতে হবে।

পদক্ষেপ
ACTION_CREATE_NOTE
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
PLAIN_TEXT_TYPE
"*/*"
অতিরিক্ত
EXTRA_NAME
নোটটির শিরোনাম বা বিষয় নির্দেশকারী একটি স্ট্রিং।
EXTRA_TEXT
নোটটির পাঠ্য নির্দেশকারী একটি স্ট্রিং।

উদাহরণ অভিপ্রায়:

কোটলিন

fun createNote(subject: String, text: String) {
    val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply {
        putExtra(NoteIntents.EXTRA_NAME, subject)
        putExtra(NoteIntents.EXTRA_TEXT, text)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void createNote(String subject, String text) {
    Intent intent = new Intent(NoteIntents.ACTION_CREATE_NOTE)
            .putExtra(NoteIntents.EXTRA_NAME, subject)
            .putExtra(NoteIntents.EXTRA_TEXT, text);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="*/*" />
    </intent-filter>
</activity>

ফোন

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

একটি ফোন কল শুরু করুন

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

গুগল ভয়েস অ্যাকশন

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

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

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

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

IETF RFC 3966- এ সংজ্ঞায়িত নম্বরগুলোই বৈধ টেলিফোন নম্বর। বৈধ উদাহরণগুলোর মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:

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

ফোন অ্যাপের ডায়ালার টেলিফোন নম্বরের মতো স্কিমগুলোকে স্বাভাবিক করতে পারদর্শী। তাই Uri.parse() মেথডে বর্ণিত স্কিমটি কঠোরভাবে আবশ্যক নয়। তবে, যদি আপনি কোনো স্কিম চেষ্টা না করে থাকেন বা এটি পরিচালনা করা যাবে কিনা সে বিষয়ে অনিশ্চিত থাকেন, তাহলে এর পরিবর্তে Uri.fromParts() মেথডটি ব্যবহার করুন।

উদাহরণ অভিপ্রায়:

কোটলিন

fun dialPhoneNumber(phoneNumber: String) {
    val intent = Intent(Intent.ACTION_DIAL).apply {
        data = Uri.parse("tel:$phoneNumber")
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void dialPhoneNumber(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_DIAL);
    intent.setData(Uri.parse("tel:" + phoneNumber));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

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

গুগল ভয়েস অ্যাকশন

  • "myvideoapp-এ বিড়ালের ভিডিও খুঁজুন"

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

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

পদক্ষেপ
"com.google.android.gms.actions.SEARCH_ACTION"
গুগল ভয়েস অ্যাকশন থেকে সার্চ কোয়েরি সমর্থন করুন।
অতিরিক্ত
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
ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
কোনোটিই না
অতিরিক্ত
SearchManager.QUERY
অনুসন্ধান স্ট্রিং।

উদাহরণ অভিপ্রায়:

কোটলিন

fun searchWeb(query: String) {
    val intent = Intent(Intent.ACTION_WEB_SEARCH).apply {
        putExtra(SearchManager.QUERY, query)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void searchWeb(String query) {
    Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
    intent.putExtra(SearchManager.QUERY, query);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

সেটিংস

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

পদক্ষেপ
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGS

উপলব্ধ অতিরিক্ত সেটিংস স্ক্রিনগুলির জন্য, Settings ডকুমেন্টেশন দেখুন।

ডেটা ইউআরআই স্কিম
কোনোটিই না
MIME টাইপ
কোনোটিই না

উদাহরণ অভিপ্রায়:

কোটলিন

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
ডেটা ইউআরআই স্কিম
sms: <phone_number>
smsto: <phone_number>
mms: <phone_number>
mmsto: <phone_number>

এই প্রকল্পগুলো সবই একই পদ্ধতিতে পরিচালিত হয়।

MIME টাইপ
"text/plain"
"image/*"
"video/*"
অতিরিক্ত
"subject"
বার্তার বিষয়ের জন্য একটি স্ট্রিং (সাধারণত শুধু এমএমএস-এর জন্য)।
"sms_body"
টেক্সট মেসেজটির জন্য একটি স্ট্রিং।
EXTRA_STREAM
সংযুক্ত করার জন্য ছবি বা ভিডিও নির্দেশকারী একটি Uri । যদি ACTION_SEND_MULTIPLE অ্যাকশনটি ব্যবহার করা হয়, তাহলে এই এক্সট্রাটি হলো সংযুক্ত করার জন্য ছবি বা ভিডিও নির্দেশকারী Uri অবজেক্টের একটি ArrayList

উদাহরণ অভিপ্রায়:

কোটলিন

fun composeMmsMessage(message: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SENDTO).apply {
        type = HTTP.PLAIN_TEXT_TYPE
        putExtra("sms_body", message)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setType(HTTP.PLAIN_TEXT_TYPE);
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

আপনি যদি নিশ্চিত করতে চান যে আপনার ইনটেন্টটি শুধুমাত্র একটি টেক্সট মেসেজিং অ্যাপ দ্বারা পরিচালিত হবে, এবং অন্য কোনো ইমেল বা সোশ্যাল অ্যাপ দ্বারা নয়, তাহলে ACTION_SENDTO অ্যাকশনটি ব্যবহার করুন এবং নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী "smsto:" ডেটা স্কিমটি অন্তর্ভুক্ত করুন:

কোটলিন

fun composeMmsMessage(message: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SEND).apply {
        data = Uri.parse("smsto:")  // Only SMS apps respond to this.
        putExtra("sms_body", message)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setData(Uri.parse("smsto:"));  // Only SMS apps respond to this.
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:type="text/plain" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

দ্রষ্টব্য: আপনি যদি একটি SMS/MMS মেসেজিং অ্যাপ তৈরি করেন, তাহলে Android 4.4 এবং তার পরবর্তী সংস্করণগুলিতে ডিফল্ট SMS অ্যাপ হিসেবে উপলব্ধ হওয়ার জন্য আপনাকে অবশ্যই আরও কয়েকটি অতিরিক্ত অ্যাকশনের জন্য ইন্টেন্ট ফিল্টার প্রয়োগ করতে হবে। আরও তথ্যের জন্য, Telephony এর ডকুমেন্টেশন দেখুন।

ওয়েব ব্রাউজার

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

একটি ওয়েব ইউআরএল লোড করুন

গুগল ভয়েস অ্যাকশন

  • "open example.com"

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

পদক্ষেপ
ACTION_VIEW
ডেটা ইউআরআই স্কিম
http: <URL>
https: <URL>
MIME টাইপ
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"

উদাহরণ অভিপ্রায়:

কোটলিন

fun openWebPage(url: String) {
    val webpage: Uri = Uri.parse(url)
    val intent = Intent(Intent.ACTION_VIEW, webpage)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

জাভা

public void openWebPage(String url) {
    Uri webpage = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

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

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <!-- Include the host attribute if you want your app to respond
             only to URLs with your app's domain. -->
        <data android:scheme="http" android:host="www.example.com" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The BROWSABLE category is required to get links from web pages. -->
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

পরামর্শ: আপনার অ্যান্ড্রয়েড অ্যাপে যদি আপনার ওয়েবসাইটের মতো কার্যকারিতা থাকে, তবে আপনার ওয়েবসাইটের ইউআরএলগুলোর জন্য একটি ইন্টেন্ট ফিল্টার অন্তর্ভুক্ত করুন। তাহলে, ব্যবহারকারীদের কাছে আপনার অ্যাপটি ইনস্টল করা থাকলে, ইমেল বা অন্যান্য ওয়েব পেজ থেকে আপনার ওয়েবসাইটের লিঙ্কগুলো আপনার ওয়েব পেজের পরিবর্তে আপনার অ্যান্ড্রয়েড অ্যাপটি খুলবে। অ্যান্ড্রয়েড অ্যাপ লিঙ্ক পরিচালনা (Handling Android App Links) অংশে এ সম্পর্কে আরও জানুন।

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) থেকে, একটি জেনেরিক ওয়েব ইন্টেন্ট আপনার অ্যাপের কোনো অ্যাক্টিভিটিতে তখনই রিজলভ হয়, যখন আপনার অ্যাপটি সেই ওয়েব ইন্টেন্টে থাকা নির্দিষ্ট ডোমেইনের জন্য অনুমোদিত থাকে। যদি আপনার অ্যাপটি ডোমেইনটির জন্য অনুমোদিত না হয়, তবে ওয়েব ইন্টেন্টটি এর পরিবর্তে ব্যবহারকারীর ডিফল্ট ব্রাউজার অ্যাপে রিজলভ হয়।

অ্যান্ড্রয়েড ডিবাগ ব্রিজ দিয়ে ইনটেন্ট যাচাই করুন

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

  1. ডেভেলপমেন্টের জন্য একটি অ্যান্ড্রয়েড ডিভাইস সেট আপ করুন অথবা একটি ভার্চুয়াল ডিভাইস ব্যবহার করুন।
  2. আপনার অ্যাপের এমন একটি সংস্করণ ইনস্টল করুন যা আপনি যে ইন্টেন্টগুলো সমর্থন করতে চান তা পরিচালনা করতে পারে।
  3. Fire an intent using adb :
    adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
      -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
    

    উদাহরণস্বরূপ:

    adb shell am start -a android.intent.action.DIAL \
      -d tel:555-5555 -n org.example.MyApp/.MyActivity
    
  4. If you define the required intent filters, handle the intent.

For more information, see Issue shell commands .