قصد به شما امکان میدهد با توصیف کنشی که میخواهید انجام دهید، مثل «مشاهده نقشه» یا «گرفتن عکس»، در یک Intent شیء، فعالیتی را در برنامهای دیگر شروع کنید. این نوع هدف را هدف ضمنی مینامند زیرا مؤلفه برنامه را برای شروع مشخص نمیکند، بلکه کنش را مشخص میکند و دادههایی را برای انجام کنش ارائه میدهد.
وقتی با startActivity()
یا startActivityForResult() تماس میگیرید و هدف ضمنی را به آن منتقل میکنید، سیستم
هدف را به برنامهای که میتواند هدف را مدیریت کند تبدیل میکند و Activity مربوط به آن را شروع میکند. اگر بیشاز یک برنامه وجود داشته باشد که بتواند هدف را مدیریت کند، سیستم گفتگویی به کاربر ارائه میدهد تا برنامه موردنظر را برای استفاده انتخاب کند.
این صفحه چندین هدف ضمنی را که میتوانید برای انجام کنشهای رایج استفاده کنید شرح میدهد. این اهداف براساس نوع برنامهای که هدف را مدیریت میکند سازماندهی شدهاند. هر بخش همچنین نشان میدهد که چگونه میتوانید یک فیلتر هدف ایجاد کنید تا توانایی برنامه خود را برای انجام این کنش تبلیغ کنید.
احتیاط: اگر در دستگاه برنامهای وجود نداشته باشد که بتواند
هدف ضمنی دریافت کند، وقتی برنامه startActivity() را فرا میخواند، ازکار میافتد. برای اینکه ابتدا مطمئن شوید برنامهای برای دریافت هدف وجود دارد، resolveActivity() را در شیء Intent فراخوانی کنید. اگر نتیجه غیرتهی باشد، حداقل یک برنامه وجود دارد که میتواند هدف را مدیریت کند و فراخوانی startActivity() ایمن است. اگر نتیجه
تهی است، از هدف استفاده نکنید و درصورت امکان، ویژگیای را که هدف را فرا میخواند غیرفعال کنید.
اگر با نحوه ایجاد هدفها یا فیلترهای هدف آشنا نیستید، ابتدا هدفها و فیلترهای هدف را بخوانید.
برای آشنایی با نحوه راهاندازی هدفهای فهرستشده در این صفحه از میزبان توسعه خود، به بخش درستیسنجی هدفها با «پل اشکالزدایی Android» مراجعه کنید.
کنشهای گفتاری Google
Google Voice کنشها برخیاز هدفهای فهرستشده در این صفحه را در پاسخ به فرمانهای صوتی راهاندازی میکند. برای اطلاعات بیشتر، شروع کار با کنشهای صوتی سیستم را ببینید.
ساعت زنگدار
در زیر، کنشهای رایج برای برنامههای ساعت زنگدار، ازجمله اطلاعاتی که برای ایجاد فیلتر هدف برای تبلیغ توانایی برنامهتان در انجام هر کنش نیاز دارید، آورده شده است.
ایجاد زنگ ساعت
برای ایجاد زنگ ساعت جدید، از کنش ACTION_SET_ALARM
استفاده کنید و جزئیات زنگ ساعت مثل زمان و پیام را بااستفاده از موارد اضافی زیر مشخص کنید.
توجه: فقط ساعت، دقیقه، و افزونههای پیام در Android 2.3 (سطح API 9) و نسخههای پایینتر دردسترس است. افزودههای دیگر در نسخههای بالاتر پلاتفرم دردسترس هستند.
- کنش
ACTION_SET_ALARM- نشانی وب داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
-
EXTRA_HOUR- ساعت زنگ ساعت.
EXTRA_MINUTES- دقایق زنگ ساعت.
EXTRA_MESSAGE- پیام سفارشی برای شناسایی هشدار.
EXTRA_DAYSArrayListشامل هر روز هفته که این زنگ ساعت تکرار میشود. هر روز باید با عدد صحیح از کلاسCalendarاعلام شود، مثلاًMONDAY.برای زنگ ساعت یکباره، این مورد اضافی را مشخص نکنید.
EXTRA_RINGTONE- نشانی وب
content:که آهنگ زنگی را برای استفاده با زنگ ساعت مشخص میکند، یاVALUE_RINGTONE_SILENTبرای بدون آهنگ زنگ.برای استفاده از آهنگ زنگ پیشفرض، این مورد اضافی را مشخص نکنید.
EXTRA_VIBRATE- بولی که مشخص میکند آیا برای این زنگ ساعت لرزش ایجاد شود یا نه.
EXTRA_SKIP_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 استفاده کنید و جزئیات زمانسنج
مثل مدت زمان را بااستفاده از عناصر اضافی زیر مشخص کنید.
توجه: این هدف در Android 4.4 (سطح API 19) و بالاتر دردسترس است.
- کنش
ACTION_SET_TIMER- نشانی وب داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
-
EXTRA_LENGTH- طول زمانسنج برحسب ثانیه.
EXTRA_MESSAGE- پیامی سفارشی برای شناسایی زمانسنج.
EXTRA_SKIP_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
کنش استفاده کنید.
اگرچه برنامههای زیادی این هدف را فراخوانی نمیکنند، زیرا این هدف عمدتاً توسط برنامههای سیستم استفاده میشود، هر برنامهای که بهعنوان ساعت زنگدار عمل میکند میتواند این فیلتر هدف را پیادهسازی کند و با نمایش فهرست زنگهای فعلی پاسخ دهد.
توجه: این هدف در Android 4.4 (سطح API 19) و بالاتر دردسترس است.
- کنش
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 مشخص کنید.
سپس میتوانید جزئیات مختلف رویداد را بااستفاده از موارد اضافی زیر مشخص کنید.
- کنش
ACTION_INSERT- نشانی وب داده
Events.CONTENT_URI- نوع MIME
"vnd.android.cursor.dir/event"- Extras
-
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
اضافی مشخص کنید.
- کنش
ACTION_IMAGE_CAPTUREیا
ACTION_VIDEO_CAPTURE- طرحواره URI داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
-
EXTRA_OUTPUT- مکان نشانی وب که برنامه دوربین فایل عکس یا ویدیو را در آن ذخیره میکند (بهعنوان شیء
Uri).
وقتی برنامه دوربین باموفقیت تمرکز را به فعالیت شما برمیگرداند—بهعبارت دیگر، برنامه شما onActivityResult() تماس برگشتی را دریافت میکند—میتوانید به عکس یا ویدیو در نشانی وب یکپارچه (URI) که با مقدار EXTRA_OUTPUT مشخص کردهاید دسترسی داشته باشید.
توجه: وقتی از ACTION_IMAGE_CAPTURE
برای گرفتن عکس استفاده میکنید، دوربین ممکن است یک کپی کوچکشده یا ریزعکس از عکس را نیز در نتیجه Intent برگرداند که بهعنوان Bitmap در فیلد اضافی بهنام "data" ذخیره میشود.
هدف نمونه:
کاتلین
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 (سطح میانای برنامهسازی کاربردی ۳۱) یا بالاتر، به مثال هدف زیر مراجعه کنید.
هدف نمونه:
کاتلین
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 ورودی بررسی کند، سپس تصویر یا ویدیو ضبطشده را در مکان مشخصشده توسط آن اضافی ذخیره کند و setResult() را با Intent که شامل ریزعکس فشردهشده در اضافی بهنام "data" است فراخوانی کند.
برنامه دوربین را در حالت تصویر ثابت شروع کنید
برای باز کردن برنامه دوربین در حالت تصویر ثابت، از کنش INTENT_ACTION_STILL_IMAGE_CAMERA استفاده کنید.
- کنش
INTENT_ACTION_STILL_IMAGE_CAMERA- طرحواره URI داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
- هیچکدام
هدف نمونه:
کاتلین
private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
جاوا
public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
فیلتر هدف نمونه:
<activity ...> <intent-filter> <action android:name="android.media.action.STILL_IMAGE_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
برنامه دوربین را در حالت ویدیو شروع کنید
برای باز کردن برنامه دوربین در حالت ویدیو، از کنش INTENT_ACTION_VIDEO_CAMERA استفاده کنید.
- کنش
INTENT_ACTION_VIDEO_CAMERA- طرحواره URI داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
- هیچکدام
هدف نمونه:
کاتلین
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 تنظیم کنید.
نتیجه Intent که به onActivityResult() تماس برگشتی شما ارسال شده است حاوی
نشانی وب content: است که به مخاطب انتخابشده اشاره میکند. پاسخ به برنامه شما اجازه میدهد بهطور موقت بااستفاده از
میانای برنامهسازی کاربردی ارائهدهنده مخاطبین آن مخاطب را بخواند، حتی اگر
برنامه شما اجازه READ_CONTACTS را نداشته باشد.
نکته: اگر فقط به بخش خاصی از اطلاعات تماس نیاز دارید، مثلاً شماره تلفن یا نشانی ایمیل، به بخش بعدی درباره نحوه انتخاب دادههای تماس خاص مراجعه کنید.
- کنش
ACTION_PICK- طرحواره URI داده
- هیچکدام
- نوع 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. ... } }
برای کسب اطلاعات درباره نحوه بازیابی جزئیات تماس پساز داشتن نشانی وب تماس، بازیابی جزئیات برای مخاطب را بخوانید.
وقتی نشانی وب مخاطب را بااستفاده از این هدف بازیابی میکنید، معمولاً به اجازه
READ_CONTACTS
برای خواندن جزئیات پایه آن مخاطب، مثل نام نمایشی و
ستارهدار بودن مخاطب، نیاز ندارید. بااینحال، اگر میخواهید درباره مخاطبی خاص دادههای دقیقتری بخوانید—مثلاً شماره تلفن یا نشانی ایمیل او—به READ_CONTACTSاجازه نیاز دارید.
انتخاب دادههای مخاطب خاص
برای اینکه کاربر اطلاعات خاصی را از مخاطب انتخاب کند، مثلاً
شماره تلفن، نشانی ایمیل، یا نوع داده دیگر، از کنش
ACTION_PICK استفاده کنید و نوع MIME را به یکی
از انواع محتوای زیر، مثلاً
CommonDataKinds.Phone.CONTENT_TYPE برای دریافت شماره تلفن مخاطب، مشخص کنید.
توجه: در بسیاری از موارد، برنامه شما باید
READ_CONTACTS
اجازه مشاهده اطلاعات خاص درباره مخاطب موردنظر را داشته باشد.
اگر فقط یک نوع داده را از مخاطب بازیابی میکنید، این تکنیک با
CONTENT_TYPE از
ContactsContract.CommonDataKinds کلاس کارآمدتر از
استفاده از Contacts.CONTENT_TYPE است، همانطور که در بخش قبلی نشان داده شد. این نتیجه بدون نیاز به اجرای پُرسمان پیچیدهتر در ارائهدهنده مخاطبین، دسترسی مستقیم به دادههای موردنظرتان را برایتان فراهم میکند.
نتیجه Intent که به onActivityResult() تماس برگشتی شما ارسال شد حاوی
content: نشانی وب اشارهکننده به دادههای مخاطب انتخابشده است. پاسخ به برنامه شما اجازههای موقت میدهد تا دادههای مخاطب را بخواند، حتی اگر برنامه شما اجازه READ_CONTACTS را نداشته باشد.
- کنش
ACTION_PICK- طرحواره URI داده
- هیچکدام
- نوع MIME
-
CommonDataKinds.Phone.CONTENT_TYPE- از میان مخاطبین دارای شماره تلفن انتخاب کنید.
CommonDataKinds.Email.CONTENT_TYPE- از بین مخاطبین دارای نشانی ایمیل انتخاب کنید.
CommonDataKinds.StructuredPostal.CONTENT_TYPE- از میان مخاطبین دارای نشانی پستی انتخاب کنید.
یا یکی از مقادیر
CONTENT_TYPEدیگر درContactsContract.
هدف نمونه:
کاتلین
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: بهعنوان داده هدف مشخص کنید.
دو روش اصلی برای بازیابی اولیه نشانی وب مخاطب وجود دارد:
- از نشانی وب مخاطب برگشتدادهشده توسط کنش
ACTION_PICKنشاندادهشده در بخش قبلی استفاده کنید. این رویکرد به هیچ اجازه برنامهای نیاز ندارد. - دسترسی مستقیم به فهرست همه مخاطبین، همانطور که در واکشی فهرست مخاطبین توضیح داده شده است. این رویکرد به اجازه
READ_CONTACTSنیاز دارد.
- کنش
ACTION_VIEW- طرحواره URI داده
content:<URI>- نوع MIME
- هیچکدام. نوع از نشانی وب مخاطب استنباط میشود.
هدف نمونه:
کاتلین
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: نشانی وب
بهعنوان داده هدف مشخص کنید، و هرگونه اطلاعات مخاطب شناختهشده را در موارد اضافی مشخصشده توسط
ثابتها در ContactsContract.Intents.Insert اضافه کنید.
دو روش اصلی برای بازیابی اولیه نشانی وب مخاطب وجود دارد:
- از نشانی وب مخاطب برگشتدادهشده توسط کنش
ACTION_PICKنشاندادهشده در بخش قبلی استفاده کنید. این رویکرد به هیچ اجازه برنامهای نیاز ندارد. - دسترسی مستقیم به فهرست همه مخاطبین، همانطور که در واکشی فهرست مخاطبین توضیح داده شده است. این رویکرد به اجازه
READ_CONTACTSنیاز دارد.
- کنش
ACTION_EDIT- طرحواره URI داده
content:<URI>- نوع MIME
- نوع از نشانی وب مخاطب استنباط میشود.
- Extras
- یک یا چند مورد از موارد اضافی تعریفشده در
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- طرحواره URI داده
- هیچکدام
- نوع MIME
Contacts.CONTENT_TYPE- Extras
- یک یا چند مورد اضافی تعریفشده در
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(برای چند پیوست)- طرحواره URI داده
- هیچکدام
- نوع MIME
-
"text/plain""*/*"
- Extras
-
Intent.EXTRA_EMAIL- آرایه رشتهای از همه نشانیهای ایمیل گیرندگان «به».
Intent.EXTRA_CC- آرایه رشتهای از همه نشانیهای ایمیل گیرندگان «رونوشت».
Intent.EXTRA_BCC- آرایه رشتهای از همه نشانیهای ایمیل گیرندگان «رونوشت مخفی».
Intent.EXTRA_SUBJECT- رشتهای با موضوع ایمیل.
Intent.EXTRA_TEXT- رشتهای با متن ایمیل.
Intent.EXTRA_STREAM-
Uriکه به پیوست اشاره میکند. اگر از کنشACTION_SEND_MULTIPLEاستفاده میکنید، این بهجای آنArrayListحاوی چندین شیءUriاست.
هدف نمونه:
کاتلین
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() شما ارائه میشود شامل دادههایی با نشانی وب اشارهکننده به فایل است.
نشانی وب میتواند هر چیزی باشد، مثلاً نشانی وب http:، نشانی وب file:، یا نشانی وب content:
URI. بااینحال، اگر میخواهید فایلهای قابلانتخاب را به فایلهایی که فقط از ارائهدهنده محتوا (content: نشانی وب) دردسترس هستند و بهعنوان جاریسازی فایل با openFileDescriptor() دردسترس هستند محدود کنید،
دسته CATEGORY_OPENABLE را به هدف خود اضافه کنید.
در Android 4.3 (سطح میانای برنامه کاربردی ۱۸) و بالاتر،
با افزودن
EXTRA_ALLOW_MULTIPLE به هدف، که روی true تنظیم شده است،
میتوانید به کاربر اجازه دهید چندین فایل را انتخاب کند.
سپس میتوانید به هریک از فایلهای انتخابشده در ClipData
شیء برگشتی از getClipData() دسترسی داشته باشید.
- کنش
ACTION_GET_CONTENT- طرحواره URI داده
- هیچکدام
- نوع MIME
- نوع MIME مربوط به نوع فایلی که کاربر باید انتخاب کند.
- Extras
-
EXTRA_ALLOW_MULTIPLE- مقدار بولی که اعلام میکند آیا کاربر میتواند بیشاز یک فایل را بهطور همزمان انتخاب کند یا نه.
EXTRA_LOCAL_ONLY- بولی که اعلام میکند آیا فایل برگشتی باید مستقیماً از دستگاه دردسترس باشد یا اینکه باید از سرویس راه دور بارگیری شود.
- دسته (اختیاری)
-
CATEGORY_OPENABLE- برای برگرداندن فقط فایلهای «بازشدنی» که میتوانند بهعنوان جاریسازی فایل نشان داده شوند
با
openFileDescriptor().
مثال هدف برای دریافت عکس:
کاتلین
const val REQUEST_IMAGE_GET = 1 fun selectImage() { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") val fullPhotoUri: Uri = data.data // Do work with photo saved at fullPhotoUri. ... } }
جاوا
static final int REQUEST_IMAGE_GET = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelable("data"); Uri fullPhotoUri = data.getData(); // Do work with photo saved at fullPhotoUri. ... } }
فیلتر هدف نمونه برای برگرداندن عکس:
<activity ...> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The OPENABLE category declares that the returned file is accessible from a content provider that supportsOpenableColumnsandContentResolver.openFileDescriptor(). --> <category android:name="android.intent.category.OPENABLE" /> </intent-filter> </activity>
باز کردن نوع خاصی از فایل
بهجای بازیابی نسخه کپی از فایلی که باید به برنامهتان وارد کنید، بااستفاده از کنش ACTION_GET_CONTENT، وقتی در Android نسخه ۴.۴ یا بالاتر اجرا میکنید، میتوانید بهجای آن درخواست کنید فایلی که توسط برنامه دیگری مدیریت میشود بااستفاده از کنش ACTION_OPEN_DOCUMENT و مشخص کردن نوع MIME باز شود.
برای اینکه به کاربر اجازه دهید سند جدیدی ایجاد کند که برنامهتان بتواند در آن بنویسد، بهجای آن از کنش ACTION_CREATE_DOCUMENT استفاده کنید.
برای مثال، بهجای انتخاب از میان اسناد PDF موجود،
هدف ACTION_CREATE_DOCUMENT
به کاربران امکان میدهد انتخاب کنند که میخواهند سند جدید را کجا ایجاد کنند، مثلاً در برنامه دیگری که فضای ذخیرهسازی سند را مدیریت میکند. برنامه شما سپس مکان نشانی وب (URI) را که در آن میتواند سند جدید را بنویسد دریافت میکند.
درحالیکه هدف تحویلشده به روش onActivityResult()
از کنش ACTION_GET_CONTENT ممکن است
نشانی وب از هر نوعی را برگرداند، هدف نتیجه از ACTION_OPEN_DOCUMENT
و ACTION_CREATE_DOCUMENT همیشه فایل انتخابشده را بهعنوان نشانی وب content: که با DocumentsProvider پشتیبانی میشود مشخص میکند. میتوانید فایل را با openFileDescriptor() باز کنید و
جزئیات آن را بااستفاده از ستونهای DocumentsContract.Document پُرسمان کنید.
URI برگشتی به برنامه شما دسترسی خواندن بلندمدت به فایل میدهد، و احتمالاً دسترسی نوشتن نیز میدهد. کنش ACTION_OPEN_DOCUMENT بهویژه زمانی مفید است که بخواهید فایل موجودی را بدون اینکه نسخهای از آن در برنامهتان ایجاد کنید بخوانید
یا زمانی که بخواهید فایلی را در همان مکان باز و ویرایش کنید.
همچنین میتوانید با افزودن
EXTRA_ALLOW_MULTIPLE به هدف و تنظیم آن روی true، به کاربر اجازه دهید چندین فایل را انتخاب کند.
اگر کاربر فقط یک مورد را انتخاب کند، میتوانید آن مورد را از getData() بازیابی کنید.
اگر کاربر بیشاز یک مورد را انتخاب کند، getData() مقدار null برمیگرداند و درعوض باید هر مورد را از شیء ClipData
که توسط getClipData() برگردانده میشود بازیابی کنید.
توجه: هدف شما باید نوع MIME را مشخص کند و
باید دسته CATEGORY_OPENABLE را اعلام کند. درصورت لزوم، میتوانید با افزودن آرایهای از انواع MIME با
EXTRA_MIME_TYPES اضافی، بیشاز یک نوع MIME مشخص کنید—اگر این کار را انجام دهید، باید نوع MIME اصلی را در setType() به "*/*" تنظیم کنید.
- کنش
ACTION_OPEN_DOCUMENTیا
ACTION_CREATE_DOCUMENT- طرحواره URI داده
- هیچکدام
- نوع MIME
- نوع MIME مربوط به نوع فایلی که کاربر باید انتخاب کند.
- Extras
-
EXTRA_MIME_TYPES- آرایهای از انواع MIME مربوط به انواع فایلهایی که برنامه شما درخواست میکند. وقتی از این افزونه استفاده میکنید، باید نوع MIME اصلی را در
setType()روی"*/*"تنظیم کنید. 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 پاسخ دهند. درعوض، سیستم این هدف را دریافت میکند و همه فایلهای دردسترس از برنامههای مختلف را در یک واسط کاربر یکپارچه نمایش میدهد.
برای ارائه فایلهای برنامه در این رابط کاربری و اجازه دادن به برنامههای دیگر برای باز کردن آنها، باید
DocumentsProvider را پیادهسازی کنید و فیلتر قصدی برای
PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER") اضافه کنید، همانطور که در مثال زیر نشان داده شده است:
<provider ... android:grantUriPermissions="true" android:exported="true" android:permission="android.permission.MANAGE_DOCUMENTS"> <intent-filter> <action android:name="android.content.action.DOCUMENTS_PROVIDER" /> </intent-filter> </provider>
برای کسب اطلاعات بیشتر درباره اینکه چگونه فایلهای مدیریتشده توسط برنامهتان را از برنامههای دیگر باز کنید، باز کردن فایلها بااستفاده از چارچوب دسترسی به فضای ذخیرهسازی را بخوانید.
کنشهای محلی
درخواست خودرو یک کنش محلی رایج است. بااستفاده از اطلاعات بخش زیر، فیلتر هدفی ایجاد کنید تا توانایی برنامهتان را برای انجام این کنش تبلیغ کنید.
درخواست تاکسی تلفنی
برای تماس با تاکسی، از
ACTION_RESERVE_TAXI_RESERVATION
کنش استفاده کنید.
توجه: برنامهها باید قبلاز تکمیل این کنش، از کاربر تأییدیه بخواهند.
- کنش
ACTION_RESERVE_TAXI_RESERVATION- نشانی وب داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
- هیچکدام
هدف نمونه:
کاتلین
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باید کدبندی شوند. برای مثال، رشته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 استفاده کنید و
مکان نشانی وب فایل را در دادههای هدف مشخص کنید.
- کنش
ACTION_VIEW- طرحواره URI داده
-
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- طرحواره URI داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
-
MediaStore.EXTRA_MEDIA_FOCUS(الزامی)-
حالت جستجو را نشان میدهد: اینکه کاربر بهدنبال هنرمند، آلبوم، آهنگ، یا فهرست پخش خاصی است یا نه. بیشتر حالتهای جستجو به لوازم جانبی اضافی نیاز دارند. برای مثال، اگر کاربر به گوش دادن به آهنگ خاصی علاقهمند باشد، ممکن است هدف سه مورد اضافی داشته باشد: عنوان آهنگ، هنرمند، و آلبوم. این هدف از حالتهای جستجوی زیر برای هر مقدار
EXTRA_MEDIA_FOCUSپشتیبانی میکند:همه -
"vnd.android.cursor.item/*"-
هر نوع موسیقی پخش شود. برنامه دریافتکننده براساس یک انتخاب هوشمند، مانند آخرین فهرست پخشی که کاربر گوش داده است، موسیقی پخش میکند.
اضافههای دیگر:
-
QUERY(الزامی): رشتهای خالی. این مورد اضافی همیشه برای سازگاری با نسخه قدیمی ارائه میشود. برنامههای موجود که از حالتهای جستجو اطلاعی ندارند میتوانند این هدف را بهعنوان جستجوی بدون ساختار پردازش کنند.
-
بدون ساختار -
"vnd.android.cursor.item/*"-
آهنگ، آلبوم، یا ژانر خاصی را از پُرسمان جستجوی بدون ساختار پخش کنید. برنامهها میتوانند وقتی نمیتوانند نوع محتوایی را که کاربر میخواهد گوش دهد شناسایی کنند، با این حالت جستجو هدف تولید کنند. درصورت امکان، از حالتهای جستجوی دقیقتر استفاده کنید.
امکانات اضافه دیگر:
-
QUERY(الزامی): رشتهای که شامل هر ترکیبی از هنرمند، آلبوم، نام آهنگ، یا ژانر باشد.
-
-
موسیقی از ژانر خاصی پخش کن.
اضافههای دیگر:
-
"android.intent.extra.genre"(الزامی) - ژانر. -
QUERY(الزامی): ژانر. این مورد اضافی همیشه برای سازگاری با نسخه قدیمی ارائه میشود. برنامههای موجود که با حالتهای جستجو آشنا نیستند میتوانند این هدف را بهعنوان جستجوی بدون ساختار پردازش کنند.
-
هنرمند -
Audio.Artists.ENTRY_CONTENT_TYPE-
پخش موسیقی از هنرمندی خاص.
اضافههای دیگر:
-
EXTRA_MEDIA_ARTIST(الزامی): هنرمند. -
"android.intent.extra.genre": ژانر. -
QUERY(الزامی): رشتهای که شامل هر ترکیبی از هنرمند یا ژانر باشد. این مورد اضافی همیشه برای سازگاری با نسخه قدیمی ارائه میشود. برنامههای موجود که از حالتهای جستجو اطلاعی ندارند میتوانند این هدف را بهعنوان جستجوی غیرساختاری پردازش کنند.
-
آلبوم -
Audio.Albums.ENTRY_CONTENT_TYPE-
موسیقی از آلبومی خاص پخش کن.
اضافههای دیگر:
-
EXTRA_MEDIA_ALBUM(الزامی): آلبوم. -
EXTRA_MEDIA_ARTIST: هنرمند. -
"android.intent.extra.genre": ژانر. -
QUERY(الزامی): رشتهای که شامل هر ترکیبی از آلبوم یا هنرمند است. این مورد اضافی همیشه برای سازگاری با نسخه قدیمی ارائه میشود. برنامههای موجود که با حالتهای جستجو آشنا نیستند میتوانند این هدف را بهعنوان جستجوی بدون ساختار پردازش کنند.
-
آهنگ -
"vnd.android.cursor.item/audio"-
آهنگ خاصی را پخش کنید.
اضافههای دیگر:
-
EXTRA_MEDIA_ALBUM: آلبوم. -
EXTRA_MEDIA_ARTIST: هنرمند. -
"android.intent.extra.genre": ژانر. -
EXTRA_MEDIA_TITLE(الزامی): نام آهنگ. -
QUERY(الزامی): رشتهای که شامل هر ترکیبی از آلبوم، هنرمند، ژانر، یا عنوان باشد. این مورد اضافی همیشه برای سازگاری با نسخه قدیمی ارائه میشود. برنامههای موجود که از حالتهای جستجو اطلاعی ندارند میتوانند این هدف را بهعنوان جستجوی بدون ساختار پردازش کنند.
-
فهرست پخش -
Audio.Playlists.ENTRY_CONTENT_TYPE-
فهرست پخش خاصی یا فهرست پخشی را که با معیارهای مشخصشده در افزونههای اضافی مطابقت دارد پخش کنید.
امکانات اضافه دیگر:
-
EXTRA_MEDIA_ALBUM: آلبوم. -
EXTRA_MEDIA_ARTIST: هنرمند. -
"android.intent.extra.genre": ژانر. -
"android.intent.extra.playlist": فهرست پخش. -
EXTRA_MEDIA_TITLE: نام آهنگی که فهرست پخش براساس آن ساخته شده است. -
QUERY(الزامی): رشتهای که شامل هر ترکیبی از آلبوم، هنرمند، ژانر، فهرست پخش، یا عنوان باشد. این مورد اضافی همیشه برای سازگاری با نسخه قدیمی ارائه میشود. برنامههای موجود که از حالتهای جستجو اطلاعی ندارند میتوانند این هدف را بهعنوان جستجوی بدون ساختار پردازش کنند.
-
هدف نمونه:
اگر کاربر بخواهد به موسیقی هنرمند خاصی گوش دهد، برنامه جستجو ممکن است قصد زیر را تولید کند:
کاتلین
fun playSearchArtist(artist: String) { val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply { putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist) putExtra(SearchManager.QUERY, artist) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
جاوا
public void playSearchArtist(String artist) { Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH); intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist); intent.putExtra(SearchManager.QUERY, artist); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
فیلتر هدف نمونه:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
هنگام مدیریت این هدف در فعالیتتان، مقدار
EXTRA_MEDIA_FOCUS اضافی در ورودی
Intent را بررسی کنید تا حالت جستجو را تعیین کنید. پساز اینکه فعالیت شما حالت جستجو را شناسایی کرد، مقادیر لوازم جانبی اضافی را برای آن حالت جستجوی خاص بخوانید.
با این اطلاعات، برنامه شما میتواند جستجو را در موجودی خود انجام دهد تا محتوایی را که با پُرسمان جستجو مطابقت دارد پخش کند. این مورد در مثال زیر نشان داده شده است.
کاتلین
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 - "*/*"
- Extras
-
-
EXTRA_NAME - رشتهای که عنوان یا موضوع یادداشت را نشان میدهد.
-
EXTRA_TEXT - رشتهای که نوشتار یادداشت را نشان میدهد.
-
- کنش
-
ACTION_DIAL- برنامه شمارهگیر یا تلفن را باز میکند.ACTION_CALL- تماس تلفنی برقرار میکند (به اجازهCALL_PHONEنیاز دارد)
- طرحواره URI داده
-
tel:<phone-number>voicemail:<phone-number>
- نوع MIME
- هیچکدام
tel:2125551212tel:(212) 555 1212- کنش
-
"com.google.android.gms.actions.SEARCH_ACTION"- از پُرسمانهای جستجو در «کنشهای Google Voice» پشتیبانی میکند.
- Extras
-
QUERY- رشتهای که حاوی پُرسمان جستجو است.
- کنش
ACTION_WEB_SEARCH- طرحواره URI داده
- هیچکدام
- نوع MIME
- هیچکدام
- Extras
-
SearchManager.QUERY- رشته جستجو.
- کنش
-
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGS
برای دیدن صفحههای تنظیمات اضافی که دردسترس است، به مستندات
Settingsمراجعه کنید . - طرحواره URI داده
- هیچکدام
- نوع MIME
- هیچکدام
- کنش
ACTION_SENDTOیا
ACTION_SENDیا
ACTION_SEND_MULTIPLE- طرحواره URI داده
-
sms:<phone_number>smsto:<phone_number>mms:<phone_number>mmsto:<phone_number>
همه این طرحها به یک روش مدیریت میشوند.
- نوع MIME
-
"text/plain""image/*""video/*"
- Extras
-
"subject"- رشتهای برای موضوع پیام (معمولاً فقط برای فراپیام).
"sms_body"- رشتهای برای پیامک.
EXTRA_STREAMUriکه به تصویر یا ویدیو موردنظر برای پیوست کردن اشاره میکند. اگر از کنشACTION_SEND_MULTIPLEاستفاده میکنید، این مورد اضافیArrayListازUriشیء است که به تصاویر یا ویدیوهای پیوستشده اشاره میکند.
- کنش
ACTION_VIEW- طرحواره URI داده
http:<URL>
https:<URL>- نوع MIME
-
"text/plain""text/html""application/xhtml+xml""application/vnd.wap.xhtml+xml"
- دستگاه Android را برای توسعه راهاندازی کنید یا از دستگاه مجازی استفاده کنید.
- نسخهای از برنامهتان را نصب کنید که از هدفهایی که میخواهید پشتیبانی کنید برآید.
- راهاندازی قصد بااستفاده از
adb:adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
برای مثال:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- اگر فیلترهای هدف موردنیاز را تعریف کنید، هدف را مدیریت کنید.
هدف نمونه:
کاتلین
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 استفاده کنید و شماره تلفن را بااستفاده از طرح نشانی وب زیر مشخص کنید. وقتی برنامه تلفن باز میشود، شماره تلفن را نمایش میدهد،
و کاربر باید روی دکمه تماس تکضرب بزند تا تماس تلفنی شروع شود.
برای برقراری مستقیم تماس تلفنی، از کنش ACTION_CALL استفاده کنید
و شماره تلفن را بااستفاده از طرح نشانی وب زیر مشخص کنید. وقتی برنامه تلفن باز میشود، تماس تلفنی شروع میشود. کاربر نیازی به ضربه زدن روی دکمه تماس ندارد.
کنش ACTION_CALL مستلزم این است که اجازه
CALL_PHONE را به فایل مانیفست خود اضافه کنید:
<uses-permission android:name="android.permission.CALL_PHONE" />
شماره تلفنهای معتبر شمارههایی هستند که در IETF RFC 3966 تعریف شدهاند. نمونههای معتبر شامل موارد زیر میشود:
شمارهگیر برنامه «تلفن» در عادیسازی طرحها، مانند شمارههای تلفن، خوب عمل میکند. بنابراین طرحی که شرح داده شده است در روش
Uri.parse() کاملاً الزامی نیست.
بااینحال، اگر طرحی را امتحان نکردهاید یا مطمئن نیستید که آیا میتوان آن را مدیریت کرد، بهجای آن از روش Uri.fromParts()
استفاده کنید.
هدف نمونه:
کاتلین
fun dialPhoneNumber(phoneNumber: String) { val intent = Intent(Intent.ACTION_DIAL).apply { data = Uri.parse("tel:$phoneNumber") } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
جاوا
public void dialPhoneNumber(String phoneNumber) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + phoneNumber)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
جستجو
در زیر کنشهای رایج برای برنامههای جستجو، ازجمله اطلاعاتی که برای ایجاد فیلتر هدف برای تبلیغ توانایی برنامهتان در انجام هر کنش نیاز دارید، آمده است.
جستجو بااستفاده از برنامهای خاص
برای پشتیبانی از جستجو در بافت برنامهتان، فیلتر هدفی را در برنامهتان با کنش SEARCH_ACTION اعلام کنید، همانطور که در مثال فیلتر هدف زیر نشان داده شده است.
توجه: استفاده از SEARCH_ACTION برای جستجوی برنامه را توصیه نمیکنیم.
درعوض،
GET_THING
کنش را پیادهسازی کنید تا از پشتیبانی داخلی «دستیار Google» برای جستجوی درونبرنامهای بهره ببرید. برای اطلاعات بیشتر،
به اسناد
کنشهای برنامه «دستیار Google» مراجعه کنید.
فیلتر هدف نمونه:
<activity android:name=".SearchActivity"> <intent-filter> <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
انجام جستجوی وب
برای شروع جستجوی وب، از کنش ACTION_WEB_SEARCH استفاده کنید
و رشته جستجو را در
SearchManager.QUERY اضافی مشخص کنید.
هدف نمونه:
کاتلین
fun searchWeb(query: String) { val intent = Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra(SearchManager.QUERY, query) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
جاوا
public void searchWeb(String query) { Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, query); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
تنظیمات
وقتی برنامهتان از کاربر میخواهد چیزی را تغییر دهد، برای باز کردن صفحهای در برنامه «تنظیمات سیستم»، از یکی از کنشهای هدف زیر استفاده کنید:
هدف نمونه:
کاتلین
fun openWifiSettings() { val intent = Intent(Settings.ACTION_WIFI_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
جاوا
public void openWifiSettings() { Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
پیامک زدن
نوشتن پیامک/فراپیام با پیوست کنشی رایج برای برنامههای پیامرسانی نوشتاری است. بااستفاده از اطلاعات بخش زیر، فیلتر هدفی ایجاد کنید تا توانایی برنامهتان را برای انجام این کنش تبلیغ کنید.
نوشتن پیامک/فراپیام با پیوست
برای شروع پیامک یا فراپیام، از یکی از کنشهای هدف زیر استفاده کنید و جزئیات پیام مثل شماره تلفن، موضوع، و متن پیام را بااستفاده از کلیدهای اضافی زیر مشخص کنید.
هدف نمونه:
کاتلین
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SENDTO).apply { type = HTTP.PLAIN_TEXT_TYPE putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
جاوا
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType(HTTP.PLAIN_TEXT_TYPE); intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
اگر میخواهید مطمئن شوید که هدف شما فقط توسط برنامه پیامک مدیریت میشود و نه برنامههای ایمیل یا اجتماعی دیگر، از کنش ACTION_SENDTO استفاده کنید و طرح داده "smsto:" را همانطور که در مثال زیر نشان داده شده است اضافه کنید:
کاتلین
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { data = Uri.parse("smsto:") // Only SMS apps respond to this. putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
جاوا
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setData(Uri.parse("smsto:")); // Only SMS apps respond to this. intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
فیلتر هدف نمونه:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="text/plain" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
توجه: اگر درحال توسعه برنامه پیامرسانی پیامک/فراپیام هستید، باید
فیلترهای هدف را برای چندین کنش اضافی پیادهسازی کنید تا بتوانید بهعنوان
برنامه پیامک پیشفرض در Android 4.4 و نسخههای بالاتر دردسترس باشید. برای کسب اطلاعات بیشتر، به مستندات
در Telephony مراجعه کنید.
مرورگر وب
بار کردن نشانی وب کنشی رایج برای برنامههای مرورگر وب است. بااستفاده از اطلاعات بخش زیر، فیلتر هدفی ایجاد کنید تا توانایی برنامهتان را برای انجام این کنش تبلیغ کنید.
بار کردن نشانی وب
برای باز کردن صفحه وب، از کنش ACTION_VIEW استفاده کنید
و نشانی وب را در دادههای هدف مشخص کنید.
هدف نمونه:
کاتلین
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 شما عملکردی مشابه وبسایتتان ارائه میدهد، فیلتر هدفی برای نشانیهای وبی که به وبسایتتان اشاره میکنند اضافه کنید. سپس، اگر کاربران برنامه شما را نصب کرده باشند، پیوندهای ایمیلها یا صفحههای وب دیگری که به وبسایت شما اشاره میکنند برنامه Android شما را بهجای صفحه وب شما باز میکنند. در مدیریت پیوندهای برنامه Android بیشتر بدانید.
از Android 12 (سطح API 31) به بعد، هدف وب عمومی فقط درصورتی به فعالیت در برنامه شما منتهی میشود که برنامه شما برای دامنه خاص موجود در آن هدف وب تأیید شده باشد. اگر برنامه شما برای دامنه تأیید نشده باشد، هدف وب بهجای آن به برنامه مرورگر پیشفرض کاربر هدایت میشود.
درستیسنجی کردن هدفها با Android Debug Bridge
برای درستیسنجی اینکه برنامهتان به هدفهایی که میخواهید پشتیبانی کنید پاسخ میدهد، میتوانید از ابزار
adb برای فعال کردن هدفهای خاص با انجام
کارهای زیر استفاده کنید:
برای اطلاعات بیشتر، به صدور فرمانهای پوسته مراجعه کنید.