खोज…


टिप्पणियों

DependencyService का उपयोग करते समय आपको आमतौर पर 3 भागों की आवश्यकता होती है:

  • इंटरफ़ेस - यह उन कार्यों को परिभाषित करता है जिन्हें आप अमूर्त करना चाहते हैं।
  • प्लेटफ़ॉर्म कार्यान्वयन - प्रत्येक प्लेटफ़ॉर्म विशिष्ट प्रोजेक्ट के भीतर एक वर्ग जो पहले से परिभाषित इंटरफ़ेस को लागू करता है।
  • पंजीकरण - प्रत्येक प्लेटफ़ॉर्म विशिष्ट कार्यान्वयन वर्ग को मेटाडेटा विशेषता के माध्यम से DependencyService साथ पंजीकृत होना चाहिए। यह रन टाइम में आपके कार्यान्वयन को खोजने के लिए DependencyService को सक्षम करता है।

DependencyService का उपयोग करते समय आपको प्रत्येक लक्ष्य के लिए कार्यान्वयन प्रदान करने की आवश्यकता होती है। जब कोई कार्यान्वयन प्रदान नहीं किया जाता है तो अनुप्रयोग रन समय पर विफल हो जाएगा।

इंटरफेस

इंटरफ़ेस उस व्यवहार को परिभाषित करता है जिसे आप DependencyService माध्यम से उजागर करना चाहते हैं। एक DependencyService का एक उदाहरण उपयोग एक पाठ से भाषण सेवा है। Xamarin.Forms में इस सुविधा के लिए वर्तमान में कोई अमूर्तता नहीं है, इसलिए आपको अपना स्वयं का बनाने की आवश्यकता है। व्यवहार के लिए एक इंटरफ़ेस निर्धारित करके प्रारंभ करें:

public interface ITextToSpeech
{
       void Speak (string whatToSay);
}

क्योंकि हम अपने इंटरफ़ेस को परिभाषित करते हैं हम अपने साझा कोड से इसके खिलाफ कोड कर सकते हैं।

नोट: इंटरफ़ेस को लागू करने वाली कक्षाओं को DependencyService साथ काम करने के लिए एक पैरामीटर रहित निर्माता की आवश्यकता होती है।

आईओएस कार्यान्वयन

आपके द्वारा निर्धारित इंटरफ़ेस को हर लक्षित प्लेटफ़ॉर्म में लागू किया जाना चाहिए। IOS के लिए यह AVFoundation फ्रेमवर्क के माध्यम से किया जाता है। ITextToSpeech इंटरफ़ेस का निम्नलिखित कार्यान्वयन अंग्रेजी में दिए गए पाठ को बोलता है।

using AVFoundation;

public class TextToSpeechiOS : ITextToSpeech
{
    public TextToSpeechiOS () {}

    public void Speak (string whatToSay)
    {
        var speechSynthesizer = new AVSpeechSynthesizer ();

        var speechUtterance = new AVSpeechUtterance (whatToSay) {
            Rate = AVSpeechUtterance.MaximumSpeechRate/4,
            Voice = AVSpeechSynthesisVoice.FromLanguage ("en-US"),
            Volume = 0.5f,
            PitchMultiplier = 1.0f
        };

        speechSynthesizer.SpeakUtterance (speechUtterance);
    }
}

जब आप अपनी कक्षा बना लेते हैं, तो आपको रन टाइम में इसे खोजने के लिए DependencyService को सक्षम करने की आवश्यकता होती है। यह वर्ग परिभाषा के ऊपर [assembly] विशेषता को जोड़कर और किसी भी नामस्थान परिभाषा के बाहर किया जाता है।

using AVFoundation;
using DependencyServiceSample.iOS;

