ইন্টেন্ট ব্যবহার করে অ্যান্ড্রয়েড একাধিক ইমেল সংযুক্তি


98

আমি ইনটেন্টটি ব্যবহার করে একটি সংযুক্তি (চিত্র ফাইল, অডিও ফাইল, ইত্যাদি) সহ ইমেল প্রেরণের জন্য অ্যান্ড্রয়েড প্রোগ্রামে কাজ করছি ACTION_SEND। ইমেলটিতে একটি সংযুক্তি থাকলে প্রোগ্রামটি কাজ করছে। আমি Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)মেলের সাথে মনোনীত চিত্র ফাইলটি সংযুক্ত করতাম এবং এটি ঠিকঠাক কাজ করছে, Gmail এর মাধ্যমে মেলটি সরবরাহ করা যেতে পারে। তবে, যখন আমি Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)বহুবার কল করে একই মেলে একাধিক চিত্র সংযুক্ত করার চেষ্টা করেছি , এটি কাজ করতে ব্যর্থ হয়েছিল। সংযুক্তিটির কোনও ইমেলটিতে প্রদর্শিত হবে না।

ইমেল সংযুক্তি সম্পর্কে আমি এসডিকে ডকুমেন্টেশন এবং অ্যান্ড্রয়েড প্রোগ্রামিং ব্যবহারকারী গোষ্ঠীটি অনুসন্ধান করেছিলাম তবে কোনও সম্পর্কিত তথ্য খুঁজে পাই না। তবে, আমি আবিষ্কার করেছি যে আরও একটি অভিপ্রায় ধ্রুবক রয়েছে ACTION_SEND_MULTIPLE(এপিআই স্তর 4 থেকে পাওয়া যায়) যা আমার প্রয়োজন মেটাতে পারে। এসডিকে ডকুমেন্টেশনের উপর ভিত্তি করে, এটি কেবলমাত্র বলে যে এটি অন্য কারও কাছে একাধিক ডেটা সরবরাহ করে, এটি একাধিক ডেটা ACTION_SENDবাদে কাজ করে। তবে আমি এখনও এই কমান্ডটির সঠিক ব্যবহার করতে পারি না। আমি এর সাথে অভিপ্রায়টি প্রকাশ করার চেষ্টা করেছি ACTION_SEND_MULTIPLE, তারপরে putExtra(EXTRA_STREAM, uri)একাধিক চিত্র সংযুক্ত করার জন্য একাধিকবার কল করেছি, তবে আমি আগের মতো একই ভুল ফল পেয়েছি, কোনও সংযুক্তি ইমেলের মধ্যে প্রদর্শিত হয়নি।

কেউ কি ACTION_SEND_MULTIPLEএকাধিক ইমেল সংযুক্তি দিয়ে এটি ব্যবহার করে চেষ্টা করেছে ?


আমি একই সমস্যা আছে। এটি কোডের কাজ করছে না। এমএমএস প্রেরণের সময় একই সমস্যা বিদ্যমান, কেবল একটি ফাইল যুক্ত হওয়ার সম্ভাবনা রয়েছে। এটির কিছু উপায় কি আপনার অন্য উপায়ে আছে ??

উত্তর:


188

এখানে আপনার ইমেল তৈরির জন্য প্রয়োজনীয় কোডটি রয়েছে যাতে একাধিক সংযুক্তি রয়েছে।

public static void email(Context context, String emailTo, String emailCC,
    String subject, String emailText, List<String> filePaths)
{
    //need to "send multiple" to get more than one attachment
    final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, 
        new String[]{emailTo});
    emailIntent.putExtra(android.content.Intent.EXTRA_CC, 
        new String[]{emailCC});
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    emailIntent.putExtra(Intent.EXTRA_TEXT, emailText);
    //has to be an ArrayList
    ArrayList<Uri> uris = new ArrayList<Uri>();
    //convert from paths to Android friendly Parcelable Uri's
    for (String file : filePaths)
    {
        File fileIn = new File(file);
        Uri u = Uri.fromFile(fileIn);
        uris.add(u);
    }
    emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
    context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}

4
আপনি উদ্দেশ্য এবং ইমেল টেক্সটটি অভিপ্রায় রাখতে ভুলে গেছেন। অন্যথায় কোডের জন্য ধন্যবাদ।
বাহাদুর ইয়াঁ

5
সঠিক এমআইএমই ডাটা টাইপ হবে "টেক্সট / প্লেইন" এবং নয় "প্লেইন / পাঠ্য": emailIntent.setType("text/plain");। আপনি যদি "প্লেইন / টেক্সট" ব্যবহার করেন তবে অ্যান্ড্রয়েড জিমেইলকে প্রেরক হিসাবে ব্যবহার করতে বাধ্য করবে, তবে আপনি যদি "পাঠ্য / প্লেইন" ব্যবহার করেন তবে এটি Gmail, ফেসবুক, ব্লুটুথ ইত্যাদির সাথে অ্যাপ্লিকেশন চয়নকারী ডায়ালগ সরবরাহ করবে যদি আপনি কেবল মেল প্রোগ্রাম প্রস্তাব করতে চান পরিবর্তে "পাঠ্য / এক্সএমএল" ব্যবহার করুন।
আইডলন

