-
[AOS] ์ด๋ฏธ์ง ๋ฌธ์๋ฉ์์ง ์ ์กํ๊ธฐ2023. 4. 14. 15:51๋ฐ์ํ๐ฑ์ค์๋ฆฌ์จ, ์๋๋ก์ด๋๋ ์ดํ์์ ๋ฌธ์๋ฉ์์ง๋ก ์ด๋ฏธ์ง๋ ํ ์คํธ ๋ด์์ ๋ชป๋ณด๋ด๋?์๋๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค~ (๋น๋น)๐ถ
(์ด... ์ด๊ฒ ๋๋ค...?)๐ถ์ดํ์์ ๋ฌธ์๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ๋ ๋ณดํต ํด๋น ์๋น์ค์ ์ด๋ฒคํธ ๊ณต์ ๊ธฐ๋ฅ์ ์ด์ฉํ ๋์ด๋ค.
์ด๋ฒคํธ ๊ณต์ ๋ฅผ ํด๋ณด๋ฉด ๋ฉ์์ง ๋ด์ฉ์ url๊ณผ ํด๋น ์ด๋ฒคํธ์ ๊ฐ๋ตํ ์ ๋ณด๋ง์ด ๋ด๊ฒจ์๊ธฐ ๋ง๋ จ์ด๋ค.
์ฌ์ฉ์์๊ฒ ์ ๋ฃ MMS ์ ์ก ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด์๋ผ๋ MMS๋ฅผ ์ง์ํ๊ณ SMS๋ฅผ ์งํฅํ๋ค.
๊ทธ๋์ ๊ฒ์์ ํด๋ณด์๋ ๋ชจ๋ ํ ์คํธ๋ง ํน์ ์ด๋ฏธ์ง๋ง ๋ด๊ธด ๋ฌธ์๋ฉ์์ง ์ ์ก ๋ฐฉ๋ฒ๋ง์ด ๊ณต์ ๋์ด์์ด
์ด๋ฏธ์ง์ ํ ์คํธ๋ฅผ ๋ชจ๋ ๋ด์ ๋ฌธ์ ์ ์ก ๋ฐฉ๋ฒ์ ๊ตฌํํ๋๋ฐ์ ์ ๋ฅผ ๋จน์๋คใ
ํด๋น ๋ฐฉ๋ฒ์ ์ ํํ์ง ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋ค...
1. ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ implementation ํ๋ค.
์ด๋ฏธ์ง ๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Picasso, Glide, Coil ๋ฑ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ Picasso๋ฅผ ์ฌ์ฉํ์๋ค.
buid.gradle
//picasso implementation 'com.squareup.picasso:picasso:2.8'
2. Manifest ๋ด๋ถ์ file provider๋ฅผ ์ถ๊ฐํด์ค๋ค.
AndroidManifest.xml
<provider android:authorities="${applicationId}.provider" android:name="androidx.core.content.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" tools:replace="android:resource" android:resource="@xml/path" /> </provider>
3. ์์ file provider์์ ๊ฐ์ ธ์ฌ file path๋ฅผ ์ ์ํ path.xml ํ์ผ์ ์์ฑํด์ค๋ค.
res/xml/path.xml ํ์ผ ์์ฑ
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="path" path="." /> </paths>
4. ๋ฌธ์ ๋ฉ์์ง ์ ์ก ํจ์ ์์ฑ
private fun sharedSMS(title: String, desc: String, url: String) { try { val defaultSmsPackageName: String = Telephony.Sms.getDefaultSmsPackage(requireContext()) Picasso.get().load(url).into(object : Target { override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { val sendIntent = Intent(Intent.ACTION_SEND) sendIntent.type = "image/*" sendIntent.putExtra( "sms_body", "$title \n" + "$desc \n"+ url ) sendIntent.putExtra(Intent.EXTRA_STREAM, getImage(bitmap)) sendIntent.setPackage(defaultSmsPackageName) startActivity(sendIntent) } override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) { } override fun onPrepareLoad(placeHolderDrawable: Drawable?) { } }) } catch (e: Exception) { e.printStackTrace() } }
Intent๋ฅผ ACTION_SEND๋ก ์ค์ ํด์ฃผ๊ณ , type์ "image/*"์ผ๋ก ์ง์ ํด์ค๋ค.
putExtra์ sms_body๋ฅผ ์ค์ ํด์ค๋ค. ๊ด๋ จ ๋ด์ฉ์ description, ๊ด๋ จ url ๋ฑ๋ฑ์ ๋ฃ์ด์ค๋ค.
ํด๋น ๋ด์ฉ๊น์ง ์งํํ๋ฉด ์ด๋ฏธ์ง ์๋ SMS๊ฐ ์ ์ก๋๋ค.
์ด๋ฏธ์ง๋ putExtra๋ฅผ ์ด์ฉํด Intent.EXTRA_STREAM์ผ๋ก ์ด๋ฏธ์ง uri๋ฅผ ๋ฃ์ด์ค๋ค.
5. ์ด๋ฏธ์ง ๋ก๋ ํจ์
private fun getImage(bitmap: Bitmap?): Uri { var uri: Uri? = null try { val file = File(requireContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES), "bnk_sms.png") val outputStream = FileOutputStream(file) bitmap!!.compress(Bitmap.CompressFormat.PNG, 90, outputStream) outputStream.close() uri = FileProvider.getUriForFile(requireContext(), BuildConfig.APPLICATION_ID + ".provider", file) } catch (e: Exception) { e.printStackTrace() } return uri!! }
์ด๋ฏธ์ง๋ฅผ ๋ฉ์์ง๋ก ๋ณด๋ด๊ธฐ ์ํด์๋ ํด๋ ๋ด๋ถ์ ์๋ ์ด๋ฏธ์ง์ฌ์ผ ํ๋ค.
๋ฐ๋ผ์ FileProvider์ ์ง์ ํ ํด๋๋ก ์ด๋ฏธ์ง ์ ์ฅ ํ ์ด๋ฏธ์ง์ uri๋ฅผ ์ด์ฉํด ๋ฌธ์ ๋ฉ์์ง๋ก ๋ก๋ํ ์ ์๋๋ก ๊ตฌํํ์๋ค.
์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ๋์๋ ๋งค๋ฒ ๋ฉ์์ง ๊ณต์ ๋ฅผ ์คํํ ๋๋ง๋ค ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋๋ฏ๋ก ์ ์ฅ๊ณต๊ฐ ๋ญ๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ ์ฅํ์ฌ override ๋๋๋ก ํ๋ค.
๋ฐ์ํ'๐ฐ Android ๐ญ > ๐ ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AOS] Check App Status (Background or Foreground) (0) 2023.06.30 [AOS] Kotlin ์ค์ฝํ ํจ์ (Scope Function) (0) 2023.04.28 [AOS] Android DeepLink ์ค์ (0) 2022.11.23 [AOS] ForegroundService (0) 2022.11.15 [AOS] Android KakaoLink ์นด์นด์คํก ๊ณต์ ํ๊ธฐ 2 - Kakao Link ์ค์ (0) 2022.11.13