참고자료 : https://developer.android.com/training/sharing/send?hl=ko#java
텍스트 콘텐츠 보내기
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
Intent shareIntent = Intent.createChooser(sendIntent, null);
startActivity(shareIntent);
선택적으로, 이메일 수신자(EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC), 이메일 제목(EXTRA_SUBJECT) 등의 추가 정보를 포함하는 extra를 추가할 수 있습니다.
바이너리 콘텐츠 보내기
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
수신 애플리케이션에는 Uri가 가리키는 데이터에 액세스할 수 있는 권한이 필요합니다. 이를 위해 권장되는 방법은 다음과 같습니다.
- 고유한 ContentProvider에 데이터를 저장하여 다른 앱이 제공자에 액세스할 수 있는 올바른 권한을 갖도록 합니다. 액세스를 제공하는 데 선호되는 메커니즘은 수신 애플리케이션에 관한 액세스만 일시적으로 부여하는 URI별 권한을 사용하는 것입니다. FileProvider 도우미 클래스를 사용하면 이와 같은 ContentProvider를 쉽게 만들 수 있습니다.
- MediaStore 시스템을 사용합니다. MediaStore는 주로 동영상, 오디오 및 이미지 MIME 유형에 사용되지만 Android 3.0(API 수준 11)부터는 미디어가 아닌 유형을 저장할 수도 있습니다(자세한 내용은 MediaStore.Files 참조). scanFile()을 사용하여 MediaStore에 파일을 삽입할 수 있으며, 이후 공유에 적합한 content:// 스타일 Uri가 제공된 onScanCompleted() 콜백에 전달됩니다. 콘텐츠가 MediaStore 시스템에 추가되면 기기의 모든 앱에서 콘텐츠에 액세스할 수 있습니다.
올바른 MIME 유형 사용
보내는 데이터와 관련하여 가장 구체적인 MIME 유형을 제공해야 합니다. 예를 들어 일반 텍스트를 공유할 때는 text/plain을 사용해야 합니다. 다음은 Android에서 간단한 데이터를 보낼 때의 몇 가지 일반적인 MIME 유형입니다.
- text/plain, text/rtf, text/html, text/json, 수신자가 text/*에 등록해야 함
- image/jpg, image/png, image/gif, 수신자가 image/*에 등록해야 함
- video/mp4, video/3gp, 수신자가 video/*에 등록해야 함
- application/pdf, 수신자가 지원되는 파일 확장자에 등록해야 함
- */*의 MIME 유형을 사용할 수 있지만 이 유형은 권장되지 않으며 일반 데이터 스트림을 처리할 수 있는 활동과만 일치합니다.
Android Sharesheet는 제공된 MIME 유형에 따라 콘텐츠 미리보기를 표시할 수 있습니다. 일부 미리보기 기능은 특정 유형에만 사용할 수 있습니다.
MIME 미디어 유형의 IANA 공식 레지스트리를 참조하세요.
여러 콘텐츠 공유
여러 콘텐츠를 공유하려면 콘텐츠를 가리키는 URI 목록과 함께 ACTION_SEND_MULTIPLE 작업을 사용하세요. MIME 유형은 공유하는 콘텐츠의 혼합에 따라 다릅니다. 예를 들어 세 개의 JPEG 이미지를 공유한다면 유형은 여전히 "image/jpg"입니다. 이미지 유형이 혼합된 경우 모든 유형의 이미지를 처리하는 활동과 일치하는 "image/*"여야 합니다. 혼합된 유형을 공유할 수 있지만 수신자가 전송될 내용을 명확히 알 수 없으므로 권장되지 않습니다. 여러 유형을 보내야 한다면 "*/*"를 사용하세요. 데이터를 파싱하고 처리하는 것은 수신 애플리케이션의 책임입니다. 다음 예를 참조하세요.
ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));
제공된 URIs가 수신 애플리케이션에서 액세스할 수 있는 데이터를 가리키는지 확인하세요.
리치 콘텐츠를 텍스트 미리보기에 추가
Android 10(API 레벨 29)부터 Android Sharesheet에 공유 중인 텍스트의 미리보기가 표시됩니다. 경우에 따라 공유 중인 텍스트를 이해하기 어려울 수 있습니다. https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4와 같은 복잡한 URL을 공유하는 상황을 생각해 보세요. 다양한 기능의 미리보기를 통해 사용자에게 공유 중인 내용을 확인시켜 줄 수 있습니다.
텍스트를 미리 본다면 제목이나 미리보기 이미지 또는 둘 다를 설정할 수 있습니다. Intent.createChooser()를 호출하기 전에 Intent.EXTRA_TITLE에 설명을 추가합니다. ClipData를 통해 관련된 미리보기 이미지를 추가합니다.
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Hello!");
// (Optional) Here we're setting the title of the content
sendIntent.putExtra(Intent.EXTRA_TITLE, "Send message");
// (Optional) Here we're passing a content URI to an image to be displayed
sendIntent.setData(contentUri);
sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// Show the Sharesheet
startActivity(Intent.createChooser(sendIntent, null));
**공유 팝업 상단에 깔금하게 텍스트 와 링크로 표시된다.
'Android(Java)' 카테고리의 다른 글
[Java] Thread 기본 (0) | 2024.01.12 |
---|---|
[Java] Button 이벤트 처리 (0) | 2024.01.11 |
[Java] 암시적 Intent 기본 사용방법 (0) | 2024.01.11 |
[Java] 사용자 Activity 활성화 명시적 Intent 사용 방법 (1) | 2024.01.11 |
[Java] abstract Callback (추상클래스 콜백) (1) | 2024.01.05 |