Android: Chia sẻ văn bản đơn giản bằng cách sử dụng ý định (cho tất cả các ứng dụng nhắn tin)


145

Tôi đang cố gắng chia sẻ một số văn bản bằng một ý định:

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

và cong vênh với người chọn:

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

nó hoạt động nhưng chỉ cho ứng dụng email.
những gì tôi cần là một mục đích chung cho tất cả các ứng dụng nhắn tin: email, sms, IM (Whatsapp, Viber, Gmail, SMS ...) đã thử sử dụng android.content.Intent.ACTION_VIEW và thử i.setType("vnd.android-dir/mms-sms");không sử dụng gì cả ...

(chỉ "vnd.android-dir/mms-sms"chia sẻ bằng sms!)

Câu trả lời:


312

Sử dụng mã như:

    /*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)));

6
Nhưng tôi không hiểu điều gì làm nên sự khác biệt ?? Chỉ là chuỗi cơ thể bên ngoài ??
skgskg

1
không có sự khác biệt Trên trình giả lập tôi có ứng dụng nhắn tin để mở nhưng trên điện thoại và máy tính bảng, tôi được yêu cầu chọn từ danh sách ứng dụng. Có lẽ đó là về việc cài đặt các ứng dụng bổ sung trên trình giả lập.
Piyush-Hỏi bất kỳ sự khác biệt

Câu trả lời chính xác! Bất cứ ai có thể cho biết tại sao điều này không hoạt động nếu bạn bỏ qua sharingIntent.setType("text/plain");một phần?
NecipAllef

Cách đặt văn bản riêng cho whatsup
salih kallai 6/2/2016

1
Thêm đoạn mã sau vào mục đích SharingIntent.setPackage ("com.whatsapp");
Arpit Garg

62

Cách mới để làm điều này sẽ là sử dụng ShareCompat.IntentBuilder như vậy:

// 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();

Nếu bạn có thêm bất kỳ câu hỏi nào về việc sử dụng ShareCompat, tôi đánh giá cao bài viết tuyệt vời này từ Ian Lake , Nhà hỗ trợ nhà phát triển Android tại Google, để phân tích đầy đủ hơn về API. Như bạn sẽ chú ý, tôi đã mượn một số ví dụ này từ bài viết đó.

Nếu bài viết đó không trả lời tất cả các câu hỏi của bạn, thì luôn có Javadoc cho ShareCompat.IntentBuilder trên trang web của Nhà phát triển Android. Tôi đã thêm nhiều hơn vào ví dụ này về việc sử dụng API trên cơ sở nhận xét của clemantiano.


1
Ngoài câu trả lời này, còn có các phương thức để thiết lập người nhận địa chỉ email như, setEmailBcc () , setEmailCc () & setEmailTo () .
clementiano

Nhờ để chia sẻ nhưng nó không làm việc một cách hoàn hảo đối với tôi, thỉnh thoảng tôi nhận được java.lang.IllegalArgumentException ngoại lệ này: Dịch vụ không đăng ký: ActivityInfo {67f62c5 com.google.android.apps.hangouts.phone.ShareIntentActivity}
berrytchaks

32

Đây là một ví dụ tuyệt vời về chia sẻ với Ý định trong Android:

* Chia sẻ với ý định trong 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;

9

Sử dụng phương thức bên dưới, chỉ cần truyền chủ đề và phần thân làm đối số của phương thức

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"));
}

4

Dưới đây là mã hoạt động với cả ứng dụng email hoặc nhắn tin. Nếu bạn chia sẻ qua email thì cả chủ đề và cơ thể đều được thêm vào.

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();
                }

1

Hình ảnh hoặc dữ liệu nhị phân:

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"));

hoặc 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"));

0

Mã này để chia sẻ qua tin nhắn

     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);

0

Mã làm việc 100% cho chia sẻ Gmail

    Intent intent = new Intent (Intent.ACTION_SEND);
    intent.setType("message/rfc822");
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"anyMail@gmail.com"});
    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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.