अक्सर, डेवलपर्स आवेदन के लिंक के साथ एक दोस्त को एक पत्र भेजने की क्षमता के लिए आवेदन को जोड़ते हैं। आमतौर पर यह अंतिम ओएस के नियमित साधनों का उपयोग करके किया जा सकता है। एंड्रॉइड पर हमारे एप्लिकेशन को पोर्ट करते समय, मुझे इस कार्यक्षमता को जोड़ने के लिए कुछ समय बिताना पड़ा। पिछली बार मैंने लगभग 5 साल पहले जावा भाषा के साथ काम किया था, और मैं एकता लिखने के लिए एंड्रॉइड प्लग-इन लिखने, ग्रहण स्थापित करने, जार फ़ाइल बनाने,
AndroidManifest.xml , आदि सेट करने के जंगल में नहीं जाना चाहता था। मैंने जावा में कोड की एक भी पंक्ति लिखे बिना C # में ऐसा करने में कामयाब रहा (टिप्पणियों को छोड़कर)। मैं आपके साथ साझा करना चाहता हूं कि मैंने यह कैसे किया ताकि आप अपना समय बर्बाद न करें। इसके अलावा, लेख में निर्दिष्ट विधि का उपयोग किसी भी जावा कोड को कॉल करने के लिए किया जा सकता है।


सरल विकल्प
बहुत ही सरल विकल्प है। यदि पत्र का पाठ छोटा है, इसमें html कोड नहीं हैं, तो आप
mailto URI योजना का उपयोग कर सकते हैं:
string url = string.Format("mailto:{0}?subject={1}&body={2}", to, WWW.EscapeURL(subject), WWW.EscapeURL(body)); Application.OpenURL(url);
यानी एक विशेष लिंक एकता
Application.OpenURL फ़ंक्शन का उपयोग करके बनाया और खोला जाता है। सभी ईमेल प्रोग्राम पर्याप्त रूप से इस तरह के लिंक का अनुभव नहीं करते हैं, खासकर अगर पाठ में रिक्त स्थान हैं। इसलिए, आपको
WWW.EscapeURL का उपयोग
करना होगा ।
यदि आपको एक पत्र भेजने की आवश्यकता है, जिसमें लिंक, चित्र आदि शामिल हैं?
HTML विकल्प
यह अंतर्निहित एंड्रॉइड मेल प्रोग्राम का उपयोग करके किया जा सकता है। ऐसा करने के लिए, निम्नलिखित जावा कोड लिखें:
intent = new Intent(Intent.ACTION_SEND); if (isHTML) intent.setType("text/html"); else intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (isHTML) intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(body)); else intent.putExtra(Intent.EXTRA_TEXT, body); startActivity(intent);
यह नेट पर कई उदाहरणों में पाया जा सकता है। एंडोर्ड
पर यह कैसे करना है पर एक लेख था। यदि आप रुचि रखते हैं कि यह कोड क्या करता है, तो इसे पढ़ें।
अगला, एकता से इस कोड को कॉल करने के लिए, आपको जार फ़ाइल एकत्र करने की आवश्यकता है, जावा फ़ंक्शन को C # स्क्रिप्ट से कॉल करें, और इसी तरह। लेकिन आप यह सब बिना कर सकते हैं। एकता सहायक कक्षाएं
AndroidJavaClass और
AndroidJavaObject हमारी मदद
करेंगे । ये बहुत उपयोगी उपकरण हैं। उनकी मदद से, आप किसी भी जावा क्लास और किसी भी जावा ऑब्जेक्ट को क्रमशः एक्सेस कर सकते हैं, साथ ही जावा ऑब्जेक्ट्स, एक्सेस क्लास मेथड्स, स्टैटिक मेथड्स और डेटा इत्यादि बना सकते हैं।
उपरोक्त वर्गों का उपयोग करके मैंने इसे C # में लिखा है:
आशय क्लस्टर चर
android.content.Intent जावा वर्ग तक पहुँच प्रदान करता है, जिसका उपयोग मैंने
गेटस्टैटिक फ़ंक्शन का उपयोग करके
Intent.EXTRA_TEXT प्रकार के स्थिरांक तक पहुंच के लिए किया था:
intentClass.GetStatic<string>("EXTRA_TEXT")
इरादेबिज चर चर जावा वर्ग
android.content.Intent की बनाई गई वस्तु का एक संदर्भ है। जैसा कि आप देख सकते हैं, जावा क्लास ऑब्जेक्ट बनाना बहुत आसान है:
var intentObject = new AndroidJavaObject("android.content.Intent", intentClass.GetStatic<string>("ACTION_SEND"))
AndroidJavaObject वर्ग के निर्माता का पहला पैरामीटर जावा वर्ग का नाम है, शेष पैरामीटर जावा वर्ग के निर्माता के पैरामीटर हैं।
AndroidJavaObject को
AndroidJavaClass के साथ भ्रमित न करें, प्रत्येक को इसके इच्छित उद्देश्य के लिए उपयोग करें। ये कक्षाएं इतनी ही समान रूप से दिखाई देती हैं (
AndroidJavaOass यहां तक कि
AndroidJavaObject से इनहेरिट की
गई ) कि एक जगह पर मैंने
AndroidJavaOass के बजाय
AndroidJavaClass का उपयोग किया और इसे नोटिस नहीं किया। अफसोस की बात है कि इस छोटे से विवरण को ठीक करने में समय लगा।
उपयोग करने वाले निर्देश का उपयोग "मुक्त" जावा ऑब्जेक्ट्स को समय पर करने के लिए किया जाता है।
एकता के साथ जावा प्लगइन्स का उपयोग करते समय यह
सबसे अच्छा अभ्यास में लिखा गया है।
कॉल फ़ंक्शन के माध्यम से कक्षा के तरीकों तक पहुंच
बनाई जाती है, और यदि विधि परिणाम देती है, तो फ़ंक्शन का एक सामान्यीकृत संस्करण लौटे परिणाम के प्रकार को इंगित करने के लिए उपयोग किया जाता है:
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), body);
इसके बारे में मत भूलना: भले ही आपको लौटे परिणाम की आवश्यकता नहीं है, फिर भी आपको परिणाम के प्रकार को निर्दिष्ट करने की आवश्यकता है, अन्यथा आपको गलत विधि हस्ताक्षर मिलेंगे और यह नहीं मिलेगा, या, और भी बदतर, आप अनिच्छा से एक समान विधि (यदि कोई है) वापस नहीं करेंगे परिणाम, और तुरंत त्रुटि नोटिस नहीं है।
अंत में, हम वर्तमान संदर्भ प्राप्त करते हैं (
currentActivity यह होगा) और
बनाये गए
इरादे का उपयोग करते हुए भेजने की शुरुआत करें:
using (var unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (var currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity")) { currentActivity.Call("startActivity", intentObject); } }
वह सब है।
इसी तरह से, लगभग किसी भी जावा कोड को फिर से लिखा जा सकता है। मैं इस विधि का सुझाव देता हूं यदि कोड छोटा है और आप एक प्लगइन नहीं लिखना चाहते हैं। अन्यथा, निश्चित रूप से, यह एक बहुत ही बोझिल कोड निकलता है, जो एक अज्ञानी व्यक्ति के लिए समझ से बाहर है।
सवाल और सुझाव सुनने के लिए तैयार;)
शायद किसी को मेरे पिछले लेखों को पढ़ने में दिलचस्पी होगी:
आपके विकास में शुभकामनाएँ!