4
এবং যদি আপনি context.startActivity(emailIntent);চেকবাক্সটিতে শেষ লাইনটি পরিবর্তন করেন তবে "এই ক্রিয়াটির জন্য ডিফল্ট দ্বারা ব্যবহার করুন" অ্যাপ্লিকেশন চয়নকারী ডায়ালগটিতে উপস্থিত হবে, সুতরাং ব্যবহারকারী একাধিক সংযুক্তি সহ ইমেল প্রেরণের জন্য ডিফল্ট অ্যাপ্লিকেশনটি নির্বাচন করতে সক্ষম হবেন।
আইডলন

4
এই উদাহরণটি আমাকে একটি "অ্যান্ড্রয়েডআরটাইমএক্সেপশন: কোনও ক্রিয়াকলাপের প্রেক্ষাপটের বাইরে থেকে কলিং স্টার্টএটিভিটি () কল করার জন্য FLAG_ACTIVITY_NEW_TASK পতাকা লাগবে you আপনি কি সত্যিই এটি চান?" আমি এই ইমেল পদ্ধতিতে অ্যাপ্লিকেশন এবং বেস প্রসঙ্গ উভয়কেই চেষ্টা করে দেখেছি এবং উভয়ই একই ত্রুটির ফলস্বরূপ।
রাভেমির

এটি আমার জন্য এটি সমাধান করেছে, তবে আমি নিশ্চিত নই যে আমি কোনও অদ্ভুত উপায়ে কোনও ত্রুটি থেকে বাঁচাচ্ছি কিনা, তাই আমি যার সম্পর্কে এ সম্পর্কে কোনও ধারণা আছে তার জন্য আমি পূর্ববর্তী মন্তব্যটি এখানে রেখে দেব।
রাভেমির

30

ACTION_SEND_MULTIPLE কর্ম হওয়া উচিত

এবং তারপর emailIntent.setType("text/plain");

অনুসরণ করেছে:

ArrayList<Uri> uris = new ArrayList<Uri>();
String[] filePaths = new String[] {"sdcard/sample.png", "sdcard/sample.png"};
for (String file : filePaths)
{
    File fileIn = new File(file);
    Uri u = Uri.fromFile(fileIn);
    uris.add(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(emailIntent);

এটি আমার পক্ষে কাজ করে।


19

যদিও এটি একটি পুরাতন থ্রেড, তবে গুগল অনুসন্ধানে এটি উপরে দেখানো হয়েছে এটি সম্পূর্ণ করার জন্য আমি একটি ছোট ইঙ্গিত যুক্ত করতে চাই, তাই আমি এটির উপর স্ট্যাম্পাল করেছি।

মেল ক্রিয়াকলাপের জন্য সংযুক্ত ফাইলগুলি পঠনযোগ্য করে তোলা প্রয়োজন, অন্যথায় তারা সংযুক্ত হবে না। সুতরাং আপনি কোথাও কল করতে হবে

fileIn.setReadable(true, false)

ধন্যবাদ স্যার, মেলটি কেবলমাত্র মেলটি সংযুক্তি প্রেরণ করতে সক্ষম হয়নি।
জোসেজুলিও

আপনি মানুষ ধন্যবাদ! আমি এই লাইনটি ছাড়াই ছবিগুলি প্রেরণ করতে পারি না
কনুঙ্গার

কি দারুন! এই উত্তরটি আমার দিনটিকে পুরোপুরি বাঁচিয়েছে। যদি কেউ জিমেইল অ্যাপ্লিকেশন থেকে "এক বা একাধিক ফাইল সংযুক্ত নেই। সর্বকালের সেরা টিপ!
বেলফেগর


2

একাধিক সংযুক্তি ব্যবহারের জন্য PutParcelableArrayListExtra(Intent.ExtraStream, uris)যেখানে ইউরিস ভেরিয়েবল List<IParcelable>(). এখানে একটি উদাহরণ এখানে:

var email = new Intent(Intent.ActionSendMultiple);
    email.SetType("text/plain");
    email.PutExtra(Intent.ExtraEmail, new string[]{emailTo});
    email.PutExtra(Intent.ExtraCc, new string[]{emailCC});

    var uris = new List<IParcelable>();
    filePaths.ForEach(file=> {
        var fileIn = new File(file);
        var uri = Android.Net.Uri.FromFile(fileIn);
        uris.Add(uri);
    });

    email.PutParcelableArrayListExtra(Intent.ExtraStream, uris);

    context.StartActivity(Intent.CreateChooser(email, "Send mail..."));

আশাকরি এটা সাহায্য করবে ;)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.