Android : 의도를 사용하여 일반 텍스트 공유 (모든 메시징 앱에)


146

의도를 사용하여 텍스트를 공유하려고합니다.

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

선택자와 뒤틀림 :

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

효과가있다! 이메일 앱에만 해당됩니다.
내가 필요한 것은 모든 메시징 응용 프로그램에 대한 일반적인 의도입니다 : 전자 메일, SMS, IM (Whatsapp, Viber, Gmail, SMS ...) 사용 android.content.Intent.ACTION_VIEW 하려고 시도했지만 i.setType("vnd.android-dir/mms-sms");아무런 도움이되지 않았습니다 ...

( "vnd.android-dir/mms-sms"SMS 만 사용하여 공유)

답변:


313

코드를 다음과 같이 사용하십시오.

    /*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
그러나 나는 무엇이 차이를 만드는지 이해하지 못했습니까? 그냥 몸통 문자열 ??
skgskg

1
다른 점이 없다. 에뮬레이터에서 메시징 앱을 열었지만 휴대 전화 및 태블릿에서 앱 목록에서 선택하라는 메시지가 표시되었습니다. 아마도 에뮬레이터에 추가 앱을 설치하는 것에 관한 것일 것입니다.
Piyush-Ask Any Difference

좋은 답변입니다! 당신이 sharingIntent.setType("text/plain");부분 을 생략하면 왜 이것이 작동하지 않는지 말할 수 있습니까 ?
NecipAllef

단지 whatsup에 대한 별도의 텍스트 설정 방법
살리 kallai

1
인 텐트 sharingIntent.setPackage ( "com.whatsapp")에 다음 스 니펫을 추가하십시오.
Arpit Garg

62

이를 수행하는 새로운 방법은 다음과 같이 ShareCompat.IntentBuilder를 사용하는 것입니다.

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

ShareCompat 사용에 대해 더 궁금한 점이 있으면 Ian Lake의이 훌륭한 기사를 적극 권장 합니다. API를 더 자세히 분석하기 위해 Google의 Android 개발자 . 알다시피,이 기사에서이 예제 중 일부를 빌 렸습니다.

이 기사가 모든 질문에 대한 답변이 아닌 경우 Android 개발자 웹 사이트에 항상 ShareCompat.IntentBuilder대한 Javadoc 자체가 있습니다. clemantiano의 의견을 기반으로 API 사용에 대한이 예제에 더 추가했습니다 .


1
이 답변 외에도 setEmailBcc () , setEmailCc () & setEmailTo () 와 같은 이메일 주소 수신자를 설정하는 방법도 있습니다 .
clementiano

공유해 주셔서 감사하지만 완벽하게 작동하지 않습니다. 때때로이 예외가 발생합니다. java.lang.IllegalArgumentException : 서비스가 등록되지 않았습니다 : ActivityInfo {67f62c5 com.google.android.apps.hangouts.phone.ShareIntentActivity}
berrytchaks

32

이것은 Android에서 Intents와 공유하는 좋은 예입니다.

* 안드로이드에서 의도와 공유

//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

아래 방법을 사용하고 제목과 본문을 메소드의 인수로 전달하십시오.

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

다음은 이메일 또는 메시징 앱 모두에서 작동하는 코드입니다. 이메일을 통해 공유하면 제목과 본문이 모두 추가됩니다.

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

이미지 또는 이진 데이터 :

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

또는 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

이 코드는 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);

0

Gmail 공유를위한 100 % 작업 코드

    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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.