(Android/안드로이드) OS 공유창에서 이미지 미리보기(Preview) 나오게 하기

1. 이미지를 OS 기본 공유창(chooser/sharesheet)으로 넘길 때 아래 코드가 정석처럼 보입니다.

fun shareImage(context: Context, imageUri: Uri) {
    val shareIntent = Intent(Intent.ACTION_SEND).apply {
        type = "image/*"
        putExtra(Intent.EXTRA_STREAM, imageUri)
        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }

    context.startActivity(
        Intent.createChooser(shareIntent, "이미지 공유")
    )
}

2. 요약


3. “미리보기 이미지를 넣는 옵션”이 따로 있을까?


4. 프리뷰가 안 뜨는 대표 원인 4가지


5. ClipData까지 포함해 공유하기

fun shareImageWithPreview(context: Context, imageUri: Uri) {
    val shareIntent = Intent(Intent.ACTION_SEND).apply {
        type = "image/*"
        putExtra(Intent.EXTRA_STREAM, imageUri)

        // 읽기 권한 부여
        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

        // 중요: ClipData로 Uri를 명시하면 일부 기기/앱에서 프리뷰가 정상 노출됨
        clipData = ClipData.newUri(context.contentResolver, "shared_image", imageUri)
    }

    context.startActivity(Intent.createChooser(shareIntent, "이미지 공유"))
}

6. FileProvider 설정이 프리뷰에 영향을 줄까?

<!-- Manifest -->
<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
    <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
</provider>

<!-- file_paths.xml -->
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="cache" path="." />
</paths>


7. 프리뷰가 꼭 떠야 한다”면 이것도 같이 점검



Related Posts