[assembly: Xamarin.Forms.Dependency (typeof (TextToSpeechiOS))]
namespace DependencyServiceSample.iOS {
    public class TextToSpeechiOS : ITextToSpeech
...

यह विशेषता DependencyService साथ वर्ग को पंजीकृत करती है, इसलिए इसका उपयोग तब किया जा सकता है जब ITextToSpeech इंटरफ़ेस की एक आवृत्ति की आवश्यकता होती है।

साझा कोड

अपने प्लेटफ़ॉर्म-विशिष्ट वर्गों को बनाने और पंजीकृत करने के बाद आप उन्हें अपने साझा कोड पर हुक करना शुरू कर सकते हैं। निम्न पृष्ठ में एक बटन होता है जो पूर्व-परिभाषित वाक्य का उपयोग करके पाठ से भाषण कार्यक्षमता को ट्रिगर करता है। यह मूल SDK का उपयोग करके रन टाइम में ITextToSpeech का एक प्लेटफ़ॉर्म-विशिष्ट कार्यान्वयन प्राप्त करने के लिए DependencyService का उपयोग करता है।

public MainPage ()
{
    var speakButton = new Button {
        Text = "Talk to me baby!",
        VerticalOptions = LayoutOptions.CenterAndExpand,
        HorizontalOptions = LayoutOptions.CenterAndExpand,
    };
    
    speakButton.Clicked += (sender, e) => {
        DependencyService.Get<ITextToSpeech>().Speak("Xamarin Forms likes eating cake by the ocean.");
    };
    
    Content = speakButton;
}

जब आप एक iOS या Android डिवाइस पर इस एप्लिकेशन को चलाते हैं और बटन पर टैप करते हैं, तो आप एप्लिकेशन को दिए गए वाक्य को बोलते हुए सुनेंगे।

Android कार्यान्वयन

एंड्रॉइड विशिष्ट कार्यान्वयन थोड़ा अधिक जटिल है क्योंकि यह आपको एक मूल Java.Lang.Object से विरासत में मिलने के लिए मजबूर करता है और IOnInitListener इंटरफ़ेस को लागू करने के लिए IOnInitListener करता है। एंड्रॉइड आपको एसडीके के बहुत सारे तरीकों के लिए एक वैध एंड्रॉइड संदर्भ प्रदान करने की आवश्यकता है जो इसे उजागर करता है। Xamarin.Forms एक Forms.Context ऑब्जेक्ट को उजागर करता है जो आपको एक Android संदर्भ प्रदान करता है जिसे आप ऐसे मामलों में उपयोग कर सकते हैं।

using Android.Speech.Tts;
using Xamarin.Forms;
using System.Collections.Generic;
using DependencyServiceSample.Droid;

public class TextToSpeechAndroid : Java.Lang.Object, ITextToSpeech, TextToSpeech.IOnInitListener
{
    TextToSpeech _speaker;

    public TextToSpeechAndroid () {}

    public void Speak (string whatToSay)
    {
        var ctx = Forms.Context;

        if (_speaker == null) 
        {
            _speaker = new TextToSpeech (ctx, this);
        } 
        else 
        {
            var p = new Dictionary<string,string> ();
            _speaker.Speak (whatToSay, QueueMode.Flush, p);
        }
    }

    #region IOnInitListener implementation
    
    public void OnInit (OperationResult status)
    {
        if (status.Equals (OperationResult.Success)) 
        {
            var p = new Dictionary<string,string> ();
            _speaker.Speak (toSpeak, QueueMode.Flush, p);
        }
    }
    
    #endregion
}

जब आप अपनी कक्षा बना लेते हैं, तो आपको रन टाइम में इसे खोजने के लिए DependencyService को सक्षम करने की आवश्यकता होती है। यह वर्ग परिभाषा के ऊपर [assembly] विशेषता को जोड़कर और किसी भी नामस्थान परिभाषा के बाहर किया जाता है।

using Android.Speech.Tts;
using Xamarin.Forms;
using System.Collections.Generic;
using DependencyServiceSample.Droid;


[assembly: Xamarin.Forms.Dependency (typeof (TextToSpeechAndroid))]
namespace DependencyServiceSample.Droid {
    ...

यह विशेषता DependencyService साथ वर्ग को पंजीकृत करती है, इसलिए इसका उपयोग तब किया जा सकता है जब ITextToSpeech इंटरफ़ेस की एक आवृत्ति की आवश्यकता होती है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow