पर फ़ाइल संलग्न करने का प्रयास कर रहा है यह प्रश्न पहले पोस्ट किया गया है, लेकिन कोई स्पष्ट या स्वीकार्य उत्तर नहीं था और प्रदान किए गए सभी समाधान "काम" मेरे लिए नहीं था यहां देखें: Gmail 5.0 app fails with "Permission denied for the attachment" when it receives ACTION_SEND intent"अनुलग्नक के लिए अनुमति अस्वीकार की गई है" (जीमेल 5.0 पर) ईमेल इरादे
मेरे पास एक ऐप है जो टेक्स्ट फ़ाइल में डेटा बनाता है और उसे स्वचालित रूप से संलग्न करने वाले ईमेल में टेक्स्ट फ़ाइल भेजने की आवश्यकता होती है। मैंने इसे संलग्न करने के कई तरीकों का प्रयास किया है, और यह स्पष्ट रूप से जीमेल 4.9 और नीचे के लिए काम करता है लेकिन 5.0 में कुछ नई अनुमति सुविधाएं हैं जो इसे मेरी इच्छा से करने में अक्षम बनाती हैं।
Intent i = new Intent(Intent.ACTION_SEND);
String to = emailRecipient.getText().toString();
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
i.putExtra(Intent.EXTRA_SUBJECT, "Pebble Accelerometer Data");
i.putExtra(Intent.EXTRA_TEXT, "Attached are files containing accelerometer data captured by SmokeBeat Pebble app.");
String[] dataPieces = fileManager.getListOfData(getApplicationContext());
for(int i2 = 0; i2 < dataPieces.length; i2++){
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(getApplicationContext().getFilesDir() + File.separator + dataPieces[i2])));
}
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(getApplicationContext().getFilesDir() + File.separator + fileManager.getCurrentFileName(getApplicationContext()))));
Log.e("file loc", getApplicationContext().getFilesDir() + File.separator + fileManager.getCurrentFileName(getApplicationContext()));
try {
startActivity(Intent.createChooser(i, "Send Email"));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Main.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
datapieces खाली हाँ हो सकता है लेकिन पाश के लिए नीचे दिए गए वर्तमान फ़ाइल पंक्ति हमेशा विश्वसनीय है और हमेशा कुछ जुड़ जाता है।
मैं
Uri.parse()
को
Uri.fromFile()
बदलते कोशिश की है जब मैं उस, यह देता है, लेकिन फिर Gmail दुर्घटनाओं और जब मैं logcat जाँच यह एक अशक्त सूचक के कारण है। यह सबसे अधिक संभावना है क्योंकि जीमेल के पास फ़ाइल तक कोई पहुंच नहीं है और इसलिए नल के परिणामस्वरूप।
मैं भी का उपयोग कर
getFilesDir()
के बजाय
getCacheDir()
की कोशिश की है और यह एक ही परिणाम है।
मैं यहां क्या गलत कर रहा हूं, और इसे ठीक करने के बारे में मुझे कैसे जाना चाहिए? कुछ उदाहरण कोड वास्तव में, वास्तव में आसान होंगे क्योंकि मैं एंड्रॉइड विकास के लिए नया हूं और समझाता हूं कि मुझे कुछ प्रकार के पुश के बिना क्या करने की ज़रूरत है, शायद मदद समाप्त नहीं होगी।
बहुत बहुत धन्यवाद।
प्रश्न और समाधान में बहुत बड़ा अंतर नहीं है - प्रश्न (context.getFiles() से) एप्लिकेशन के निजी फ़ाइलों को साझा करने के बारे में था, और जवाब में यह सामान्य भंडारण से बन गया (~ context.getExternalFilesDir()) ... एक ही बात नहीं ... – Felix
क्या ऐसे उपकरणों के लिए एक अच्छा सामान्य समाधान है जिसमें बाहरी संग्रहण नहीं हो सकता है? या वह परिदृश्य भी अब चिंता का विषय है? – dylansturg
एंड्रॉइड एपीआई 23 और इसकी नई अनुमति प्रणाली के बाद से अटैचमेंट को स्टोर करने के लिए बाहरी स्टोरेज का उपयोग करना एक बुरा अभ्यास बन गया है। यदि आप रनटाइम पर WRITE_EXTERNAL_STORAGE अनुमति के लिए उपयोगकर्ता से नहीं पूछते हैं, तो यह असफल हो जाएगा। –