2017-09-06 21 views
6

मैं $cordovaFile और cordova email plugin साथ Ionic v1 उपयोग कर रहा हूँ एक फ़ाइल बनाने के लिए और फिर एक नया ईमेल में अटैच कर सकते हैं। मेरे पास किसी भी डिवाइस पर आईओएस के लिए एक कामकाजी समाधान है, लेकिन मैं एंड्रॉइड के साथ एक अजीब मुद्दे पर आया हूं।आयोनिक एंड्रॉयड आंतरिक साझा मेमोरी

Android File System Layout

जब एंड्रॉयड (DataDirectory, आदि) पर किसी भी आंतरिक भंडारण स्थान में बनाए गए कोई फ़ाइल अनुलग्न करने का प्रयास है, मैं प्राप्त "कुर्की के लिए इनकार कर दिया अनुमति"। हालांकि, जब मैं फ़ाइल को बाहरी भंडारण में सहेजता हूं, तो अटैचमेंट सफलतापूर्वक जोड़ा जाता है।

मैंने एंड्रॉइड के लिए बाहरी स्टोरेज का उपयोग करके अपना आवेदन प्रकाशित किया है, लेकिन दुर्भाग्य से आज के कुछ सबसे लोकप्रिय उपकरणों में बाहरी संग्रहण नहीं है।

क्या कोई समाधान ढूंढता है? मैंने वर्कअराउंड्स पर विचार किया है, जैसे फाइल को फाइल-होस्टिंग सेवा में अपलोड करना, और ईमेल में एक डाउनलोड लिंक भी शामिल है। मैं $cordovaFileTransfer का उपयोग करूंगा, लेकिन मुझे नहीं पता कि आंतरिक संग्रहण में अनुमति त्रुटियां होंगी या नहीं। यदि संभव हो तो मैं एक सच्चे ईमेल अनुलग्नक का उपयोग करना चाहता हूं। धन्यवाद!

+0

कोशिश इसका उपयोग कर फाइल। और कृपया अपना कोड साझा करें कि आप कैसे उत्पन्न कर रहे हैं और ईमेल भेज रहे हैं – Webruster

+0

इस प्रश्न को जांचें, [यहां] (https://stackoverflow.com/questions/46153968/how-to-access-sdcard-files-in-ionic-3) केवल आंतरिक भंडारण का उपयोग किया जा सकता है। –

+0

इस प्रश्न को चेक करें। [यहां] (https://stackoverflow.com/questions/46153968/how-to-access-sdcard-files-in-ionic-3) केवल आंतरिक संग्रहण का उपयोग किया जाता है। –

उत्तर

3

मुझे लगता है कि आपकी समस्या अनुमति से संबंधित है। मैंने फाइल संलग्नक के लिए फ़ाइल अनुलग्नक के लिए अनुमति देने के लिए इसे लागू किया है, यह उम्मीद है कि यह आपकी मदद करेगा। के रूप में जारी करना मुख्य रूप से Permission Issue से संबंधित है, मेरी दूसरी समाधान प्रयास करने से पहले इस प्लगइन cordova.plugins.permissions

function checkPermission() { 
      var permissions = cordova.plugins.permissions; 
      permissions.hasPermission(permissions.READ_EXTERNAL_STORAGE, checkPermissionCallback, null); 
     } 

function checkPermissionCallback(status) { 
      $localStorage.StoragePermission = status.hasPermission; 
      if (!status.hasPermission) { 
       var permissions = cordova.plugins.permissions; 
       permissions.requestPermission(permissions.READ_EXTERNAL_STORAGE, null, null);     
      } 
     } 
3

प्रयास करें अपने config.xml

<preference name="AndroidPersistentFileLocation" value="Compatibility" /> 

में इस कुंजी Source यह कहा गया से शामिल करने के लिए प्रयास करें कि:

प्लगइन के पिछले संस्करण अस्थायी और लगातार फ़ाइलों का स्थान चुनेंगे स्टार्टअप पर, डिवाइस पर दावा किया गया है कि एसडी कार्ड (या समकक्ष भंडारण विभाजन) घुड़सवार था। यदि एसडी कार्ड घुड़सवार किया गया था, या यदि एक बड़ा आंतरिक भंडारण विभाजन उपलब्ध था (जैसे नेक्सस डिवाइस पर), तो लगातार फ़ाइलों को उस स्थान की जड़ में संग्रहीत किया जाएगा। इसका मतलब था कि सभी कॉर्डोवा ऐप्स कार्ड पर उपलब्ध सभी फ़ाइलों को देख सकते थे।

यदि एसडी कार्ड उपलब्ध नहीं था, तो पिछले संस्करण डेटा/डेटा/डेटा/के तहत डेटा स्टोर करेंगे, जो प्रत्येक अन्य से ऐप्स को अलग करता है, लेकिन फिर भी उपयोगकर्ताओं के बीच डेटा साझा किया जा सकता है।

अब यह है कि क्या आपके आवेदन के config.xml फ़ाइल में एक प्राथमिकता साथ, आंतरिक फ़ाइल भंडारण स्थान, या पिछले तर्क का उपयोग करने में फ़ाइलों को स्टोर करने के लिए चुनते करने के लिए संभव है। ऐसा करने के लिए, कॉन्फ़िगर करने के लिए इन दो पंक्तियों में से एक जोड़ें।xml:

<preference name="AndroidPersistentFileLocation" value="Internal" />

<preference name="AndroidPersistentFileLocation" value="Compatibility" />

समाधान 2:

आप base64 में फ़ाइल की सामग्री भेज सकते हैं, अपने आयनिक-अनुप्रयोग में angular-base64 एकीकृत और भेजने का प्रयास करने का प्रयास करें बेस 64 प्रारूप में ई-मेल, यहां नमूना कोड है:

$scope.tosendEmail= function(subject, message, file_content){ 
    var file = null; 
    if(file_content != undefined){ 
     file = "base64:contact.vcf//"+$base64.encode(file_content); 
    } 

    var email_obj = { 
     subject: subject, 
     body: message, 
     isHtml:false, 
     attachments:file 
    }; 

    cordova.plugins.email.open(email_obj); 
} 

तो इस तरह से आप संलग्नक भेज सकते हैं `कॉर्डोबा प्लगइन file` प्लगइन, यह क्या यह एक निर्देशिका और फाइल लेने, इसलिए कोशिश करने के लिए अपना ईमेल बचाने में सक्षम बनाता है करता है` txt जोड़ने के लिए

+0

मैं इस प्रश्न के समाधानों में से किसी एक का परीक्षण नहीं कर सकता, क्योंकि मैं अपने विकास कंप्यूटर पर नहीं हूं, लेकिन मैं इस समाधान को बक्षीस के साथ पुरस्कृत करने जा रहा हूं। यदि अनुमति अद्यतन काम नहीं करता है तो यह एक अतिरिक्त समाधान प्रदान करता है। मैं परीक्षण के बाद दोनों समाधान (प्रितिश समेत) को उखाड़ फेंक रहा हूं और सही जवाब को चिह्नित कर रहा हूं। –

संबंधित मुद्दे