स्टैंडर्ड व्यू का इस्तेमाल करने वाले ऐप्लिकेशन, खास कॉन्फ़िगरेशन के बिना ही अपने-आप भरने की सुविधा वाले फ़्रेमवर्क के साथ काम करते हैं. आपके पास यह ऑप्टिमाइज़ करने का विकल्प भी होता है कि आपका ऐप्लिकेशन फ़्रेमवर्क के साथ कैसे काम करता है.
अपने-आप भरने की सुविधा के लिए एनवायरमेंट सेट अप करना
इस सेक्शन में, आपके ऐप्लिकेशन के लिए बुनियादी जानकारी अपने-आप भरने की सुविधा सेट अप करने का तरीका बताया गया है.
पासवर्ड अपने-आप भरने की सुविधा कॉन्फ़िगर करना
आपके डिवाइस पर ऑटोमैटिक भरने की सुविधा कॉन्फ़िगर होनी चाहिए, ताकि आपका ऐप्लिकेशन ऑटोमैटिक भरने की सुविधा का इस्तेमाल कर सके. Android 8.0 (एपीआई लेवल 26) और इसके बाद के वर्शन पर काम करने वाले ज़्यादातर फ़ोन और टैबलेट में, जानकारी अपने-आप भरने की सुविधा होती है. हालांकि, हमारा सुझाव है कि ऐप्लिकेशन की टेस्टिंग करते समय, टेस्टिंग के लिए उपलब्ध सेवा का इस्तेमाल करें. जैसे, Android के ऑटोफ़िल फ़्रेमवर्क के सैंपल में मौजूद ऑटोफ़िल सेवा. एम्युलेटर का इस्तेमाल करते समय, ऑटोमैटिक जानकारी भरने की सेवा को साफ़ तौर पर सेट करें. ऐसा इसलिए, क्योंकि हो सकता है कि एम्युलेटर में डिफ़ॉल्ट सेवा न हो.
सैंपल ऐप्लिकेशन से, टेस्ट के लिए ऑटोमैटिक भरने की सेवा इंस्टॉल करने के बाद, इसे चालू करें. इसके लिए, सेटिंग > सिस्टम > भाषाएं और इनपुट > ऐडवांस > इनपुट में मदद करने वाली सुविधाएं > ऑटोमैटिक भरने की सेवा पर जाएं.
ऑटोमैटिक भरने की सुविधा की जांच करने के लिए, एम्युलेटर को कॉन्फ़िगर करने के बारे में ज़्यादा जानकारी के लिए, ऑटोमैटिक भरने की सुविधा के साथ अपने ऐप्लिकेशन की जांच करना लेख पढ़ें.
ऑटोमैटिक भरने की सुविधा के लिए सुझाव देना
ऑटोमैटिक भरने की सुविधा, अनुमानित अनुभव के आधार पर हर व्यू का टाइप तय करती है. हालांकि, अगर आपका ऐप्लिकेशन इन अनुमानों पर निर्भर करता है, तो ऐप्लिकेशन को अपडेट करने पर, अपने-आप भरने की सुविधा के काम करने के तरीके में अचानक बदलाव हो सकता है. यह पक्का करने के लिए कि अपने-आप भरने की सुविधा देने वाली सेवा, आपके ऐप्लिकेशन के फ़ॉर्म फ़ैक्टर की सही पहचान करे, अपने-आप भरने के लिए सुझाई गई जानकारी दें.
android:autofillHints
एट्रिब्यूट का इस्तेमाल करके, अपने-आप भरने वाले फ़ॉर्म के लिए हिंट सेट की जा सकती हैं. यहां दिए गए उदाहरण में, EditText
पर "password"
का हिंट सेट करने का तरीका बताया गया है:
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:autofillHints="password" />
setAutofillHints()
तरीके का इस्तेमाल करके, प्रोग्राम के हिसाब से भी हिंट सेट किए जा सकते हैं. इसका उदाहरण यहां दिया गया है:
Kotlin
val password = findViewById<EditText>(R.id.password) password.setAutofillHints(View.AUTOFILL_HINT_PASSWORD)
Java
EditText password = findViewById(R.id.password); password.setAutofillHints(View.AUTOFILL_HINT_PASSWORD);
पहले से तय किए गए हिंट कॉन्स्टेंट शामिल करें
अपने-आप जानकारी भरने की सुविधा देने वाला फ़्रेमवर्क, हिंट की पुष्टि नहीं करता. इन्हें अपने-आप जानकारी भरने की सुविधा देने वाली सेवा को बिना किसी बदलाव या पुष्टि के पास कर दिया जाता है. किसी भी वैल्यू का इस्तेमाल किया जा सकता है. हालांकि, View
और AndroidX HintConstants
क्लास में, आधिकारिक तौर पर काम करने वाले हिंट कॉन्स्टेंट की सूचियां होती हैं.
इन कॉन्स्टेंट के कॉम्बिनेशन का इस्तेमाल करके, सामान्य ऑटिफ़िल स्थितियों के लिए लेआउट बनाए जा सकते हैं:
खाते के क्रेडेंशियल
लॉगिन फ़ॉर्म पर, खाते के क्रेडेंशियल के बारे में जानकारी दी जा सकती है. जैसे,
AUTOFILL_HINT_USERNAME
और
AUTOFILL_HINT_PASSWORD
.
नया खाता बनाने या उपयोगकर्ता के नाम और पासवर्ड बदलने के लिए, AUTOFILL_HINT_NEW_USERNAME
और AUTOFILL_HINT_NEW_PASSWORD
का इस्तेमाल किया जा सकता है.
क्रेडिट कार्ड जानकारी
क्रेडिट कार्ड की जानकारी का अनुरोध करते समय, AUTOFILL_HINT_CREDIT_CARD_NUMBER
और AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE
जैसे हिंट का इस्तेमाल किया जा सकता है.
क्रेडिट कार्ड की समयसीमा खत्म होने की तारीखों के लिए, इनमें से कोई एक काम करें:
- अगर आपको सिर्फ़ एक व्यू में खत्म होने की तारीख दिखानी है, तो
AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE
का इस्तेमाल करें. - अगर आपको खत्म होने की तारीख के हर हिस्से के लिए अलग-अलग व्यू का इस्तेमाल करना है, तो हर व्यू के लिए
AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY
,AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH
, औरAUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR
का इस्तेमाल किया जा सकता है.
घर या ऑफ़िस का पता
घर या ऑफ़िस के पते के फ़ॉर्म फ़ील्ड के लिए, इस तरह के सुराग इस्तेमाल किए जा सकते हैं:
- एक ही व्यू में मौजूद पते के लिए,
AUTOFILL_HINT_POSTAL_ADDRESS
का इस्तेमाल करें. - किसी पते के अलग-अलग हिस्सों के लिए अलग-अलग व्यू का इस्तेमाल करते समय, इनका इस्तेमाल किया जा सकता है:
लोगों के नाम
लोगों से उनके नाम का अनुरोध करते समय, यहां दिए गए उदाहरणों जैसे सुराग दिए जा सकते हैं:
- किसी व्यक्ति का पूरा नाम एक ही व्यू में ऑटोमैटिक तरीके से भरने के लिए,
AUTOFILL_HINT_PERSON_NAME
का इस्तेमाल करें. - अगर नाम के अलग-अलग हिस्सों के लिए अलग-अलग व्यू का इस्तेमाल किया जा रहा है, तो इनमें से किसी भी विकल्प का इस्तेमाल किया जा सकता है:
फ़ोन नंबर
फ़ोन नंबर के लिए, इनका इस्तेमाल किया जा सकता है:
- किसी एक व्यू में पूरा फ़ोन नंबर मांगने के लिए,
AUTOFILL_HINT_PHONE_NUMBER
का इस्तेमाल करें. - अगर फ़ोन नंबर के अलग-अलग हिस्सों के लिए अलग-अलग व्यू का इस्तेमाल किया जा रहा है, तो इनमें से किसी भी व्यू का इस्तेमाल किया जा सकता है:
एक बार इस्तेमाल होने वाला पासवर्ड (ओटीपी)
एक बार के पासवर्ड को एक ही व्यू में देखने के लिए, AUTOFILL_HINT_SMS_OTP
का इस्तेमाल किया जा सकता है.
अगर एक से ज़्यादा व्यू में, हर व्यू ओटीपी के एक अंक से मैप होता है, तो हर वर्ण के लिए हिंट जनरेट करने के लिए, generateSmsOtpHintForCharacterPosition()
तरीके का इस्तेमाल किया जा सकता है.
वेबसाइट और मोबाइल ऐप्लिकेशन के डेटा को एक-दूसरे से जोड़ना
Google की मदद से, जानकारी अपने-आप भरने की सुविधा जैसी सेवाएं, ऐप्लिकेशन और वेबसाइट के जुड़ जाने के बाद, ब्राउज़र और Android डिवाइसों के बीच उपयोगकर्ता के लॉगिन डेटा को शेयर कर सकती हैं. जब कोई उपयोगकर्ता दोनों प्लैटफ़ॉर्म पर, अपने-आप भरने की सुविधा देने वाली एक ही सेवा चुनता है, तो आपके वेब ऐप्लिकेशन में साइन इन करने पर, उसके लॉगिन क्रेडेंशियल अपने-आप भरने की सुविधा के लिए उपलब्ध हो जाते हैं. ऐसा तब होता है, जब वह आपके Android ऐप्लिकेशन में साइन इन करता है.
अपने Android ऐप्लिकेशन को अपनी वेबसाइट से जोड़ने के लिए, अपनी साइट पर delegate_permission/common.get_login_creds
रिलेशन के साथ डिजिटल ऐसेट लिंक होस्ट करें. इसके बाद, अपने ऐप्लिकेशन की AndroidManifest.xml
फ़ाइल में, असोसिएशन का एलान करें. अपनी वेबसाइट को Android ऐप्लिकेशन से जोड़ने के बारे में ज़्यादा जानकारी के लिए, सभी ऐप्लिकेशन और वेबसाइटों पर अपने-आप साइन-इन होने की सुविधा चालू करें लेख पढ़ें.
अपने-आप भरने की सुविधा का इस्तेमाल करना
इस सेक्शन में, कुछ ऐसे खास उदाहरण दिए गए हैं जिनमें अपने ऐप्लिकेशन के उपयोगकर्ताओं के लिए, ऑटोमैटिक जानकारी भरने की सुविधा को बेहतर बनाया जा सकता है.
यह कुकी यह तय करती है कि ऑटोमैटिक जानकारी भरने की सुविधा चालू है या नहीं
उपयोगकर्ता, जानकारी अपने-आप भरने की सुविधा को चालू या बंद कर सकते हैं. साथ ही, सेटिंग > सिस्टम > भाषाएं और इनपुट > बेहतर सेटिंग > इनपुट सहायता > जानकारी अपने-आप भरने की सेवा पर जाकर, जानकारी अपने-आप भरने की सेवा को बदल सकते हैं. आपका ऐप्लिकेशन, उपयोगकर्ता की ऑटोमैटिक भरने की सेटिंग को ओवरराइड नहीं कर सकता. हालांकि, अगर उपयोगकर्ता के लिए ऑटोमैटिक भरने की सुविधा उपलब्ध है, तो अपने ऐप्लिकेशन में या ऐप्लिकेशन के कुछ खास व्यू में, ऑटोमैटिक भरने की अतिरिक्त सुविधा लागू की जा सकती है.
उदाहरण के लिए, अगर उपयोगकर्ता के लिए जानकारी अपने-आप भरने की सुविधा चालू है, तो TextView
, ओवरफ़्लो मेन्यू में जानकारी अपने-आप भरने की सुविधा वाली एंट्री दिखाता है. यह देखने के लिए कि उपयोगकर्ता के लिए अपने-आप भरने की सुविधा चालू है या नहीं, AutofillManager
ऑब्जेक्ट के isEnabled()
तरीके को कॉल करें.
अगर आपको यह पक्का करना है कि बिना अपने-आप भरने की सुविधा वाले उपयोगकर्ताओं के लिए, साइन-अप और लॉगिन करने का अनुभव बेहतर हो, तो One Tap साइन-इन की सुविधा लागू करें.
ऑटोमैटिक भरने की सुविधा के लिए अनुरोध करना
कभी-कभी, आपको उपयोगकर्ता की कार्रवाई के जवाब में, अपने-आप भरने की सुविधा के अनुरोध को लागू करना पड़ सकता है. उदाहरण के लिए, TextView
उपयोगकर्ता के व्यू को दबाकर रखने पर, अपने-आप भरने की सुविधा वाला मेन्यू आइटम दिखाता है.
यहां दिए गए कोड के उदाहरण में, अपने-आप भरने की सुविधा के लिए अनुरोध करने का तरीका बताया गया है:
Kotlin
fun eventHandler(view: View) { val afm = requireContext().getSystemService(AutofillManager::class.java) afm?.requestAutofill(view) }
Java
public void eventHandler(View view) { AutofillManager afm = context.getSystemService(AutofillManager.class); if (afm != null) { afm.requestAutofill(view); } }
ऑटोमैटिक भरने की सुविधा के मौजूदा कॉन्टेक्स्ट को रद्द करने के लिए, cancel()
तरीके का भी इस्तेमाल किया जा सकता है. यह तब काम आ सकता है, जब आपके पास लॉगिन पेज पर फ़ील्ड मिटाने वाला बटन हो.
पिकर कंट्रोल में मौजूद डेटा के लिए, ऑटोमैटिक भरने की सुविधा का सही टाइप इस्तेमाल करना
पिकर, अपने-आप भरने की सुविधा के साथ काम आ सकते हैं. ये ऐसा यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराते हैं जिसकी मदद से उपयोगकर्ता, तारीख या समय का डेटा सेव करने वाले फ़ील्ड की वैल्यू बदल सकते हैं. उदाहरण के लिए, क्रेडिट कार्ड के फ़ॉर्म में, तारीख चुनने वाले कंट्रोल की मदद से उपयोगकर्ता अपने क्रेडिट कार्ड की समयसीमा खत्म होने की तारीख डाल सकते हैं या उसमें बदलाव कर सकते हैं. हालांकि, जब पिकर नहीं दिखता है, तब डेटा दिखाने के लिए आपको किसी दूसरे व्यू का इस्तेमाल करना होगा. जैसे, EditText
.
EditText
ऑब्जेक्ट को, ऑटोमैटिक भरे जाने वाले डेटा के तौर पर AUTOFILL_TYPE_TEXT
टाइप का डेटा चाहिए.
अगर किसी दूसरे तरह के डेटा का इस्तेमाल किया जा रहा है, तो एक कस्टम व्यू बनाएं. यह EditText
से इनहेरिट करता है और उस तरह के डेटा को मैनेज करने के लिए ज़रूरी तरीकों को लागू करता है. उदाहरण के लिए, अगर आपके पास तारीख का फ़ील्ड है, तो ऐसे लॉजिक के साथ तरीकों को लागू करें जो AUTOFILL_TYPE_DATE
टाइप की वैल्यू को सही तरीके से हैंडल करता हो.
ऑटोमैटिक तरीके से डेटा भरने की सुविधा के लिए डेटा टाइप तय करने पर, यह सुविधा व्यू में दिखाए गए डेटा को सही तरीके से दिखा सकती है. ज़्यादा जानकारी के लिए, ऑटोमैटिक भरने की सुविधा के साथ पिकर का इस्तेमाल करना लेख पढ़ें.
अपने-आप जानकारी भरने की सुविधा का कॉन्टेक्स्ट पूरा करना
ऑटोमैटिक भरने की सुविधा वाला फ़्रेमवर्क, उपयोगकर्ता के इनपुट को सेव करता है, ताकि आने वाले समय में इसका इस्तेमाल किया जा सके. इसके लिए, यह ऑटोमैटिक भरने की सुविधा का कॉन्टेक्स्ट खत्म होने के बाद, "क्या आपको ऑटोमैटिक भरने की सुविधा के लिए सेव करना है?" डायलॉग दिखाता है. आम तौर पर, किसी गतिविधि के खत्म होने पर, अपने-आप भरने की सुविधा का कॉन्टेक्स्ट खत्म हो जाता है. हालांकि, कुछ ऐसी स्थितियां होती हैं जिनमें आपको फ़्रेमवर्क को साफ़ तौर पर सूचना देनी होती है. उदाहरण के लिए, अगर लॉगिन और कॉन्टेंट स्क्रीन, दोनों के लिए एक ही गतिविधि का इस्तेमाल किया जा रहा है, लेकिन अलग-अलग फ़्रैगमेंट का इस्तेमाल किया जा रहा है. इन स्थितियों में, AutofillManager.commit()
को कॉल करके, कॉन्टेक्स्ट को साफ़ तौर पर खत्म किया जा सकता है.
कस्टम व्यू के लिए सहायता
कस्टम व्यू, ऑटोमैटिक भरने की सुविधा वाले फ़्रेमवर्क को ऐसा मेटाडेटा दिखा सकते हैं जिसे ऑटोमैटिक भरने की सुविधा वाले एपीआई का इस्तेमाल करके दिखाया जाता है. कुछ व्यू, वर्चुअल चाइल्ड के कंटेनर के तौर पर काम करते हैं. जैसे, OpenGL-रेंडर किए गए यूज़र इंटरफ़ेस (यूआई) वाले व्यू. ऑटोफ़िल फ़्रेमवर्क के साथ काम करने से पहले, इन व्यू को एपीआई का इस्तेमाल करके, ऐप्लिकेशन में इस्तेमाल की गई जानकारी का स्ट्रक्चर तय करना होगा.
अगर आपका ऐप्लिकेशन कस्टम व्यू का इस्तेमाल करता है, तो इन बातों का ध्यान रखें:
- कस्टम व्यू, स्टैंडर्ड व्यू स्ट्रक्चर या डिफ़ॉल्ट व्यू स्ट्रक्चर उपलब्ध कराता है.
- कस्टम व्यू में वर्चुअल स्ट्रक्चर होता है या ऐसा व्यू स्ट्रक्चर होता है जो अपने-आप भरने की सुविधा वाले फ़्रेमवर्क के लिए उपलब्ध नहीं होता.
स्टैंडर्ड व्यू स्ट्रक्चर वाले कस्टम व्यू
कस्टम व्यू, ऑटोमैटिक भरने की सुविधा के लिए ज़रूरी मेटाडेटा तय कर सकते हैं. पक्का करें कि आपका कस्टम व्यू, मेटाडेटा को सही तरीके से मैनेज करता हो, ताकि ऑटोमैटिक भरने की सुविधा वाले फ़्रेमवर्क के साथ काम कर सके. आपके कस्टम व्यू में ये कार्रवाइयां होनी चाहिए:
- फ़्रेमवर्क, आपके ऐप्लिकेशन को अपने-आप भरने की सुविधा वाली जो वैल्यू भेजता है उसे मैनेज करें.
- फ़्रेमवर्क को ऑटोमैटिक भरने की सुविधा का टाइप और वैल्यू दें.
ऑटोमैटिक भरने की सुविधा चालू होने पर, ऑटोमैटिक भरने की सुविधा वाला फ़्रेमवर्क, आपके व्यू पर autofill()
कॉल करता है. साथ ही, वह वैल्यू भेजता है जिसका इस्तेमाल आपके व्यू को करना चाहिए. autofill()
लागू करें, ताकि यह तय किया जा सके कि आपका कस्टम व्यू, अपने-आप भरने वाली वैल्यू को कैसे हैंडल करता है.
आपके व्यू में, अपने-आप भरने की सुविधा का टाइप और वैल्यू तय होनी चाहिए. इसके लिए, आपको getAutofillType()
और getAutofillValue()
तरीकों को क्रम से बदलना होगा.
आखिर में, अगर उपयोगकर्ता व्यू की मौजूदा स्थिति के लिए कोई वैल्यू नहीं दे सकता, तो ऑटोकंप्लीट की सुविधा को व्यू में वैल्यू नहीं भरनी चाहिए. उदाहरण के लिए, अगर व्यू बंद है.
ऐसे मामलों में, getAutofillType()
को AUTOFILL_TYPE_NONE
दिखाना होगा, getAutofillValue()
को null
दिखाना होगा, और autofill()
को कुछ नहीं दिखाना होगा.
इन मामलों में, फ़्रेमवर्क के तहत सही तरीके से काम करने के लिए, अतिरिक्त चरणों की ज़रूरत होती है:
- कस्टम व्यू में बदलाव किया जा सकता है.
- कस्टम व्यू में संवेदनशील डेटा मौजूद है.
कस्टम व्यू में बदलाव किया जा सकता है
अगर व्यू में बदलाव किया जा सकता है, तो AutofillManager
ऑब्जेक्ट पर notifyValueChanged()
को कॉल करके, अपने-आप भरने की सुविधा वाले फ़्रेमवर्क को बदलावों के बारे में सूचना दें.
कस्टम व्यू में संवेदनशील डेटा मौजूद है
अगर किसी व्यू में व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) शामिल है, जैसे कि ईमेल पते, क्रेडिट कार्ड नंबर, और पासवर्ड, तो उसे संवेदनशील के तौर पर मार्क किया जाना चाहिए.
आम तौर पर, जिन व्यू का कॉन्टेंट स्टैटिक रिसोर्स से आता है उनमें संवेदनशील डेटा नहीं होता. वहीं, जिन व्यू का कॉन्टेंट डाइनैमिक तरीके से सेट किया जाता है उनमें संवेदनशील डेटा हो सकता है. उदाहरण के लिए, अपना उपयोगकर्ता नाम डालें वाला लेबल संवेदनशील डेटा नहीं दिखाता है. वहीं, नमस्ते, जॉन वाला लेबल संवेदनशील डेटा दिखाता है.
ऑटोमैटिक भरने की सुविधा देने वाला फ़्रेमवर्क, डिफ़ॉल्ट रूप से सभी डेटा को संवेदनशील मानता है. आपके पास ऐसे डेटा को मार्क करने का विकल्प होता है जो संवेदनशील नहीं है.
यह मार्क करने के लिए कि किसी व्यू में संवेदनशील डेटा है या नहीं, onProvideAutofillStructure()
लागू करें. साथ ही, ViewStructure
ऑब्जेक्ट पर setDataIsSensitive()
कॉल करें.
यहां दिए गए कोड के उदाहरण में बताया गया है कि व्यू स्ट्रक्चर में मौजूद डेटा को 'संवेदनशील नहीं' के तौर पर कैसे मार्क करें:
Kotlin
override fun onProvideAutofillStructure(structure: ViewStructure, flags: Int) { super.onProvideAutofillStructure(structure, flags) structure.setDataIsSensitive(false) }
Java
@Override public void onProvideAutofillStructure(ViewStructure structure, int flags) { super.onProvideAutofillStructure(structure, flags); structure.setDataIsSensitive(false); }
अगर किसी व्यू में सिर्फ़ पहले से तय की गई वैल्यू स्वीकार की जाती हैं, तो व्यू को अपने-आप भरने के लिए इस्तेमाल किए जा सकने वाले विकल्पों को सेट करने के लिए, setAutofillOptions()
तरीके का इस्तेमाल किया जा सकता है. खास तौर पर, जिन व्यू के लिए ऑटोमैटिक भरने की सुविधा का टाइप AUTOFILL_TYPE_LIST
है उनके लिए इस तरीके का इस्तेमाल करना ज़रूरी है. ऐसा इसलिए, क्योंकि ऑटोमैटिक भरने की सुविधा, व्यू में भरने के लिए उपलब्ध विकल्पों के बारे में जानने पर बेहतर तरीके से काम कर सकती है.
अडैप्टर का इस्तेमाल करने वाले व्यू, जैसे कि Spinner
, भी इसी तरह के होते हैं. उदाहरण के लिए, क्रेडिट कार्ड की समयसीमा खत्म होने की तारीख वाले फ़ील्ड में इस्तेमाल करने के लिए, मौजूदा साल के आधार पर डाइनैमिक तरीके से साल बनाने वाला स्पिनर, साल की सूची उपलब्ध कराने के लिए Adapter
इंटरफ़ेस के getAutofillOptions()
तरीके को लागू कर सकता है.
ArrayAdapter
का इस्तेमाल करने वाले व्यू भी वैल्यू की सूचियां उपलब्ध करा सकते हैं. ArrayAdapter
स्टैटिक संसाधनों के लिए, अपने-आप भरने के विकल्प अपने-आप सेट करता है.
अगर डाइनैमिक तौर पर वैल्यू दी जाती हैं, तो getAutofillOptions()
को बदलें.
वर्चुअल स्ट्रक्चर वाले कस्टम व्यू
ऑटोफ़िल फ़्रेमवर्क को व्यू स्ट्रक्चर की ज़रूरत होती है. इसके बाद ही, वह आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में मौजूद जानकारी में बदलाव कर सकता है और उसे सेव कर सकता है. इन स्थितियों में, फ़्रेमवर्क के लिए व्यू स्ट्रक्चर उपलब्ध नहीं होता:
- ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) को रेंडर करने के लिए, OpenGL जैसे लो-लेवल रेंडरिंग इंजन का इस्तेमाल करता है.
- ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) को ड्रॉ करने के लिए
Canvas
के इंस्टेंस का इस्तेमाल करता है.
इन मामलों में, onProvideAutofillVirtualStructure()
लागू करके व्यू स्ट्रक्चर तय किया जा सकता है. इसके लिए, यह तरीका अपनाएं:
- व्यू स्ट्रक्चर में बच्चों की संख्या बढ़ाने के लिए,
addChildCount()
को कॉल करें. newChild()
पर कॉल करके, बच्चे का खाता जोड़ें.setAutofillId()
को कॉल करके, बच्चे के लिए अपने-आप भरने वाला आईडी सेट करें.- अपने काम की प्रॉपर्टी सेट करें. जैसे, अपने-आप भरने की सुविधा के लिए वैल्यू और टाइप.
- अगर वर्चुअल बच्चे का डेटा संवेदनशील है, तो
setDataIsSensitive()
कोtrue
पास करें. ऐसा न होने पर,false
पास करें.
नीचे दिए गए कोड स्निपेट में, वर्चुअल स्ट्रक्चर में नया चाइल्ड बनाने का तरीका बताया गया है:
Kotlin
override fun onProvideAutofillVirtualStructure(structure: ViewStructure, flags: Int) { super.onProvideAutofillVirtualStructure(structure, flags) // Create a new child in the virtual structure. structure.addChildCount(1) val child = structure.newChild(childIndex) // Set the autofill ID for the child. child.setAutofillId(structure.autofillId!!, childVirtualId) // Populate the child by providing properties such as value and type. child.setAutofillValue(childAutofillValue) child.setAutofillType(childAutofillType) // Some children can provide a list of values, such as when the child is // a spinner. val childAutofillOptions = arrayOf<CharSequence>("option1", "option2") child.setAutofillOptions(childAutofillOptions) // Just like other types of views, mark the data as sensitive when // appropriate. val sensitive = !contentIsSetFromResources() child.setDataIsSensitive(sensitive) }
Java
@Override public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) { super.onProvideAutofillVirtualStructure(structure, flags); // Create a new child in the virtual structure. structure.addChildCount(1); ViewStructure child = structure.newChild(childIndex); // Set the autofill ID for the child. child.setAutofillId(structure.getAutofillId(), childVirtualId); // Populate the child by providing properties such as value and type. child.setAutofillValue(childAutofillValue); child.setAutofillType(childAutofillType); // Some children can provide a list of values, such as when the child is // a spinner. CharSequence childAutofillOptions[] = { "option1", "option2" }; child.setAutofillOptions(childAutofillOptions); // Just like other types of views, mark the data as sensitive when // appropriate. boolean sensitive = !contentIsSetFromResources(); child.setDataIsSensitive(sensitive); }
वर्चुअल स्ट्रक्चर में मौजूद एलिमेंट में बदलाव होने पर, फ़्रेमवर्क को सूचना दें. इसके लिए, ये काम करें:
- अगर बच्चों के अंदर फ़ोकस बदलता है, तो
AutofillManager
ऑब्जेक्ट परnotifyViewEntered()
औरnotifyViewExited()
को कॉल करें. - अगर किसी चाइल्ड की वैल्यू बदलती है, तो
AutofillManager
ऑब्जेक्ट परnotifyValueChanged()
को कॉल करें. - अगर उपयोगकर्ता ने वर्कफ़्लो में कोई चरण पूरा कर लिया है, तो व्यू हैरारकी अब उपलब्ध नहीं होगी. जैसे, जब उपयोगकर्ता लॉगिन फ़ॉर्म का इस्तेमाल करके साइन इन करता है, तो
AutofillManager
ऑब्जेक्ट परcommit()
को कॉल करें. - अगर व्यू हैरारकी मान्य नहीं है, क्योंकि उपयोगकर्ता ने वर्कफ़्लो में किसी चरण को रद्द कर दिया है, तो
AutofillManager
ऑब्जेक्ट परcancel()
को कॉल करें. ऐसा तब होता है, जब उपयोगकर्ता किसी ऐसे बटन पर टैप करता है जो लॉगिन फ़ॉर्म को मिटा देता है.
ऑटोमैटिक भरने की सुविधा वाले इवेंट पर कॉलबैक का इस्तेमाल करना
अगर आपका ऐप्लिकेशन, अपने-आप पूरा होने वाले व्यू उपलब्ध कराता है, तो आपको एक ऐसे तरीके की ज़रूरत होगी जो ऐप्लिकेशन को यूज़र इंटरफ़ेस (यूआई) में अपने-आप भरने की सुविधा में हुए बदलावों के जवाब में, व्यू को चालू या बंद करने के लिए कहे. ऑटोफ़िल फ़्रेमवर्क, इस सुविधा को AutofillCallback
के तौर पर उपलब्ध कराता है.
यह क्लास, onAutofillEvent(View, int)
तरीका उपलब्ध कराती है. ऐप्लिकेशन, इस तरीके को तब कॉल करता है, जब किसी व्यू से जुड़े अपने-आप भरने की सुविधा की स्थिति में बदलाव होता है.
इस तरीके का एक ओवरलोड किया गया वर्शन भी है. इसमें childId
पैरामीटर शामिल होता है. आपका ऐप्लिकेशन, इस पैरामीटर का इस्तेमाल वर्चुअल व्यू के साथ कर सकता है. उपलब्ध स्थितियां, कॉलबैक में स्थिरांकों के तौर पर तय की जाती हैं.
AutofillManager
क्लास के registerCallback()
तरीके का इस्तेमाल करके, कॉलबैक रजिस्टर किया जा सकता है. यहां दिए गए कोड के उदाहरण में, यह दिखाया गया है कि अपने-आप भरने की सुविधा वाले इवेंट के लिए कॉलबैक कैसे तय किया जाता है:
Kotlin
val afm = context.getSystemService(AutofillManager::class.java) afm?.registerCallback(object : AutofillManager.AutofillCallback() { // For virtual structures, override // onAutofillEvent(View view, int childId, int event) instead. override fun onAutofillEvent(view: View, event: Int) { super.onAutofillEvent(view, event) when (event) { EVENT_INPUT_HIDDEN -> { // The autofill affordance associated with the view was hidden. } EVENT_INPUT_SHOWN -> { // The autofill affordance associated with the view was shown. } EVENT_INPUT_UNAVAILABLE -> { // Autofill isn't available. } } } })
Java
AutofillManager afm = getContext().getSystemService(AutofillManager.class); afm.registerCallback(new AutofillManager.AutofillCallback() { // For virtual structures, override // onAutofillEvent(View view, int childId, int event) instead. @Override public void onAutofillEvent(@NonNull View view, int event) { super.onAutofillEvent(view, event); switch (event) { case EVENT_INPUT_HIDDEN: // The autofill affordance associated with the view was hidden. break; case EVENT_INPUT_SHOWN: // The autofill affordance associated with the view was shown. break; case EVENT_INPUT_UNAVAILABLE: // Autofill isn't available. break; } } });
जब कॉलबैक को हटाना हो, तब unregisterCallback()
तरीके का इस्तेमाल करें.
ऑटोमैटिक भरने की सुविधा के लिए हाइलाइट किए गए ड्रॉएबल को पसंद के मुताबिक बनाना
जब किसी व्यू में डेटा अपने-आप भर जाता है, तो प्लैटफ़ॉर्म उस व्यू पर Drawable
रेंडर करता है. इससे पता चलता है कि व्यू में मौजूद कॉन्टेंट अपने-आप भर गया है. डिफ़ॉल्ट रूप से, यह ड्रॉएबल एक ठोस आयत होता है. इसका रंग पारभासी होता है और यह बैकग्राउंड बनाने के लिए इस्तेमाल किए गए थीम के रंग से थोड़ा गहरा होता है. ड्रॉएबल को बदलने की ज़रूरत नहीं है. हालांकि, ऐप्लिकेशन या ऐक्टिविटी में इस्तेमाल की गई थीम के android:autofilledHighlight
आइटम को बदलकर, इसे पसंद के मुताबिक बनाया जा सकता है. उदाहरण के लिए:
res/values/styles.xml
<resources>
<style name="MyAutofilledHighlight" parent="...">
<item name="android:autofilledHighlight">@drawable/my_drawable</item>
</style>
</resources>
res/drawable/my_drawable.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#4DFF0000" />
</shape>
AndroidManifest.xml
<application ...
android:theme="@style/MyAutofilledHighlight">
<!-- or -->
<activity ...
android:theme="@style/MyAutofilledHighlight">
ऑटोमैटिक भरने की सुविधा के लिए पुष्टि करना
ऑटोमैटिक भरने की सुविधा देने वाली सेवा, उपयोगकर्ता से पुष्टि करने के लिए कह सकती है. ऐसा तब होता है, जब सेवा को आपके ऐप्लिकेशन में फ़ील्ड भरने होते हैं. ऐसे में, Android सिस्टम, सेवा की पुष्टि करने वाली गतिविधि को आपकी गतिविधि के स्टैक के हिस्से के तौर पर लॉन्च करता है.
पुष्टि करने की सुविधा के लिए, आपको अपना ऐप्लिकेशन अपडेट करने की ज़रूरत नहीं है, क्योंकि पुष्टि करने की प्रक्रिया सेवा के अंदर ही होती है. हालांकि, आपको यह पक्का करना होगा कि गतिविधि को फिर से शुरू करने पर, गतिविधि का व्यू स्ट्रक्चर बना रहे. जैसे, onCreate()
में व्यू स्ट्रक्चर बनाना, न कि onStart()
या onResume()
में.
ऑटोमैटिक भरने की सुविधा देने वाली सेवा को पुष्टि करने की ज़रूरत पड़ने पर, आपका ऐप्लिकेशन कैसा काम करता है, यह देखा जा सकता है. इसके लिए, AutofillFramework के सैंपल से HeuristicsService का इस्तेमाल करें. साथ ही, इसे इस तरह कॉन्फ़िगर करें कि जानकारी भरने के जवाब की पुष्टि करना ज़रूरी हो. इस समस्या को दोहराने के लिए, BadViewStructureCreationSignInActivity sample का भी इस्तेमाल किया जा सकता है.
रीसाइकल किए गए व्यू को अपने-आप भरने की सुविधा वाले आईडी असाइन करना
व्यू रीसाइकल करने वाले कंटेनर, जैसे कि RecyclerView
क्लास, उन ऐप्लिकेशन के लिए काम के होते हैं जिन्हें बड़े डेटा सेट के आधार पर, एलिमेंट की स्क्रोल करने वाली सूचियां दिखानी होती हैं. कंटेनर स्क्रोल होने पर, सिस्टम लेआउट में व्यू का फिर से इस्तेमाल करता है. हालांकि, व्यू में नया कॉन्टेंट होता है.
अगर रीसाइकल किए गए व्यू के शुरुआती कॉन्टेंट को भर दिया जाता है, तो जानकारी अपने-आप भरने की सेवा, व्यू के लॉजिकल मतलब को बनाए रखती है. इसके लिए, वह जानकारी अपने-आप भरने वाले आईडी का इस्तेमाल करती है. समस्या तब आती है, जब सिस्टम लेआउट में व्यू का फिर से इस्तेमाल करता है. इससे व्यू के लॉजिकल आईडी एक जैसे रहते हैं. इस वजह से, ऑटोमैटिक भरने की सुविधा के लिए इस्तेमाल किए गए गलत उपयोगकर्ता डेटा को ऑटोमैटिक भरने की सुविधा के आईडी से जोड़ दिया जाता है.
Android 9 (एपीआई लेवल 28) और इसके बाद के वर्शन पर काम करने वाले डिवाइसों पर इस समस्या को हल करने के लिए, RecyclerView
के ज़रिए इस्तेमाल किए जाने वाले व्यू के लिए, ऑटिफ़िल आईडी को साफ़ तौर पर मैनेज करें. इसके लिए, इन तरीकों का इस्तेमाल करें:
getNextAutofillId()
मेथड को एक नया अपने-आप भरने वाला आईडी मिलता है, जो गतिविधि के लिए यूनीक होता है.setAutofillId()
तरीके से, गतिविधि में इस व्यू का यूनीक और लॉजिकल ऑटिफ़िल आईडी सेट किया जाता है.
पते से जुड़ी समस्याएं हल करना
इस सेक्शन में, ऑटोमैटिक भरने की सुविधा के फ़्रेमवर्क में आने वाली जानी-पहचानी समस्याओं को हल करने के तरीके बताए गए हैं.
Android 8.0 और 8.1 पर, जानकारी अपने-आप भरने की सुविधा की वजह से ऐप्लिकेशन क्रैश हो जाते हैं
Android 8.0 (एपीआई लेवल 26) और 8.1 (एपीआई लेवल 27) में, अपने-आप भरने की सुविधा की वजह से कुछ मामलों में आपका ऐप्लिकेशन क्रैश हो सकता है. संभावित समस्याओं से बचने के लिए, उन सभी व्यू को importantForAutofill=no
से टैग करें जिनमें अपने-आप जानकारी नहीं भरी जाती है. importantForAutofill=noExcludeDescendants
का इस्तेमाल करके, पूरी गतिविधि को टैग भी किया जा सकता है.
ऑटोमैटिक भरने की सुविधा के लिए, डायलॉग बॉक्स के बदले गए साइज़ को ध्यान में नहीं रखा जाता
Android 8.1 (एपीआई लेवल 27) और इससे पुराने वर्शन में, अगर डायलॉग में मौजूद किसी व्यू का साइज़, पहले से दिखने के बाद बदला जाता है, तो उस व्यू को अपने-आप भरने की सुविधा के लिए नहीं माना जाता. ये व्यू, AssistStructure
ऑब्जेक्ट में शामिल नहीं होते. Android सिस्टम, इस ऑब्जेक्ट को ऑटोमैटिक भरने वाली सेवा को भेजता है. इस वजह से, सेवा व्यू की जानकारी नहीं भर सकती.
इस समस्या को ठीक करने के लिए, डायलॉग विंडो पैरामीटर की token
प्रॉपर्टी को उस गतिविधि की token
प्रॉपर्टी से बदलें जो डायलॉग बनाती है. ऑटोमैटिक भरने की सुविधा चालू होने की पुष्टि करने के बाद, विंडो पैरामीटर को उस क्लास के onWindowAttributesChanged()
तरीके में सेव करें जो Dialog
से इनहेरिट करता है. इसके बाद, सेव किए गए पैरामीटर की token
प्रॉपर्टी को onAttachedToWindow()
तरीके में पैरंट गतिविधि की token
प्रॉपर्टी से बदलें.
यहां दिए गए कोड स्निपेट में, इस समाधान को लागू करने वाली क्लास दिखाई गई है:
Kotlin
class MyDialog(context: Context) : Dialog(context) { // Used to store the dialog window parameters. private var token: IBinder? = null private val isDialogResizedWorkaroundRequired: Boolean get() { if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O || Build.VERSION.SDK_INT != Build.VERSION_CODES.O_MR1) { return false } val autofillManager = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { context.getSystemService(AutofillManager::class.java) } else { null } return autofillManager?.isEnabled ?: false } override fun onWindowAttributesChanged(params: WindowManager.LayoutParams) { if (params.token == null && token != null) { params.token = token } super.onWindowAttributesChanged(params) } override fun onAttachedToWindow() { if (isDialogResizedWorkaroundRequired) { token = ownerActivity!!.window.attributes.token } super.onAttachedToWindow() } }
Java
public class MyDialog extends Dialog { public MyDialog(Context context) { super(context); } // Used to store the dialog window parameters. private IBinder token; @Override public void onWindowAttributesChanged(WindowManager.LayoutParams params) { if (params.token == null && token != null) { params.token = token; } super.onWindowAttributesChanged(params); } @Override public void onAttachedToWindow() { if (isDialogResizedWorkaroundRequired()) { token = getOwnerActivity().getWindow().getAttributes().token; } super.onAttachedToWindow(); } private boolean isDialogResizedWorkaroundRequired() { if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O || Build.VERSION.SDK_INT != Build.VERSION_CODES.O_MR1) { return false; } AutofillManager autofillManager = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { autofillManager = getContext().getSystemService(AutofillManager.class); } return autofillManager != null && autofillManager.isEnabled(); } }
ज़रूरी नहीं होने वाली कार्रवाइयों से बचने के लिए, यहां दिए गए कोड स्निपेट में यह देखने का तरीका बताया गया है कि डिवाइस में अपने-आप भरने की सुविधा काम करती है या नहीं. साथ ही, यह भी बताया गया है कि मौजूदा उपयोगकर्ता के लिए यह सुविधा चालू है या नहीं. इसके अलावा, यह भी बताया गया है कि इस सुविधा को चालू करने के लिए, इस वर्कअराउंड की ज़रूरत है या नहीं:
Kotlin
// AutofillExtensions.kt fun Context.isDialogResizedWorkaroundRequired(): Boolean { // After the issue is resolved on Android, check whether the // workaround is still required for the current device. return isAutofillAvailable() } fun Context.isAutofillAvailable(): Boolean { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // The autofill framework is available on Android 8.0 // or higher. return false } val afm = getSystemService(AutofillManager::class.java) // Return true if autofill is supported by the device and enabled // for the current user. return afm != null && afm.isEnabled }
Java
public class AutofillHelper { public static boolean isDialogResizedWorkaroundRequired(Context context) { // After the issue is resolved on Android, check whether the // workaround is still required for the current device. return isAutofillAvailable(context); } public static boolean isAutofillAvailable(Context context) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // The autofill framework is available on Android 8.0 // or higher. return false; } AutofillManager afm = context.getSystemService(AutofillManager.class); // Return true if autofill is supported by the device and enabled // for the current user. return afm != null && afm.isEnabled(); } }
ऑटोमैटिक जानकारी भरने की सुविधा के साथ अपने ऐप्लिकेशन की जांच करना
ऑटोमैटिक भरने की सेवाओं के साथ काम करने के लिए अपने ऐप्लिकेशन को ऑप्टिमाइज़ करने के बाद, यह जांच करें कि क्या यह ऑटोमैटिक भरने की सेवाओं के साथ उम्मीद के मुताबिक काम करता है.
अपने ऐप्लिकेशन की जांच करने के लिए, Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन पर चलने वाले एम्युलेटर या फ़िज़िकल डिवाइस का इस्तेमाल करें. एम्युलेटर बनाने के बारे में ज़्यादा जानने के लिए, वर्चुअल डिवाइस बनाना और मैनेज करना लेख पढ़ें.
अपने-आप जानकारी भरने की सुविधा इंस्टॉल करना
ऑटोमैटिक भरने की सुविधा के साथ अपने ऐप्लिकेशन को टेस्ट करने से पहले, आपको एक ऐसा ऐप्लिकेशन इंस्टॉल करना होगा जो ऑटोमैटिक भरने की सेवाएं देता हो. इसके लिए, तीसरे पक्ष के ऐप्लिकेशन का इस्तेमाल किया जा सकता है. हालांकि, ऑटोमैटिक जानकारी भरने की सुविधा देने वाली किसी सेवा का इस्तेमाल करना ज़्यादा आसान होता है. इससे आपको तीसरे पक्ष की सेवाओं के लिए साइन अप करने की ज़रूरत नहीं पड़ती.
जानकारी ऑटोमैटिक भरने की सेवाओं के साथ अपने ऐप्लिकेशन को टेस्ट करने के लिए, Java में Android के जानकारी ऑटोमैटिक भरने वाले फ़्रेमवर्क के सैंपल का इस्तेमाल किया जा सकता है. सैंपल ऐप्लिकेशन, ऑटोमैटिक भरने की सेवा और क्लाइंट Activity
क्लास उपलब्ध कराता है. इनका इस्तेमाल, अपने ऐप्लिकेशन के साथ इस्तेमाल करने से पहले वर्कफ़्लो की जांच करने के लिए किया जा सकता है. इस पेज पर, android-AutofillFramework सैंपल ऐप्लिकेशन का रेफ़रंस दिया गया है.
ऐप्लिकेशन इंस्टॉल करने के बाद, एम्युलेटर की सिस्टम सेटिंग में जाकर, ऑटोमैटिक भरने की सुविधा चालू करें. इसके लिए, सेटिंग > सिस्टम > भाषाएं और इनपुट > ऐडवांस > इनपुट सहायता > ऑटोमैटिक भरने की सुविधा पर जाएं.
डेटा की ज़रूरी शर्तों का विश्लेषण करना
अपने ऐप्लिकेशन को जानकारी अपने-आप भरने की सेवा के साथ टेस्ट करने के लिए, सेवा के पास ऐसा डेटा होना चाहिए जिसका इस्तेमाल करके वह आपके ऐप्लिकेशन में जानकारी भर सके. सेवा को यह भी पता होना चाहिए कि आपके ऐप्लिकेशन के व्यू में किस तरह के डेटा की ज़रूरत है. उदाहरण के लिए, अगर आपके ऐप्लिकेशन में ऐसा व्यू है जिसमें उपयोगकर्ता नाम की ज़रूरत होती है, तो सेवा के पास ऐसा डेटासेट होना चाहिए जिसमें उपयोगकर्ता नाम शामिल हो. साथ ही, सेवा के पास यह जानने का कोई तरीका होना चाहिए कि व्यू में इस तरह के डेटा की ज़रूरत है.
android:autofillHints
एट्रिब्यूट सेट करके, सेवा को बताएं कि आपके व्यू में किस तरह का डेटा शामिल किया जाना चाहिए. कुछ सेवाएं, डेटा के टाइप का पता लगाने के लिए बेहतर अनुमान लगाने के तरीके का इस्तेमाल करती हैं. हालांकि, सैंपल ऐप्लिकेशन जैसी अन्य सेवाएं, डेवलपर से मिली जानकारी पर निर्भर करती हैं. अगर आपने उन व्यू में android:autofillHints
एट्रिब्यूट सेट किया है जो ऑटोमैटिक भरने की सुविधा के लिए काम के हैं, तो आपका ऐप्लिकेशन ऑटोमैटिक भरने की सुविधा देने वाली सेवाओं के साथ बेहतर तरीके से काम करता है.
टेस्ट चलाना
डेटा की ज़रूरी शर्तों का विश्लेषण करने के बाद, टेस्ट चलाया जा सकता है. इसमें, ऑटोमैटिक भरने की सुविधा में टेस्ट डेटा सेव करना और अपने ऐप्लिकेशन में ऑटोमैटिक भरने की सुविधा को ट्रिगर करना शामिल है.
सेवा में डेटा सेव करना
ऑटोमैटिक भरने की सुविधा में डेटा सेव करने के लिए, यह तरीका अपनाएं:
- ऐसा ऐप्लिकेशन खोलें जिसमें ऐसा व्यू हो जो आपके टेस्ट के दौरान इस्तेमाल किए जाने वाले डेटा टाइप के मुताबिक हो. android-AutofillFramework सैंपल ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराता है. इसमें ऐसे व्यू होते हैं जिनमें कई तरह के डेटा की ज़रूरत होती है. जैसे, क्रेडिट कार्ड नंबर और उपयोगकर्ता नाम.
- उस व्यू पर टैप करें जिसमें आपकी ज़रूरत का डेटा मौजूद है.
- व्यू में कोई वैल्यू डालें.
- पुष्टि करने वाले बटन पर टैप करें. जैसे, साइन इन करें या सबमिट करें. आम तौर पर, सेवा के डेटा सेव करने से पहले आपको फ़ॉर्म सबमिट करना होता है.
- सिस्टम डायलॉग में, अनुमति के अनुरोध की पुष्टि करें. सिस्टम डायलॉग में, फ़िलहाल चालू सेवा का नाम दिखता है. साथ ही, यह पूछा जाता है कि क्या आपको अपनी जांच में इस सेवा का इस्तेमाल करना है. अगर आपको इस सेवा का इस्तेमाल करना है, तो सेव करें पर टैप करें.
अगर Android, अनुमति वाला डायलॉग बॉक्स नहीं दिखाता है या सेवा वह नहीं है जिसका इस्तेमाल आपको टेस्ट में करना है, तो जांच करें कि सेवा फ़िलहाल सिस्टम सेटिंग में चालू है या नहीं.
अपने ऐप्लिकेशन में अपने-आप भरने की सुविधा ट्रिगर करना
अपने ऐप्लिकेशन में ऑटोमैटिक तरीके से जानकारी भरने की सुविधा चालू करने के लिए, यह तरीका अपनाएं:
- अपना ऐप्लिकेशन खोलें और उस गतिविधि पर जाएं जिसके व्यू की आपको जांच करनी है.
- उस व्यू पर टैप करें जिसे भरना है.
- सिस्टम, जानकारी अपने-आप भरने की सुविधा वाला यूज़र इंटरफ़ेस (यूआई) दिखाता है. इसमें ऐसे डेटासेट होते हैं जो व्यू को भर सकते हैं. इन्हें इमेज 1 में दिखाया गया है.
- उस डेटासेट पर टैप करें जिसमें मौजूद डेटा का इस्तेमाल करना है. इस व्यू में, सेवा में पहले से सेव किया गया डेटा दिखता है.

अगर Android, अपने-आप भरने की सुविधा वाला यूज़र इंटरफ़ेस (यूआई) नहीं दिखाता है, तो समस्या हल करने के लिए ये विकल्प आज़माएं:
- देखें कि आपके ऐप्लिकेशन में मौजूद व्यू,
android:autofillHints
एट्रिब्यूट की सही वैल्यू का इस्तेमाल कर रहे हों. इस एट्रिब्यूट के लिए संभावित वैल्यू की सूची देखने के लिए,View
क्लास मेंAUTOFILL_HINT
से शुरू होने वाले कॉन्स्टेंट देखें. - देखें कि जिस व्यू में जानकारी भरनी है उसमें
android:importantForAutofill
एट्रिब्यूट की वैल्यूno
के अलावा कोई और वैल्यू पर सेट हो. इसके अलावा, यह भी देखें कि व्यू या उसके किसी पैरंट मेंandroid:importantForAutofill
एट्रिब्यूट की वैल्यूnoExcludeDescendants
के अलावा कोई और वैल्यू पर सेट हो.