안드로이드 앱 개발을
하게 되면, 처음으로 접할 수 있는 부분이 인텐트입니다.
- 전화걸기 암시적 인텐트
- Intent.ACTION_DIAL
-
val intent = Intent(Intent.ACTION_DIAL) intent.data = Uri.parse("tel:010-1234-5678") if(intent.resolveActivity(packageManager) != null){ startActivity(intent) }
- 문자열 보내기 암시적 인텐트
- Intent.ACTION_SEND
-
val intent = Intent(Intent.ACTION_SEND) intent.apply { type = "text/plain" putExtra(Intent.EXTRA_TEXT, "보낼 문자열") var chooser = Intent.createChooser(intent, null) if (intent.resolveActivity(packageManager) != null){ startActivity(chooser) } }
- 웹 브라우저 열기 암시적 인텐트
- Intent.ACTION_SEND
-
val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse("https://www.example.com") if(intent.resolveActivity(packageManager) != null){ startActivity(intent) }
- 확장 함수로 만들 암시적 인텐트, [ ]는 옵션
-
종류 코드 문자 보내기 sendSms(전화번호, [문자열]) 웹 브라우저에서 열기 browse(url) 문자열 공유 share(문자열, [제목]) 이메일 보내기 email(받는사람 메일주소, [제목], [내용]) - 확장함수 만들기 (예: Extentions.kt)
-
import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.net.Uri fun Context.sendSMS(number:String, text:String = ""): Boolean{ return try { val intent = Intent(Intent.ACTION_VIEW, Uri.parse("sms:$number")) intent.putExtra("sms_body", text) startActivity(intent) true } catch (e: Exception) { e.printStackTrace() false } } fun Context.email(email:String, subject:String = "", text:String = ""):Boolean{ val intent = Intent(Intent.ACTION_SENDTO) intent.data = Uri.parse("mailto:") intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email)) if(subject.isNotEmpty()) intent.putExtra(Intent.EXTRA_SUBJECT, subject) if(text.isNotEmpty()) intent.putExtra(Intent.EXTRA_TEXT, text) if(intent.resolveActivity(packageManager) != null){ startActivity(intent) return true } return false } fun Context.share(text: String, subject: String = ""): Boolean{ return try{ val intent = Intent(Intent.ACTION_SEND) intent.type = "text/plain" intent.putExtra(Intent.EXTRA_SUBJECT, subject) intent.putExtra(Intent.EXTRA_TEXT, text) startActivity(Intent.createChooser(intent, null)) true } catch (e: ActivityNotFoundException){ e.printStackTrace() false } } fun Context.browse(url: String, newTask:Boolean = false):Boolean { return try{ val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse(url) if(newTask){ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } startActivity(intent) true } catch (e: ActivityNotFoundException){ e.printStackTrace() false } }
- 메뉴와 암시적 인텐트 연동
- 메뉴에 암시적 인텐트 연동(MainActivity.kt)
-
override fun onOptionsItemSelected(item: MenuItem): Boolean { when(item.itemId){ R.id.action_google, R.id.action_home -> { binding.webView.loadUrl("https://www.google.com") return true } R.id.action_send_text -> { binding.webView.url?.let { url -> //문자 보내기 sendSMS("010-1234-5678",url) } return true } R.id.action_email -> { binding.webView.url?.let { url -> //이메일 보내기 email("test@exmaple.com", "조흥 사이트", url) } return true } } return super.onOptionsItemSelected(item) } override fun onContextItemSelected(item: MenuItem): Boolean { when(item.itemId){ R.id.action_share -> { binding.webView.url?.let{ url -> //페이지 공유 share(url) } return true } R.id.action_browser -> { binding.webView.url?.let { url -> //기본 웹 브라우저에서 열기 browse(url) } return true } } return super.onContextItemSelected(item) }
- 패키지 가시성 설정
- AndroidManifest.xml
암시적 인텐트 _ 출처: https://developer.android.com/guide/components/intents-common#DialPhone
예제 발췌: 오준석의 생존코딩 Chapter.07
반응형
'코딩ㆍ개발 정보 > 안드로이드앱 (코틀린)' 카테고리의 다른 글
android Studio XML 자동 완성 안될 때 (0) | 2023.08.31 |
---|---|
Build was configured to prefer settings repositories over project repositories but repository 'Google' was added by build file 'build.gradle' 해결 방법 (0) | 2023.05.31 |
안드로이드 앱, 앱 위젯 및 레이아웃에 배치하는 뷰 (0) | 2022.02.10 |
안드로이드 앱 화면을 가로 모드로 고정하는 방법 (0) | 2022.02.07 |
오버라이드 시 인자 이름이 p0 처럼 의미없는 이름으로 생성될 경우 해결 방법 (0) | 2022.02.07 |
댓글