कस्टम DeepLinkMatcher क्लास बनाना

अगर उपलब्ध मैचर आपके इस्तेमाल के उदाहरणों के लिए काफ़ी नहीं हैं, तो DeepLinkMatcher क्लास को बड़ा करके, अपना मैचर बनाया जा सकता है.

DeepLinkMatcher<T, R> को एक्सटेंड करते समय, आपको दो टाइप आर्ग्युमेंट तय करने होंगे: डेस्टिनेशन नेविगेशन की टाइप (T : Any) और मैच के नतीजे का टाइप (R : DeepLinkMatcher.MatchResult<T>). अगर आपके मैचर को कस्टम रिज़ल्ट रैंकिंग या अतिरिक्त मेटाडेटा की ज़रूरत नहीं है, तो दूसरे टाइप आर्ग्युमेंट के तौर पर DeepLinkMatcher.MatchResult<T> का इस्तेमाल करें.

उदाहरण के लिए, यहां TelDeepLinkMatcher को लागू करने का एक बुनियादी तरीका बताया गया है. यह tel यूआरआई (जैसे, tel:5550100) के साथ काम करता है. tel यूआरआई ओपेक होते हैं, इसलिए UriDeepLinkMatcher इनके साथ काम नहीं करता:

कस्टम MatchResult क्लास को रैंक करना

अगर आपके कस्टम मैचर से मैच के नतीजों की तुलना करने का कोई सही तरीका है, तो आपको DeepLinkMatcher.MatchResult को एक्सटेंड करना चाहिए. साथ ही, नतीजों को रैंक करने के लिए, compareTo तरीके को बदलना चाहिए.

कोई कस्टम MatchResult सबक्लास बनाते समय, अपने मैचर की क्लास के एलान को अपडेट करें, ताकि उस सबक्लास को उसके दूसरे टाइप पैरामीटर R (जैसे, class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>()) के तौर पर तय किया जा सके. इससे कॉलर, बिना जांचे डाउनकास्ट किए, आपके कस्टम नतीजे की प्रॉपर्टी ऐक्सेस कर सकते हैं.

उदाहरण के लिए, TelDeepLinkMatcher में वाइल्डकार्ड पैटर्न मैचिंग की सुविधा देने के लिए, TelMatchResult को लागू किया जा सकता है. इससे यह पक्का किया जा सकता है कि एग्ज़ैक्ट मैच, वाइल्डकार्ड मैच से ज़्यादा रैंक करें. अगर मैचर को withBackStack में रैप किया गया है, तो तुलना करने से पहले WrappedMatchResult को अनरैप करें, ताकि मैच के नतीजे के आधार पर प्राथमिकता का आकलन किया जा सके: