इंटेंट की मदद से, किसी दूसरे ऐप्लिकेशन में कोई गतिविधि शुरू की जा सकती है. इसके लिए, आपको उस कार्रवाई के बारे में बताना होगा जो आपको करनी है. जैसे, Intent ऑब्जेक्ट में "मैप देखना" या "फ़ोटो लेना". इस तरह के इंटेंट को इंप्लिसिट इंटेंट कहा जाता है. इसकी वजह यह है कि इसमें ऐप्लिकेशन के कॉम्पोनेंट को शुरू करने के बारे में नहीं बताया जाता. इसके बजाय, इसमें कार्रवाई के बारे में बताया जाता है और कार्रवाई करने के लिए कुछ डेटा दिया जाता है.
startActivity() या startActivityForResult() को कॉल करने और उसे इंप्लिसिट इंटेंट पास करने पर, सिस्टम इंटेंट को ऐसे ऐप्लिकेशन के साथ रिज़ॉल्व करता है जो इंटेंट को हैंडल कर सकता है. साथ ही, उससे जुड़े Activity को शुरू करता है. अगर इंटेंट को हैंडल करने के लिए एक से ज़्यादा ऐप्लिकेशन मौजूद हैं, तो सिस्टम उपयोगकर्ता को एक डायलॉग बॉक्स दिखाता है. इसमें उपयोगकर्ता को यह चुनने का विकल्प मिलता है कि उसे कौनसा ऐप्लिकेशन इस्तेमाल करना है.
इस पेज पर, कई इंप्लिसिट इंटेंट के बारे में बताया गया है. इनका इस्तेमाल करके, सामान्य कार्रवाइयां की जा सकती हैं. इन इंटेंट को, इन्हें हैंडल करने वाले ऐप्लिकेशन के टाइप के हिसाब से व्यवस्थित किया गया है. हर सेक्शन में यह भी बताया गया है कि इंटेंट फ़िल्टर कैसे बनाया जा सकता है, ताकि आपके ऐप्लिकेशन की कार्रवाई करने की क्षमता का विज्ञापन किया जा सके.
चेतावनी: अगर डिवाइस पर ऐसा कोई ऐप्लिकेशन नहीं है जो इंप्लिसिट इंटेंट को रिसीव कर सके, तो startActivity() को कॉल करने पर ऐप्लिकेशन क्रैश हो जाता है. सबसे पहले यह पुष्टि करें कि इंटेंट पाने के लिए कोई ऐप्लिकेशन मौजूद है. इसके लिए, अपने Intent ऑब्जेक्ट पर resolveActivity() को कॉल करें. अगर नतीजा शून्य नहीं है, तो इसका मतलब है कि कम से कम एक ऐप्लिकेशन ऐसा है जो इंटेंट को हैंडल कर सकता है. साथ ही, startActivity() को कॉल करना सुरक्षित है. अगर नतीजा शून्य है, तो इंटेंट का इस्तेमाल न करें. साथ ही, अगर हो सके, तो इंटेंट को ट्रिगर करने वाली सुविधा को बंद कर दें.
अगर आपको इंटेंट या इंटेंट फ़िल्टर बनाने का तरीका नहीं पता है, तो पहले इंटेंट और इंटेंट फ़िल्टर के बारे में पढ़ें.
अपने डेवलपमेंट होस्ट से इस पेज पर मौजूद इंटेंट को ट्रिगर करने का तरीका जानने के लिए, Android डीबग ब्रिज की मदद से इंटेंट की पुष्टि करना सेक्शन देखें.
Google Voice Actions
Google Voice Actions, बोले गए निर्देशों के जवाब में इस पेज पर दिए गए कुछ इंटेंट को ट्रिगर करता है. ज़्यादा जानकारी के लिए, सिस्टम के बोलकर फ़ोन का इस्तेमाल करने की सुविधा का इस्तेमाल शुरू करना लेख पढ़ें.
अलार्म घड़ी
अलार्म क्लॉक ऐप्लिकेशन के लिए, यहां कुछ सामान्य कार्रवाइयां दी गई हैं. इनमें वह जानकारी भी शामिल है जो आपको अपने ऐप्लिकेशन की हर कार्रवाई को विज्ञापन के तौर पर दिखाने के लिए, इंटेंट फ़िल्टर बनाने के लिए ज़रूरी है.
अलार्म सेट करना
नया अलार्म सेट करने के लिए, ACTION_SET_ALARM कार्रवाई का इस्तेमाल करें. साथ ही, यहां दी गई अतिरिक्त जानकारी का इस्तेमाल करके, अलार्म का समय और मैसेज जैसी जानकारी दें.
ध्यान दें: Android 2.3 (एपीआई लेवल 9) और इससे पहले के वर्शन में, सिर्फ़ घंटे, मिनट, और मैसेज के अतिरिक्त फ़ील्ड उपलब्ध होते हैं. अन्य सुविधाएं, प्लैटफ़ॉर्म के नए वर्शन में उपलब्ध हैं.
- कार्रवाई
ACTION_SET_ALARM- डेटा यूआरआई
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
-
EXTRA_HOUR- अलार्म का घंटा.
EXTRA_MINUTES- अलार्म के लिए मिनट.
EXTRA_MESSAGE- अलार्म की पहचान करने के लिए कस्टम मैसेज.
EXTRA_DAYS- एक
ArrayListजिसमें हफ़्ते के हर दिन की जानकारी शामिल है, जिस दिन यह अलार्म दोहराया जाता है. हर दिन कोCalendarक्लास के पूर्णांक के साथ एलान किया जाना चाहिए, जैसे किMONDAY.एक बार बजने वाले अलार्म के लिए, यह एक्स्ट्रा तय न करें.
EXTRA_RINGTONE- अलार्म के साथ इस्तेमाल की जाने वाली रिंगटोन के बारे में बताने वाला
content:यूआरआई या रिंगटोन न होने परVALUE_RINGTONE_SILENT.डिफ़ॉल्ट रिंगटोन का इस्तेमाल करने के लिए, यह अतिरिक्त जानकारी न दें.
EXTRA_VIBRATE- यह एक बूलियन वैल्यू है, जिससे तय होता है कि इस अलार्म के लिए वाइब्रेशन की सुविधा चालू करनी है या नहीं.
EXTRA_SKIP_UI- यह एक बूलियन वैल्यू है. इससे यह तय होता है कि अलार्म सेट करते समय, जवाब देने वाले ऐप्लिकेशन को अपना यूज़र इंटरफ़ेस (यूआई) स्किप करना चाहिए या नहीं. अगर यह वैल्यू true है, तो ऐप्लिकेशन को पुष्टि करने वाले किसी भी यूज़र इंटरफ़ेस (यूआई) को बायपास करना होगा और तय किया गया अलार्म सेट करना होगा.
इंटेंट का उदाहरण:
Kotlin
fun createAlarm(message: String, hour: Int, minutes: Int) { val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_HOUR, hour) putExtra(AlarmClock.EXTRA_MINUTES, minutes) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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 (एपीआई लेवल 19) और इसके बाद के वर्शन में उपलब्ध है.
- कार्रवाई
ACTION_SET_TIMER- डेटा यूआरआई
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
-
EXTRA_LENGTH- टाइमर की अवधि सेकंड में.
EXTRA_MESSAGE- टाइमर की पहचान करने के लिए कस्टम मैसेज.
EXTRA_SKIP_UI- यह एक बूलियन वैल्यू है. इससे यह तय होता है कि टाइमर सेट करते समय, जवाब देने वाले ऐप्लिकेशन को अपना यूज़र इंटरफ़ेस (यूआई) स्किप करना चाहिए या नहीं. अगर यह वैल्यू true पर सेट है, तो ऐप्लिकेशन को पुष्टि करने वाले किसी भी यूज़र इंटरफ़ेस (यूआई) को बायपास करना होगा और तय किया गया टाइमर शुरू करना होगा.
इंटेंट का उदाहरण:
Kotlin
fun startTimer(message: String, seconds: Int) { val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_LENGTH, seconds) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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 (एपीआई लेवल 19) और इसके बाद के वर्शन में उपलब्ध है.
- कार्रवाई
ACTION_SHOW_ALARMS- डेटा यूआरआई
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
इंटेंट फ़िल्टर का उदाहरण:
<activity ...> <intent-filter> <action android:name="android.intent.action.SHOW_ALARMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Calendar
कैलेंडर ऐप्लिकेशन के लिए, इवेंट जोड़ना एक सामान्य कार्रवाई है. इंटेंट फ़िल्टर बनाएं, ताकि आपके ऐप्लिकेशन की इस कार्रवाई को करने की क्षमता का विज्ञापन किया जा सके. इसके लिए, यहां दिए गए सेक्शन में मौजूद जानकारी का इस्तेमाल करें.
कैलेंडर इवेंट जोड़ना
उपयोगकर्ता के कैलेंडर में नया इवेंट जोड़ने के लिए, ACTION_INSERT कार्रवाई का इस्तेमाल करें और Events.CONTENT_URI का इस्तेमाल करके डेटा यूआरआई तय करें.
इसके बाद, यहां दिए गए अतिरिक्त पैरामीटर का इस्तेमाल करके, इवेंट की अलग-अलग जानकारी दी जा सकती है.
- कार्रवाई
ACTION_INSERT- डेटा यूआरआई
Events.CONTENT_URI- एमआईएमई टाइप
"vnd.android.cursor.dir/event"- अतिरिक्त सुविधाएं
-
EXTRA_EVENT_ALL_DAY- बूलियन वैल्यू, जिससे पता चलता है कि यह पूरे दिन का इवेंट है या नहीं.
EXTRA_EVENT_BEGIN_TIME- इवेंट शुरू होने का समय (Epoch के बाद के मिलीसेकंड).
EXTRA_EVENT_END_TIME- इवेंट खत्म होने का समय (epoch के बाद के मिलीसेकंड).
TITLE- इवेंट का नाम.
DESCRIPTION- इवेंट की जानकारी.
EVENT_LOCATION- इवेंट की जगह.
EXTRA_EMAIL- ईमेल पतों की कॉमा लगाकर अलग की गई सूची, जिसमें न्योता पाने वाले लोगों की जानकारी होती है.
CalendarContract.EventsColumnsक्लास में तय किए गए कॉन्सटैंट का इस्तेमाल करके, इवेंट की ज़्यादा जानकारी दी जा सकती है.
इंटेंट का उदाहरण:
Kotlin
fun addEvent(title: String, location: String, begin: Long, end: Long) { val intent = Intent(Intent.ACTION_INSERT).apply { data = Events.CONTENT_URI putExtra(Events.TITLE, title) putExtra(Events.EVENT_LOCATION, location) putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
-
EXTRA_OUTPUT- यूआरआई की वह जगह जहां कैमरा ऐप्लिकेशन, फ़ोटो या वीडियो फ़ाइल को
Uriऑब्जेक्ट के तौर पर सेव करता है.
जब कैमरा ऐप्लिकेशन आपकी गतिविधि पर फ़ोकस वापस कर देता है, यानी कि आपके ऐप्लिकेशन को onActivityResult() कॉलबैक मिलता है, तब EXTRA_OUTPUT वैल्यू के साथ बताए गए यूआरआई पर फ़ोटो या वीडियो को ऐक्सेस किया जा सकता है.
ध्यान दें: फ़ोटो कैप्चर करने के लिए ACTION_IMAGE_CAPTURE का इस्तेमाल करने पर, कैमरा नतीजे Intent में फ़ोटो की कम रिज़ॉल्यूशन वाली कॉपी या थंबनेल भी दिखा सकता है. इसे "data" नाम के अतिरिक्त फ़ील्ड में Bitmap के तौर पर सेव किया जाता है.
इंटेंट का उदाहरण:
Kotlin
const val REQUEST_IMAGE_CAPTURE = 1 val locationForPhotos: Uri = ... fun capturePhoto(targetFilename: String) { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply { putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)) } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") // Do other work with full size photo saved in locationForPhotos. ... } }
Java
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 (एपीआई लेवल 31) या इसके बाद के वर्शन पर काम करते समय ऐसा करने के लिए, इंटेंट का यह उदाहरण देखें.
इंटेंट का उदाहरण:
Kotlin
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // Display error state to the user. } } </section></div>
फ़ोटो कैप्चर करने के लिए, इस इंटेंट का इस्तेमाल करने के बारे में ज़्यादा जानकारी पाने के लिए, फ़ोटो लें या वीडियो बनाएं लेख पढ़ें. इसमें, आउटपुट की जगह के लिए सही Uri बनाने का तरीका भी बताया गया है.
इंटेंट फ़िल्टर का उदाहरण:
<activity ...> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
इस इंटेंट को हैंडल करते समय, अपनी गतिविधि को आने वाले Intent में EXTRA_OUTPUT अतिरिक्त के लिए जांचने दें. इसके बाद, कैप्चर की गई इमेज या वीडियो को उस अतिरिक्त जगह पर सेव करें और setResult() को Intent के साथ कॉल करें. इसमें "data" नाम के अतिरिक्त में कंप्रेस किया गया थंबनेल शामिल होता है.
स्टिल इमेज मोड में कैमरा ऐप्लिकेशन चालू करना
कैमरा ऐप्लिकेशन को स्टिल इमेज मोड में खोलने के लिए, INTENT_ACTION_STILL_IMAGE_CAMERA कार्रवाई का इस्तेमाल करें.
- कार्रवाई
INTENT_ACTION_STILL_IMAGE_CAMERA- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
- कोई नहीं
इंटेंट का उदाहरण:
Kotlin
private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
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- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
- कोई नहीं
इंटेंट का उदाहरण:
Kotlin
fun capturePhoto() { val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA) if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } }
Java
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 कार्रवाई का इस्तेमाल करें. साथ ही, एमआईएमई टाइप को Contacts.CONTENT_TYPE के तौर पर तय करें.
आपके onActivityResult() कॉलबैक को डिलीवर किए गए नतीजे Intent में, चुने गए संपर्क पर ले जाने वाला content: यूआरआई शामिल होता है. जवाब में आपके ऐप्लिकेशन को संपर्क सूची एपीआई का इस्तेमाल करके, उस संपर्क की जानकारी को पढ़ने की कुछ समय के लिए अनुमति मिलती है. भले ही, आपके ऐप्लिकेशन में READ_CONTACTS अनुमति शामिल न हो.
सलाह: अगर आपको संपर्क की सिर्फ़ किसी खास जानकारी का ऐक्सेस चाहिए, जैसे कि फ़ोन नंबर या ईमेल पता, तो संपर्क का खास डेटा चुनने के तरीके के बारे में जानने के लिए, अगला सेक्शन देखें.
- कार्रवाई
ACTION_PICK- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
Contacts.CONTENT_TYPE
इंटेंट का उदाहरण:
Kotlin
const val REQUEST_SELECT_CONTACT = 1 fun selectContact() { val intent = Intent(Intent.ACTION_PICK).apply { type = ContactsContract.Contacts.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { val contactUri: Uri = data.data // Do something with the selected contact at contactUri. //... } }
Java
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 ऐक्शन का इस्तेमाल करें. साथ ही, एमआईएमई टाइप को इनमें से किसी एक कॉन्टेंट टाइप के तौर पर तय करें. जैसे, संपर्क का फ़ोन नंबर पाने के लिए CommonDataKinds.Phone.CONTENT_TYPE.
ध्यान दें: कई मामलों में, आपके ऐप्लिकेशन के पास किसी संपर्क की खास जानकारी देखने के लिए,
READ_CONTACTS
की अनुमति होनी चाहिए.
अगर आपको किसी संपर्क से सिर्फ़ एक तरह का डेटा वापस पाना है, तो ContactsContract.CommonDataKinds क्लास के CONTENT_TYPE का इस्तेमाल करने की यह तकनीक, पिछले सेक्शन में दिखाए गए Contacts.CONTENT_TYPE का इस्तेमाल करने से ज़्यादा असरदार है. नतीजे से आपको अपनी पसंद के डेटा का ऐक्सेस सीधे तौर पर मिलता है. इसके लिए, आपको संपर्क सूची से कोई मुश्किल क्वेरी करने की ज़रूरत नहीं पड़ती.
आपके onActivityResult() कॉलबैक को डिलीवर किए गए नतीजे Intent में, चुने गए संपर्क डेटा पर ले जाने वाला content: यूआरआई शामिल होता है. जवाब में आपके ऐप्लिकेशन को उस संपर्क का डेटा पढ़ने की कुछ समय के लिए अनुमति मिलती है. भले ही, आपके ऐप्लिकेशन में READ_CONTACTS की अनुमति न हो.
- कार्रवाई
ACTION_PICK- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
-
CommonDataKinds.Phone.CONTENT_TYPE- फ़ोन नंबर वाले संपर्कों में से चुनें.
CommonDataKinds.Email.CONTENT_TYPE- ईमेल पते वाले संपर्कों में से चुनें.
CommonDataKinds.StructuredPostal.CONTENT_TYPE- डाक पते वाले संपर्कों में से चुनें.
या
ContactsContractसे कम कीमत वाली कई अन्यCONTENT_TYPEवैल्यू में से कोई एक.
इंटेंट का उदाहरण:
Kotlin
const val REQUEST_SELECT_PHONE_NUMBER = 1 fun selectContact() { // Start an activity for the user to pick a phone number from contacts. val intent = Intent(Intent.ACTION_PICK).apply { type = CommonDataKinds.Phone.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) { // Get the URI and query the content provider for the phone number. val contactUri: Uri = data.data val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER) contentResolver.query(contactUri, projection, null, null, null).use { cursor -> // If the cursor returned is valid, get the phone number. if (cursor.moveToFirst()) { val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER) val number = cursor.getString(numberIndex) // Do something with the phone number. ... } } } }
Java
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- डेटा यूआरआई स्कीम
content:<URI>- एमआईएमई टाइप
- कोई नहीं. संपर्क के यूआरआई से, टाइप का पता चलता है.
इंटेंट का उदाहरण:
Kotlin
fun viewContact(contactUri: Uri) { val intent = Intent(Intent.ACTION_VIEW, contactUri) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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- डेटा यूआरआई स्कीम
content:<URI>- एमआईएमई टाइप
- संपर्क के यूआरआई से, टाइप का पता चलता है.
- अतिरिक्त सुविधाएं
ContactsContract.Intents.Insertमें तय किए गए एक या उससे ज़्यादा अतिरिक्त फ़ील्ड, ताकि आप संपर्क जानकारी के फ़ील्ड भर सकें.
इंटेंट का उदाहरण:
Kotlin
fun editContact(contactUri: Uri, email: String) { val intent = Intent(Intent.ACTION_EDIT).apply { data = contactUri putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void editContact(Uri contactUri, String email) { Intent intent = new Intent(Intent.ACTION_EDIT); intent.setData(contactUri); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
किसी संपर्क में बदलाव करने के तरीके के बारे में ज़्यादा जानने के लिए, इंटेंट का इस्तेमाल करके संपर्कों में बदलाव करना लेख पढ़ें.
कोई संपर्क जोड़ना
कोई नया संपर्क जोड़ने के लिए, ACTION_INSERT कार्रवाई का इस्तेमाल करें. साथ ही, एमआईएमई टाइप के तौर पर Contacts.CONTENT_TYPE तय करें. इसके अलावा, ContactsContract.Intents.Insert में कॉन्स्टेंट के ज़रिए तय की गई अतिरिक्त जानकारी में, संपर्क की कोई भी जानकारी शामिल करें.
- कार्रवाई
ACTION_INSERT- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
Contacts.CONTENT_TYPE- अतिरिक्त सुविधाएं
ContactsContract.Intents.Insertमें तय किए गए एक या उससे ज़्यादा अतिरिक्त एट्रिब्यूट.
इंटेंट का उदाहरण:
Kotlin
fun insertContact(name: String, email: String) { val intent = Intent(Intent.ACTION_INSERT).apply { type = ContactsContract.Contacts.CONTENT_TYPE putExtra(ContactsContract.Intents.Insert.NAME, name) putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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(एक से ज़्यादा अटैचमेंट होने पर)- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
-
"text/plain""*/*"
- अतिरिक्त सुविधाएं
-
Intent.EXTRA_EMAIL- "इन्हें भेजें" फ़ील्ड में मौजूद, ईमेल पाने वाले सभी लोगों के ईमेल पतों का स्ट्रिंग अरे.
Intent.EXTRA_CC- "कॉपी" फ़ील्ड में मौजूद, ईमेल पाने वाले सभी लोगों के ईमेल पतों का स्ट्रिंग अरे.
Intent.EXTRA_BCC- "गुप्त कॉपी" में शामिल सभी ईमेल पतों का स्ट्रिंग अरे.
Intent.EXTRA_SUBJECT- ईमेल के विषय वाली स्ट्रिंग.
Intent.EXTRA_TEXT- ईमेल के मुख्य हिस्से वाली स्ट्रिंग.
Intent.EXTRA_STREAM- अटैचमेंट पर ले जाने वाला
Uri.ACTION_SEND_MULTIPLEकार्रवाई का इस्तेमाल करने पर, यह एकArrayListहोता है, जिसमें कईUriऑब्जेक्ट होते हैं.
इंटेंट का उदाहरण:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { type = "*/*" putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeEmail(String[] addresses, String subject, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
अगर आपको यह पक्का करना है कि आपके इंटेंट को सिर्फ़ कोई ईमेल ऐप्लिकेशन हैंडल करे, न कि कोई टेक्स्ट मैसेजिंग या सोशल मीडिया ऐप्लिकेशन, तो ACTION_SENDTO ऐक्शन का इस्तेमाल करें. साथ ही, "mailto:" डेटा स्कीम को शामिल करें, जैसा कि इस उदाहरण में दिखाया गया है:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String) { val intent = Intent(Intent.ACTION_SENDTO).apply { data = Uri.parse("mailto:") // Only email apps handle this. putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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 कार्रवाई का इस्तेमाल करें और अपनी पसंद का एमआईएमई टाइप बताएं. जैसे, कोई दस्तावेज़ या फ़ोटो. साथ ही, अपने ऐप्लिकेशन का रेफ़रंस दें. आपके ऐप्लिकेशन को वापस किया गया फ़ाइल रेफ़रंस, आपकी गतिविधि की मौजूदा लाइफ़साइकल के लिए कुछ समय के लिए होता है. इसलिए, अगर आपको इसे बाद में ऐक्सेस करना है, तो आपको एक ऐसी कॉपी इंपोर्ट करनी होगी जिसे बाद में पढ़ा जा सके.
इस इंटेंट की मदद से, उपयोगकर्ता इस प्रोसेस के दौरान एक नई फ़ाइल भी बना सकता है. उदाहरण के लिए, उपयोगकर्ता किसी मौजूदा फ़ोटो को चुनने के बजाय, कैमरे से नई फ़ोटो ले सकता है.
आपके onActivityResult() तरीके को डिलीवर किए गए नतीजे के इंटेंट में, यूआरआई वाला डेटा शामिल होता है. यह यूआरआई, फ़ाइल पर ले जाता है.
यूआरआई कुछ भी हो सकता है, जैसे कि http: यूआरआई, file: यूआरआई या content: यूआरआई. हालांकि, अगर आपको चुनी जा सकने वाली फ़ाइलों को सिर्फ़ उन फ़ाइलों तक सीमित करना है जिन्हें कॉन्टेंट देने वाले (content: यूआरआई) से ऐक्सेस किया जा सकता है और जो openFileDescriptor() के साथ फ़ाइल स्ट्रीम के तौर पर उपलब्ध हैं, तो अपने इंटेंट में CATEGORY_OPENABLE कैटगरी जोड़ें.
Android 4.3 (एपीआई लेवल 18) और इसके बाद के वर्शन पर, उपयोगकर्ता को एक से ज़्यादा फ़ाइलें चुनने की अनुमति भी दी जा सकती है. इसके लिए, इंटेंट में EXTRA_ALLOW_MULTIPLE जोड़ें और उसे true पर सेट करें.
इसके बाद, getClipData() से मिले ClipData ऑब्जेक्ट में, चुनी गई हर फ़ाइल को ऐक्सेस किया जा सकता है.
- कार्रवाई
ACTION_GET_CONTENT- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- फ़ाइल टाइप के हिसाब से एमआईएमई टाइप, जिसे उपयोगकर्ता को चुनना होगा.
- अतिरिक्त सुविधाएं
-
EXTRA_ALLOW_MULTIPLE- यह एक बूलियन है, जो यह बताता है कि उपयोगकर्ता एक बार में एक से ज़्यादा फ़ाइलें चुन सकता है या नहीं.
EXTRA_LOCAL_ONLY- यह बूलियन वैल्यू बताती है कि लौटाई गई फ़ाइल, सीधे डिवाइस पर उपलब्ध होनी चाहिए या नहीं. इसके लिए, किसी रिमोट सेवा से डाउनलोड करने की ज़रूरत नहीं होती.
- कैटगरी (ज़रूरी नहीं)
-
CATEGORY_OPENABLE- सिर्फ़ "खोली जा सकने वाली" फ़ाइलें दिखाने के लिए, जिन्हें
openFileDescriptor()के साथ फ़ाइल स्ट्रीम के तौर पर दिखाया जा सकता है.
फ़ोटो लेने के लिए इंटेंट का उदाहरण:
Kotlin
const val REQUEST_IMAGE_GET = 1 fun selectImage() { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") val fullPhotoUri: Uri = data.data // Do work with photo saved at fullPhotoUri. ... } }
Java
static final int REQUEST_IMAGE_GET = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelable("data"); Uri fullPhotoUri = data.getData(); // Do work with photo saved at fullPhotoUri. ... } }
फ़ोटो दिखाने के लिए, इंटेंट फ़िल्टर का उदाहरण:
<activity ...> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The OPENABLE category declares that the returned file is accessible from a content provider that supportsOpenableColumnsandContentResolver.openFileDescriptor(). --> <category android:name="android.intent.category.OPENABLE" /> </intent-filter> </activity>
किसी खास तरह की फ़ाइल खोलना
Android 4.4 या इसके बाद के वर्शन पर, ACTION_GET_CONTENT ऐक्शन का इस्तेमाल करके, किसी ऐसी फ़ाइल की कॉपी को वापस पाने के बजाय जिसे आपको अपने ऐप्लिकेशन में इंपोर्ट करना है, ACTION_OPEN_DOCUMENT ऐक्शन का इस्तेमाल करके और एमआईएमई टाइप तय करके, किसी दूसरे ऐप्लिकेशन से मैनेज की जा रही फ़ाइल को खोलने का अनुरोध किया जा सकता है.
अगर आपको उपयोगकर्ता को एक नया दस्तावेज़ बनाने की अनुमति देनी है, ताकि आपका ऐप्लिकेशन उसमें लिख सके, तो ACTION_CREATE_DOCUMENT ऐक्शन का इस्तेमाल करें.
उदाहरण के लिए, मौजूदा PDF दस्तावेज़ों में से चुनने के बजाय, ACTION_CREATE_DOCUMENT इंटेंट की मदद से उपयोगकर्ता यह चुन सकते हैं कि उन्हें नया दस्तावेज़ कहां बनाना है. जैसे, दस्तावेज़ के स्टोरेज को मैनेज करने वाले किसी दूसरे ऐप्लिकेशन में. इसके बाद, आपके ऐप्लिकेशन को यूआरआई की वह जगह मिलती है जहां वह नया दस्तावेज़ लिख सकता है.
ACTION_GET_CONTENT कार्रवाई से आपके onActivityResult() तरीके को डिलीवर किया गया इंटेंट, किसी भी तरह का यूआरआई दिखा सकता है. हालांकि, ACTION_OPEN_DOCUMENT और ACTION_CREATE_DOCUMENT से मिलने वाला नतीजा इंटेंट, चुनी गई फ़ाइल को हमेशा content: यूआरआई के तौर पर दिखाता है. यह यूआरआई, DocumentsProvider से बैकअप किया जाता है. openFileDescriptor() की मदद से फ़ाइल को खोला जा सकता है. साथ ही, DocumentsContract.Document के कॉलम का इस्तेमाल करके, इसकी जानकारी के बारे में क्वेरी की जा सकती है.
वापस किया गया यूआरआई, आपके ऐप्लिकेशन को लंबे समय तक फ़ाइल को पढ़ने का ऐक्सेस देता है. साथ ही, इसमें लिखने का ऐक्सेस भी हो सकता है. ACTION_OPEN_DOCUMENT कार्रवाई खास तौर पर तब काम आती है, जब आपको अपने ऐप्लिकेशन में कॉपी बनाए बिना किसी मौजूदा फ़ाइल को पढ़ना हो या किसी फ़ाइल को खोलकर उसमें बदलाव करना हो.
उपयोगकर्ता को एक से ज़्यादा फ़ाइलें चुनने की अनुमति भी दी जा सकती है. इसके लिए, इंटेंट में EXTRA_ALLOW_MULTIPLE जोड़ें और उसे true पर सेट करें.
अगर उपयोगकर्ता सिर्फ़ एक आइटम चुनता है, तो getData() से आइटम की जानकारी हासिल की जा सकती है.
अगर उपयोगकर्ता एक से ज़्यादा आइटम चुनता है, तो getData() शून्य दिखाता है. इसके बजाय, आपको getClipData() से दिखाए गए ClipData ऑब्जेक्ट से हर आइटम को वापस लाना होगा.
ध्यान दें: आपके इंटेंट में एमआईएमई टाइप की जानकारी देना ज़रूरी है. साथ ही, CATEGORY_OPENABLE कैटगरी का एलान करना ज़रूरी है. अगर ज़रूरी हो, तो EXTRA_MIME_TYPES एक्स्ट्रा के साथ एमआईएमई टाइप का कलेक्शन जोड़कर, एक से ज़्यादा एमआईएमई टाइप तय किए जा सकते हैं. ऐसा करने पर, आपको setType() में मुख्य एमआईएमई टाइप को "*/*" पर सेट करना होगा.
- कार्रवाई
ACTION_OPEN_DOCUMENTया
ACTION_CREATE_DOCUMENT- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- फ़ाइल टाइप के हिसाब से एमआईएमई टाइप, जिसे उपयोगकर्ता को चुनना होगा.
- अतिरिक्त सुविधाएं
-
EXTRA_MIME_TYPES- एमआईएमई टाइप का एक कलेक्शन, जो उन फ़ाइलों के टाइप से जुड़ा होता है जिनके लिए आपका ऐप्लिकेशन अनुरोध कर रहा है. इस एक्स्ट्रा का इस्तेमाल करने पर, आपको
setType()में प्राइमरी एमआईएमई टाइप को"*/*"पर सेट करना होगा. EXTRA_ALLOW_MULTIPLE- यह एक बूलियन है, जो यह बताता है कि उपयोगकर्ता एक बार में एक से ज़्यादा फ़ाइलें चुन सकता है या नहीं.
EXTRA_TITLE- इसका इस्तेमाल
ACTION_CREATE_DOCUMENTके साथ करके, शुरुआती फ़ाइल नाम तय किया जा सकता है. EXTRA_LOCAL_ONLY- यह बूलियन वैल्यू बताती है कि लौटाई गई फ़ाइल, सीधे डिवाइस पर उपलब्ध होनी चाहिए या नहीं. इसके लिए, किसी रिमोट सेवा से डाउनलोड करने की ज़रूरत नहीं होती.
- कैटगरी
-
CATEGORY_OPENABLE- सिर्फ़ "खोली जा सकने वाली" फ़ाइलें दिखाने के लिए, जिन्हें
openFileDescriptor()के साथ फ़ाइल स्ट्रीम के तौर पर दिखाया जा सकता है.
फ़ोटो लेने के लिए इंटेंट का उदाहरण:
Kotlin
const val REQUEST_IMAGE_OPEN = 1 fun selectImage2() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { type = "image/*" addCategory(Intent.CATEGORY_OPENABLE) } // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) { val fullPhotoUri: Uri = data.data // Do work with full size photo saved at fullPhotoUri. ... } }
Java
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- डेटा यूआरआई
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
- कोई नहीं
इंटेंट का उदाहरण:
Kotlin
fun callCar() { val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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- डेटा यूआरआई स्कीम
-
geo:latitude,longitude- दिए गए देशांतर और अक्षांश पर मैप दिखाएं.
उदाहरण:
"geo:47.6,-122.3" geo:latitude,longitude?z=zoom- मैप को दिए गए देशांतर और अक्षांश पर, ज़ूम करने के किसी लेवल पर दिखाएं. ज़ूम करने का लेवल 1 होने पर, पूरी पृथ्वी दिखती है. यह दिए गए lat,lng पर केंद्रित होती है. ज़ूम करने का सबसे ज़्यादा (सबसे नज़दीक) लेवल 23 है.
उदाहरण:
"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के साथ कोड में बदला जाता है या प्लस के निशान (+) से बदला जाता है.
- एमआईएमई टाइप
- कोई नहीं
इंटेंट का उदाहरण:
Kotlin
fun showMap(geoLocation: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = geoLocation } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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- डेटा यूआरआई स्कीम
-
file:<URI>content:<URI>http:<URL>
- एमआईएमई टाइप
-
"audio/*""application/ogg""application/x-ogg""application/itunes"- या कोई अन्य अनुमति जिसकी आपके ऐप्लिकेशन को ज़रूरत है.
इंटेंट का उदाहरण:
Kotlin
fun playMedia(file: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = file } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
-
MediaStore.EXTRA_MEDIA_FOCUS(ज़रूरी)-
इससे खोज मोड के बारे में पता चलता है: उपयोगकर्ता किसी कलाकार, एल्बम, गाने या प्लेलिस्ट को खोज रहा है या नहीं. खोज के ज़्यादातर मोड में, अतिरिक्त सुविधाएं मिलती हैं. उदाहरण के लिए, अगर उपयोगकर्ता को कोई खास गाना सुनना है, तो इंटेंट में तीन अतिरिक्त चीज़ें हो सकती हैं: गाने का टाइटल, कलाकार, और एल्बम. यह इंटेंट,
EXTRA_MEDIA_FOCUSकी हर वैल्यू के लिए, खोज के इन मोड के साथ काम करता है:कोई भी -
"vnd.android.cursor.item/*"-
कोई भी संगीत चलाएं. जिस ऐप्लिकेशन पर संगीत चलाया जा रहा है वह स्मार्ट तरीके से संगीत चलाता है. जैसे, उपयोगकर्ता ने पिछली बार जो प्लेलिस्ट सुनी थी.
अतिरिक्त सुविधाएं:
QUERY(ज़रूरी है): खाली स्ट्रिंग. यह अतिरिक्त जानकारी, पुराने सिस्टम के साथ काम करने की सुविधा के लिए हमेशा दी जाती है. ऐसे मौजूदा ऐप्लिकेशन जो खोज मोड के बारे में नहीं जानते, वे इस इंटेंट को अनस्ट्रक्चर्ड खोज के तौर पर प्रोसेस कर सकते हैं.
अनस्ट्रक्चर्ड -
"vnd.android.cursor.item/*"-
बिना स्ट्रक्चर वाली सर्च क्वेरी से कोई गाना, एल्बम या शैली चलाना. जब ऐप्लिकेशन यह नहीं पहचान पाते कि उपयोगकर्ता को किस तरह का कॉन्टेंट सुनना है, तो वे इस सर्च मोड की मदद से इंटेंट जनरेट कर सकते हैं. जब भी संभव हो, ज़्यादा सटीक खोज मोड का इस्तेमाल करें.
अतिरिक्त सुविधाएं:
QUERY(ज़रूरी है): ऐसी स्ट्रिंग जिसमें कलाकार, एल्बम, गाने का नाम या शैली का कोई भी कॉम्बिनेशन शामिल हो.
Genre -
Audio.Genres.ENTRY_CONTENT_TYPE-
किसी खास शैली का संगीत चलाओ.
अतिरिक्त सुविधाएं:
"android.intent.extra.genre"(ज़रूरी है) - शैली.QUERY(ज़रूरी है): शैली. यह अतिरिक्त जानकारी हमेशा पुराने सिस्टम के साथ काम करने की सुविधा के लिए दी जाती है. ऐसे मौजूदा ऐप्लिकेशन जो खोज मोड के बारे में नहीं जानते वे इस इंटेंट को अनस्ट्रक्चर्ड खोज के तौर पर प्रोसेस कर सकते हैं.
कलाकार -
Audio.Artists.ENTRY_CONTENT_TYPE-
किसी कलाकार का संगीत चलाओ.
अतिरिक्त सुविधाएं:
EXTRA_MEDIA_ARTIST(ज़रूरी है): कलाकार."android.intent.extra.genre": शैली.QUERY(ज़रूरी है): ऐसी स्ट्रिंग जिसमें कलाकार या शैली का कोई भी कॉम्बिनेशन शामिल हो. यह अतिरिक्त जानकारी, पुराने सिस्टम के साथ काम करने की सुविधा के लिए हमेशा दी जाती है. ऐसे मौजूदा ऐप्लिकेशन जो खोज मोड के बारे में नहीं जानते, वे इस इंटेंट को अनस्ट्रक्चर्ड खोज के तौर पर प्रोसेस कर सकते हैं.
एल्बम -
Audio.Albums.ENTRY_CONTENT_TYPE-
किसी खास एल्बम का संगीत चलाओ.
अतिरिक्त सुविधाएं:
EXTRA_MEDIA_ALBUM(ज़रूरी है): एल्बम.EXTRA_MEDIA_ARTIST: कलाकार."android.intent.extra.genre": शैली.QUERY(ज़रूरी है): ऐसी स्ट्रिंग जिसमें एल्बम या कलाकार का कोई भी कॉम्बिनेशन शामिल हो. यह अतिरिक्त जानकारी हमेशा पुराने सिस्टम के साथ काम करने की सुविधा के लिए दी जाती है. ऐसे मौजूदा ऐप्लिकेशन जो खोज के मोड के बारे में नहीं जानते वे इस इंटेंट को अनस्ट्रक्चर्ड खोज के तौर पर प्रोसेस कर सकते हैं.
गाना -
"vnd.android.cursor.item/audio"-
कोई गाना चलाना.
अतिरिक्त सुविधाएं:
EXTRA_MEDIA_ALBUM: एल्बम.EXTRA_MEDIA_ARTIST: कलाकार."android.intent.extra.genre": शैली.EXTRA_MEDIA_TITLE(ज़रूरी है): गाने का नाम.QUERY(ज़रूरी है): ऐसी स्ट्रिंग जिसमें एल्बम, कलाकार, शैली या टाइटल का कोई भी कॉम्बिनेशन शामिल हो. यह अतिरिक्त जानकारी हमेशा पुराने सिस्टम के साथ काम करने की सुविधा के लिए दी जाती है. ऐसे मौजूदा ऐप्लिकेशन जो खोज मोड के बारे में नहीं जानते वे इस इंटेंट को अनस्ट्रक्चर्ड खोज के तौर पर प्रोसेस कर सकते हैं.
प्लेलिस्ट -
Audio.Playlists.ENTRY_CONTENT_TYPE-
कोई खास प्लेलिस्ट या ऐसी प्लेलिस्ट चलाएं जो अतिरिक्त सुविधाओं के हिसाब से तय की गई कुछ शर्तों को पूरा करती हो.
अतिरिक्त सुविधाएं:
EXTRA_MEDIA_ALBUM: एल्बम.EXTRA_MEDIA_ARTIST: कलाकार."android.intent.extra.genre": शैली."android.intent.extra.playlist": प्लेलिस्ट.EXTRA_MEDIA_TITLE: उस गाने का नाम जिस पर प्लेलिस्ट आधारित है.QUERY(ज़रूरी है): ऐसी स्ट्रिंग जिसमें एल्बम, कलाकार, शैली, प्लेलिस्ट या टाइटल का कोई भी कॉम्बिनेशन शामिल हो. यह अतिरिक्त जानकारी, पुराने सिस्टम के साथ काम करने की सुविधा के लिए हमेशा दी जाती है. ऐसे मौजूदा ऐप्लिकेशन जो खोज मोड के बारे में नहीं जानते, वे इस इंटेंट को अनस्ट्रक्चर्ड खोज के तौर पर प्रोसेस कर सकते हैं.
इंटेंट का उदाहरण:
अगर उपयोगकर्ता को किसी खास कलाकार का संगीत सुनना है, तो खोज के लिए इस्तेमाल होने वाला ऐप्लिकेशन यह इंटेंट जनरेट कर सकता है:
Kotlin
fun playSearchArtist(artist: String) { val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply { putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist) putExtra(SearchManager.QUERY, artist) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playSearchArtist(String artist) { Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH); intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist); intent.putExtra(SearchManager.QUERY, artist); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
इंटेंट फ़िल्टर का उदाहरण:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
अपनी गतिविधि में इस इंटेंट को हैंडल करते समय, खोज मोड तय करने के लिए, इनकमिंग Intent में EXTRA_MEDIA_FOCUS एक्स्ट्रा की वैल्यू देखें. जब आपकी गतिविधि, खोज मोड की पहचान कर ले, तो उस खोज मोड के लिए अतिरिक्त वैल्यू पढ़ें.
इस जानकारी की मदद से, आपका ऐप्लिकेशन अपनी इन्वेंट्री में खोज कर सकता है, ताकि सर्च क्वेरी से मैच करने वाला कॉन्टेंट चलाया जा सके. इसे यहां दिए गए उदाहरण में दिखाया गया है.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS) val query: String? = intent.getStringExtra(SearchManager.QUERY) // Some of these extras might not be available depending on the search mode. val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM) val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST) val genre: String? = intent.getStringExtra("android.intent.extra.genre") val playlist: String? = intent.getStringExtra("android.intent.extra.playlist") val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE) // Determine the search mode and use the corresponding extras. when { mediaFocus == null -> { // 'Unstructured' search mode (backward compatible) playUnstructuredSearch(query) } mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> { if (query?.isNotEmpty() == true) { // 'Unstructured' search mode. playUnstructuredSearch(query) } else { // 'Any' search mode. playResumeLastPlaylist() } } mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> { // 'Genre' search mode. playGenre(genre) } mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Artist' search mode. playArtist(artist, genre) } mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> { // 'Album' search mode. playAlbum(album, artist) } mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> { // 'Song' search mode. playSong(album, artist, genre, title) } mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title) } } } }
Java
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 - डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
-
PLAIN_TEXT_TYPE - "*/*"
- अतिरिक्त सुविधाएं
-
-
EXTRA_NAME - नोट के टाइटल या विषय के बारे में बताने वाली स्ट्रिंग.
-
EXTRA_TEXT - नोट के टेक्स्ट के बारे में बताने वाली स्ट्रिंग.
-
- कार्रवाई
-
ACTION_DIAL- इससे डायलर या फ़ोन ऐप्लिकेशन खुलता है.ACTION_CALL- फ़ोन कॉल करता है (इसके लिए,CALL_PHONEअनुमति ज़रूरी है)
- डेटा यूआरआई स्कीम
-
tel:<phone-number>voicemail:<phone-number>
- एमआईएमई टाइप
- कोई नहीं
tel:2125551212tel:(212) 555 1212- कार्रवाई
-
"com.google.android.gms.actions.SEARCH_ACTION"- Google Voice Actions से की गई सर्च क्वेरी के साथ काम करता है.
- अतिरिक्त सुविधाएं
-
QUERY- सर्च क्वेरी वाली स्ट्रिंग.
- कार्रवाई
ACTION_WEB_SEARCH- डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- अतिरिक्त सुविधाएं
-
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दस्तावेज़ देखें . - डेटा यूआरआई स्कीम
- कोई नहीं
- एमआईएमई टाइप
- कोई नहीं
- कार्रवाई
ACTION_SENDTOया
ACTION_SENDया
ACTION_SEND_MULTIPLE- डेटा यूआरआई स्कीम
-
sms:<phone_number>smsto:<phone_number>mms:<phone_number>mmsto:<phone_number>
इन सभी स्कीम को एक ही तरह से मैनेज किया जाता है.
- एमआईएमई टाइप
-
"text/plain""image/*""video/*"
- अतिरिक्त सुविधाएं
-
"subject"- मैसेज के विषय के लिए स्ट्रिंग (आम तौर पर, सिर्फ़ एमएमएस के लिए).
"sms_body"- मैसेज के लिए स्ट्रिंग.
EXTRA_STREAM- अटैच की जाने वाली इमेज या वीडियो पर ले जाने वाला
Uri.ACTION_SEND_MULTIPLEकार्रवाई का इस्तेमाल करने पर, यह अतिरिक्त जानकारीUriऑब्जेक्ट काArrayListहोती है. यह जानकारी, अटैच की जाने वाली इमेज या वीडियो पर ले जाती है.
- कार्रवाई
ACTION_VIEW- डेटा यूआरआई स्कीम
http:<URL>
https:<URL>- एमआईएमई टाइप
-
"text/plain""text/html""application/xhtml+xml""application/vnd.wap.xhtml+xml"
- डेवलपमेंट के लिए, Android डिवाइस सेट अप करें या वर्चुअल डिवाइस का इस्तेमाल करें.
- अपने ऐप्लिकेशन का ऐसा वर्शन इंस्टॉल करें जो उन इंटेंट को हैंडल करता हो जिन्हें आपको सपोर्ट करना है.
adbका इस्तेमाल करके इंटेंट ट्रिगर करें:adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
उदाहरण के लिए:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- अगर आपने ज़रूरी इंटेंट फ़िल्टर तय किए हैं, तो इंटेंट को हैंडल करें.
इंटेंट का उदाहरण:
Kotlin
fun createNote(subject: String, text: String) { val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply { putExtra(NoteIntents.EXTRA_NAME, subject) putExtra(NoteIntents.EXTRA_TEXT, text) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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() तरीके का इस्तेमाल करें.
इंटेंट का उदाहरण:
Kotlin
fun dialPhoneNumber(phoneNumber: String) { val intent = Intent(Intent.ACTION_DIAL).apply { data = Uri.parse("tel:$phoneNumber") } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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 Assistant की पहले से मौजूद सुविधा का फ़ायदा लिया जा सके. ज़्यादा जानकारी के लिए, Google Assistant के
ऐप्लिकेशन ऐक्शन से जुड़ा दस्तावेज़ देखें.
इंटेंट फ़िल्टर का उदाहरण:
<activity android:name=".SearchActivity"> <intent-filter> <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
वेब खोज करें
वेब खोज शुरू करने के लिए, ACTION_WEB_SEARCH कार्रवाई का इस्तेमाल करें और SearchManager.QUERY अतिरिक्त में खोज स्ट्रिंग की जानकारी दें.
इंटेंट का उदाहरण:
Kotlin
fun searchWeb(query: String) { val intent = Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra(SearchManager.QUERY, query) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void searchWeb(String query) { Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, query); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
सेटिंग
जब आपके ऐप्लिकेशन को उपयोगकर्ता से कुछ बदलने की ज़रूरत हो, तो सिस्टम सेटिंग ऐप्लिकेशन में स्क्रीन खोलने के लिए, इनमें से किसी एक इंटेंट ऐक्शन का इस्तेमाल करें:
इंटेंट का उदाहरण:
Kotlin
fun openWifiSettings() { val intent = Intent(Settings.ACTION_WIFI_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void openWifiSettings() { Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
लिखित मेसेज सेवा
टेक्स्ट मैसेजिंग ऐप्लिकेशन के लिए, अटैचमेंट के साथ एसएमएस/एमएमएस मैसेज लिखना एक सामान्य कार्रवाई है. इंटेंट फ़िल्टर बनाएं, ताकि आपके ऐप्लिकेशन की इस कार्रवाई को करने की क्षमता का विज्ञापन किया जा सके. इसके लिए, यहां दिए गए सेक्शन में मौजूद जानकारी का इस्तेमाल करें.
अटैचमेंट के साथ एसएमएस/मल्टीमीडिया मैसेज (एमएमएस) लिखें
एसएमएस या मल्टीमीडिया मैसेज (एमएमएस) भेजने के लिए, इनमें से किसी एक इंटेंट ऐक्शन का इस्तेमाल करें. साथ ही, यहां दी गई अतिरिक्त कुंजियों का इस्तेमाल करके, मैसेज की जानकारी दें. जैसे, फ़ोन नंबर, विषय, और मैसेज का मुख्य हिस्सा.
इंटेंट का उदाहरण:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SENDTO).apply { type = HTTP.PLAIN_TEXT_TYPE putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType(HTTP.PLAIN_TEXT_TYPE); intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
अगर आपको यह पक्का करना है कि आपके इंटेंट को सिर्फ़ मैसेजिंग ऐप्लिकेशन हैंडल करे, न कि ईमेल या सोशल मीडिया ऐप्लिकेशन, तो ACTION_SENDTO ऐक्शन का इस्तेमाल करें. साथ ही, "smsto:" डेटा स्कीम को शामिल करें, जैसा कि इस उदाहरण में दिखाया गया है:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { data = Uri.parse("smsto:") // Only SMS apps respond to this. putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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 कार्रवाई का इस्तेमाल करें और इंटेंट डेटा में वेब यूआरएल डालें.
इंटेंट का उदाहरण:
Kotlin
fun openWebPage(url: String) { val webpage: Uri = Uri.parse(url) val intent = Intent(Intent.ACTION_VIEW, webpage) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
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 (एपीआई लेवल 31) से, वेब इंटेंट आपके ऐप्लिकेशन में किसी गतिविधि को सिर्फ़ तब ट्रिगर करता है, जब आपके ऐप्लिकेशन को उस वेब इंटेंट में मौजूद डोमेन के लिए मंज़ूरी मिली हो. अगर आपके ऐप्लिकेशन को डोमेन के लिए मंज़ूरी नहीं मिली है, तो वेब इंटेंट, उपयोगकर्ता के डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन पर ले जाता है.
Android डीबग ब्रिज की मदद से इंटेंट की पुष्टि करना
यह पुष्टि करने के लिए कि आपका ऐप्लिकेशन उन इंटेंट का जवाब देता है जिन्हें आपको सपोर्ट करना है, adb टूल का इस्तेमाल करके, खास इंटेंट को ट्रिगर किया जा सकता है. इसके लिए, यह तरीका अपनाएं:
ज़्यादा जानकारी के लिए, शेल कमांड जारी करना लेख पढ़ें.