Android: Bagikan teks biasa menggunakan maksud (ke semua aplikasi perpesanan)

146

Saya mencoba berbagi teks menggunakan maksud:

Intent i = new Intent(android.content.Intent.ACTION_SEND);
i.setType("text/plain");  
i.putExtra(android.content.Intent.EXTRA_TEXT, "TEXT");

dan warping dengan pemilih:

startActivity(Intent.createChooser(sms, getResources().getString(R.string.share_using)));

berhasil! tetapi hanya untuk aplikasi email.
yang saya butuhkan adalah maksud umum untuk semua aplikasi perpesanan: email, sms, IM (Whatsapp, Viber, Gmail, SMS ...) mencoba menggunakan android.content.Intent.ACTION_VIEW dan mencoba menggunakan i.setType("vnd.android-dir/mms-sms");tidak ada yang membantu ...

( "vnd.android-dir/mms-sms"dibagikan hanya menggunakan sms!)

skgskg
sumber

Jawaban:

313

Gunakan kode sebagai:

    /*Create an ACTION_SEND Intent*/
    Intent intent = new Intent(android.content.Intent.ACTION_SEND);
    /*This will be the actual content you wish you share.*/
    String shareBody = "Here is the share content body";
    /*The type of the content is text, obviously.*/
    intent.setType("text/plain");
    /*Applying information Subject and Body.*/
    intent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.share_subject));
    intent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    /*Fire!*/
    startActivity(Intent.createChooser(intent, getString(R.string.share_using)));
Arpit Garg
sumber
6
Tapi saya tidak mengerti apa yang membuat perbedaan ?? Hanya String tubuh luar ??
skgskg
1
tidak ada perbedaan. Pada emulator saya membuka aplikasi pesan tetapi pada ponsel dan tablet saya, saya diminta untuk memilih dari daftar aplikasi. Mungkin ini tentang menginstal aplikasi tambahan pada emulator.
Piyush-Ask Any Perbedaan
Jawaban bagus! Adakah yang bisa mengatakan mengapa ini tidak berhasil jika Anda menghilangkan sharingIntent.setType("text/plain");bagian?
NecipAllef
Cara mengatur teks terpisah hanya
whatsup
1
Tambahkan cuplikan berikut di maksud sharingIntent.setPackage ("com.whatsapp");
Arpit Garg
62

Cara baru untuk melakukan ini akan menggunakan ShareCompat.IntentBuilder seperti:

// Create and fire off our Intent in one fell swoop
ShareCompat.IntentBuilder
        // getActivity() or activity field if within Fragment
        .from(this) 
        // The text that will be shared
        .setText(textToShare)
        // most general text sharing MIME type
        .setType("text/plain") 
        .setStream(uriToContentThatMatchesTheArgumentOfSetType)
        /*
         * [OPTIONAL] Designate a URI to share. Your type that 
         * is set above will have to match the type of data
         * that your designating with this URI. Not sure
         * exactly what happens if you don't do that, but 
         * let's not find out.
         * 
         * For example, to share an image, you'd do the following:
         *     File imageFile = ...;
         *     Uri uriToImage = ...; // Convert the File to URI
         *     Intent shareImage = ShareCompat.IntentBuilder.from(activity)
         *       .setType("image/png")
         *       .setStream(uriToImage)
         *       .getIntent();
         */
        .setEmailTo(arrayOfStringEmailAddresses)
        .setEmailTo(singleStringEmailAddress)
        /*
         * [OPTIONAL] Designate the email recipients as an array
         * of Strings or a single String
         */ 
        .setEmailTo(arrayOfStringEmailAddresses)
        .setEmailTo(singleStringEmailAddress)
        /*
         * [OPTIONAL] Designate the email addresses that will be 
         * BCC'd on an email as an array of Strings or a single String
         */ 
        .addEmailBcc(arrayOfStringEmailAddresses)
        .addEmailBcc(singleStringEmailAddress)
        /* 
         * The title of the chooser that the system will show
         * to allow the user to select an app
         */
        .setChooserTitle(yourChooserTitle)
        .startChooser();

Jika Anda memiliki pertanyaan lebih lanjut tentang penggunaan ShareCompat, saya sangat merekomendasikan artikel hebat ini dari Ian Lake , seorang Advokat Pengembang Android di Google, untuk perincian API yang lebih lengkap. Seperti yang akan Anda perhatikan, saya meminjam beberapa contoh ini dari artikel itu.

Jika artikel itu tidak menjawab semua pertanyaan Anda, selalu ada Javadoc itu sendiri untuk ShareCompat.IntentBuilder di situs web Pengembang Android. Saya menambahkan lebih banyak ke contoh penggunaan API ini berdasarkan komentar clemantiano.

