Notice
Recent Posts
Recent Comments
Link
투케이2K
491. (kotlin/코틀린) [유틸 파일] goAppInnerFileShareIntent : 앱 내부 저장소 파일 공유 - Intent.createChooser 본문
Kotlin
491. (kotlin/코틀린) [유틸 파일] goAppInnerFileShareIntent : 앱 내부 저장소 파일 공유 - Intent.createChooser
투케이2K 2024. 4. 24. 20:02[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Kotlin
[소스 코드]
// -----------------------------------------------------------------------------------------
// TODO [SEARCH FAST] : [goAppInnerFileShareIntent] : 앱 내부 저장소 파일 공유 수행
// -----------------------------------------------------------------------------------------
fun goAppInnerFileShareIntent(mContext: Context, path: String, mime: String) {
/**
* // -----------------------------------------
* [goAppInnerFileShareIntent 메소드 설명]
* // -----------------------------------------
* 1. 앱 내부 저장소 파일 공유 수행
* // -----------------------------------------
* 2. 호출 방법 :
*
* var filePath = filesDir.absolutePath // [/data/user/0/com.example.javaproject/files]
* filePath += "/test.txt"
*
* C_Intent.goAppInnerFileShareIntent(this@A_Intro, filePath, "text/plain")
*
* // -----------------------------------------
* 3. 주의 사항 :
*
* 앱 내부 저장소가 아닌 외부 저장소 및 공용 저장소 파일을 공유하기 수행 시 [첨부할 수 없습니다. 지원되지 않는 파일입니다] 메시지 표시
*
* >> 앱 내부 저장소는 특별한 권한이 없어도 파일 읽기 및 쓰기 가능
* // -----------------------------------------
* 4. TODO 사전 설정 준비 사항
*
* - AndroidManifest.xml 파일에 provider 지정
* <provider
* android:name="androidx.core.content.FileProvider"
* android:authorities="${applicationId}.provider"
* android:exported="false"
* android:grantUriPermissions="true">
* <meta-data
* android:name="android.support.FILE_PROVIDER_PATHS"
* android:resource="@xml/provider_paths" />
* </provider>
*
* - provider 파일에서 path 설정 필요
* <?xml version="1.0" encoding="utf-8"?>
* <paths xmlns:android="http://schemas.android.com/apk/res/android">
* <files-path name="files" path="."/>
* <external-files-path name="external_files_path" path="." />
* <external-path name="external_files" path="."/>
* </paths>
*
* // -----------------------------------------
*/
try {
// ===============================================================
S_Log._D_("앱 내부 저장소 파일 공유 수행 인텐트 이동 실시", null)
// ===============================================================
if (C_Util.stringNotNull(path) === true && C_Util.stringNotNull(mime)) {
// -----------------------------------------------------
// [File 생성]
// -----------------------------------------------------
val file = File(path)
if (file.exists() == false) { // [해당 파일이 존재 하지 않음]
// ===============================================================
S_Log._E_("앱 내부 저장소 파일 공유 수행 인텐트 이동 실패", arrayOf("ERROR : file not exists"))
// ===============================================================
return
}
// -----------------------------------------------------
// [URL 지정]
// -----------------------------------------------------
val fileUri = FileProvider.getUriForFile(mContext, mContext.packageName + ".provider", file)
// -----------------------------------------------------
// [Intent 지정]
// -----------------------------------------------------
val intentShareFile = Intent(Intent.ACTION_SEND)
intentShareFile.type = mime // TODO [mime 파일 타입]
intentShareFile.putExtra(Intent.EXTRA_STREAM, fileUri) // TODO [파일 주소]
//intentShareFile.putExtra(Intent.EXTRA_SUBJECT, "My subject");
// intentShareFile.putExtra(Intent.EXTRA_TEXT, "My text");
mContext.startActivity(Intent.createChooser(intentShareFile, "Choose")) // TODO [파일 공유]
} else {
// ===============================================================
S_Log._E_("앱 내부 저장소 파일 공유 수행 인텐트 이동 실패", arrayOf("ERROR : path , mime null"))
// ===============================================================
}
} catch (e: Exception) {
S_Log._printStackTrace_(mContext, S_FinalMsg.LOG_BUG_STATE, null, e)
}
}
반응형
'Kotlin' 카테고리의 다른 글
Comments