lustig
sumber
1
Selain jawaban ini, ada juga metode untuk mengatur penerima alamat email seperti, setEmailBcc () , setEmailCc () & setEmailTo () .
clementiano
Terima kasih telah berbagi tetapi tidak berfungsi dengan baik untuk saya, kadang-kadang saya mendapatkan pengecualian ini java.lang.IllegalArgumentException: Layanan tidak terdaftar: ActivityInfo {67f62c5 com.google.android.app.hangouts.phone.ShareIntentActivity}
berrytchaks
32

Ini contoh yang bagus tentang berbagi dengan Intents di Android:

* Bagikan dengan Maksud di Android

//Share text:

Intent intent2 = new Intent(); intent2.setAction(Intent.ACTION_SEND);
intent2.setType("text/plain");
intent2.putExtra(Intent.EXTRA_TEXT, "Your text here" );  
startActivity(Intent.createChooser(intent2, "Share via"));

//via Email:

Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_SEND);
intent2.setType("message/rfc822");
intent2.putExtra(Intent.EXTRA_EMAIL, new String[]{EMAIL1, EMAIL2});
intent2.putExtra(Intent.EXTRA_SUBJECT, "Email Subject");
intent2.putExtra(Intent.EXTRA_TEXT, "Your text here" );  
startActivity(intent2);

//Share Files:

//Image:

boolean isPNG = (path.toLowerCase().endsWith(".png")) ? true : false;

Intent i = new Intent(Intent.ACTION_SEND);
//Set type of file
if(isPNG)
{
    i.setType("image/png");//With png image file or set "image/*" type
}
else
{
    i.setType("image/jpeg");
}

Uri imgUri = Uri.fromFile(new File(path));//Absolute Path of image
i.putExtra(Intent.EXTRA_STREAM, imgUri);//Uri of image
startActivity(Intent.createChooser(i, "Share via"));
break;

//APK:

File f = new File(path1);
if(f.exists())
{

   Intent intent2 = new Intent();
   intent2.setAction(Intent.ACTION_SEND);
   intent2.setType("application/vnd.android.package-archive");//APk file type  
   intent2.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f) );  
   startActivity(Intent.createChooser(intent2, "Share via"));
}
break;
digantung
sumber
9

Gunakan metode di bawah ini, cukup kirimkan subjek dan tubuh sebagai argumen dari metode ini

public static void shareText(String subject,String body) {
    Intent txtIntent = new Intent(android.content.Intent.ACTION_SEND);
    txtIntent .setType("text/plain");
    txtIntent .putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
    txtIntent .putExtra(android.content.Intent.EXTRA_TEXT, body);
    startActivity(Intent.createChooser(txtIntent ,"Share"));
}
Arunendra
sumber
4

Di bawah ini adalah kode yang berfungsi dengan aplikasi surel atau pesan. Jika Anda berbagi melalui email maka subjek dan badan keduanya ditambahkan.

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
                sharingIntent.setType("text/plain");

                String shareString = Html.fromHtml("Medicine Name:" + medicine_name +
                        "<p>Store Name:" + store_name “+ "</p>" +
                        "<p>Store Address:" + store_address + "</p>")  .toString();
                                      sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Medicine Enquiry");
                sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareString);

                if (sharingIntent.resolveActivity(context.getPackageManager()) != null)
                    context.startActivity(Intent.createChooser(sharingIntent, "Share using"));
                else {
                    Toast.makeText(context, "No app found on your phone which can perform this action", Toast.LENGTH_SHORT).show();
                }
Ravi Yadav
sumber
1

Gambar atau data biner:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("image/jpg");
Uri uri = Uri.fromFile(new File(getFilesDir(), "foo.jpg"));
sharingIntent.putExtra(Intent.EXTRA_STREAM, uri.toString());
startActivity(Intent.createChooser(sharingIntent, "Share image using"));

atau HTML:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/html");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml("<p>This is the text shared.</p>"));
startActivity(Intent.createChooser(sharingIntent,"Share using"));

sumber
0

Kode ini untuk berbagi melalui sms

     String smsBody="Sms Body";
     Intent sendIntent = new Intent(Intent.ACTION_VIEW);
     sendIntent.putExtra("sms_body", smsBody);
     sendIntent.setType("vnd.android-dir/mms-sms");
     startActivity(sendIntent);
Milon
sumber
0

100% Kode Kerja Untuk Berbagi Gmail

    Intent intent = new Intent (Intent.ACTION_SEND);
    intent.setType("message/rfc822");
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
    intent.putExtra(Intent.EXTRA_SUBJECT, "Any subject if you want");
    intent.setPackage("com.google.android.gm");
    if (intent.resolveActivity(getPackageManager())!=null)
        startActivity(intent);
    else
        Toast.makeText(this,"Gmail App is not installed",Toast.LENGTH_SHORT).show();
Jar Droid
sumber