일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바스크립트for문
- sqlite
- javaScriptError
- 자바스크립트날짜get
- 오류종류
- 장고웹
- 자바스크립트forinforof차이
- webkitrecognition
- 다른테이블에속해있습니다
- 자바스크립트날짜
- 이행은이미다른
- R데이터분석
- 청소년복지론
- Python
- forof문
- 파이썬
- Android
- 자바스크립트날짜형식
- cmd명령어
- 장고
- PostgreSQL
- 개발
- 안드로이드
- 자바스크립트수학
- 장고웹프로젝트
- 장고프로젝트
- speechAPI
- 이행은이미다른테이블에속해있습니다
- speechtoText
- 사례관리
- Today
- Total
EMDI는 지금도 개발중
Android with Kotlin : 안드로이드 기초편 - Intent 활용 전화걸기, 문자발송, 인터넷연결 등 본문
Android with Kotlin : 안드로이드 기초편 - Intent 활용 전화걸기, 문자발송, 인터넷연결 등
EMDI 2020. 9. 21. 11:13
이번 글에서는 옛날 Android + JAVA 했을 때 배웠었던 전화걸기, 주소링크가기 등을 Kotlin으로 해보도록 하겠습니다.
<!-- activity_main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="15dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/phoneNumEdt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="전화/문자를 연결할 번호 입력"
android:inputType="phone"/>
<Button
android:id="@+id/dialBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="전화걸기 Dial"/>
<Button
android:id="@+id/callBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="전화걸기 Call"/>
<Button
android:id="@+id/naverLinkBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="네이버로가기"/>
<EditText
android:id="@+id/linkEdt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="주소창 입력"
android:inputType="textWebEditText"
android:singleLine="true"/>
<Button
android:id="@+id/linkBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="입력한 주소로 이동"/>
<Button
android:id="@+id/kakaoPlayStoreBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="카카오톡 앱 다운로드 링크" />
</LinearLayout>
package com.mwsniper.review_intent_call
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 전화 다이얼걸기 - 통화연결까지는 X
dialBtn.setOnClickListener {
// 어디에 전화를 걸건지 text 정보 받기
val input = phoneNumEdt.text.toString()
// Uri를 이용해서 정보 저장
val myUri = Uri.parse("tel:${input}")
// 전환할 정보 설정 - ACTION_DIAL
val myIntent = Intent(Intent.ACTION_DIAL, myUri)
// 이동
startActivity(myIntent)
}
}
}
1. 전화 다이얼걸기
첫 번째로 할 내용은 전화번호 입력 후 [전화걸기 DIAL] 버튼을 클릭하면 전화가 걸려지기 전 단계까지 가는 다이얼걸기
package com.mwsniper.review_intent_call
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
val mContext = this
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 전화걸기 - 통화연결까지는 O
callBtn.setOnClickListener {
// 어디에 전화를 걸건지 text 정보 받기
val input = phoneNumEdt.text.toString()
val permissionListener = object : PermissionListener {
override fun onPermissionGranted() {
val myUri = Uri.parse("tel:${input}")
val myIntent = Intent(Intent.ACTION_CALL, myUri)
startActivity(myIntent)
}
override fun onPermissionDenied(deniedPermissions: MutableList<String>?) {
Toast.makeText(mContext,"전화 연결 권한이 거부되었습니다.", Toast.LENGTH_SHORT).show()
}
}
TedPermission.with(mContext)
.setPermissionListener(permissionListener)
.setDeniedMessage("[설정] 에서 권한을 열어줘야 전화 연결이 가능합니다.")
.setPermissions(Manifest.permission.CALL_PHONE)
.check()
}
}
}
2. 전화 바로 걸기(집중 ★★★)
그 다음은 전화를 바로 걸도록 해주는 이벤트로 [전화걸기 CALL]버튼을 클릭하면 바로 DAIL처럼 진행될 줄 알았지만!! CALL에서는 추가적으로 처리해야할 내용이 있습니다.
// AndroidManifest.xml에 추가
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mwsniper.review_intent_call">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
1) manifests에 permission 추가해주기
전화연결은 다이얼과는 다르게 사용자의 요금과 관련된 일을 우리가 맘대로 진행하는 부분이라 그에 맞는 권한을 획득해야합니다. 그렇기에 우선 Main > AndroidManifest.xml 들어가셔서 permission을 추가해주기 만약 추가 안하고 앱 돌리면 앱이 죽을거에요.
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'gun0912.ted:tedpermission:2.2.3' //추가한 부분
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
2) tedpermission 추가해주기
AVD가 아닌 안드로이드 폰에서 테스트를 하시는 분들은 구글에 tedpermission을 검색하신다음 버전에 맞게 gradle에 추가해주세요.
* build.gradle은 Project와 Moudle 두 가지가 있는데 build.gradle(Module: app)에 들어가시면 됩니다.
package com.mwsniper.review_intent_call
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 문자발송 - 아직 내용은 없음
smsBtn.setOnClickListener {
val inputPhoneNum = phoneNumEdt.text.toString()
val myUri = Uri.parse("smsto:${inputPhoneNum}")
val myIntent = Intent(Intent.ACTION_SENDTO, myUri)
// 문자 전송 화면 이동 시 미리 문구를 적어서 보내기
// myIntent를 가지고 갈 때 -> putExtra로 데이터를 담아서 보내자
myIntent.putExtra("sms_body", "이 앱을 다운로드 받아주세요.")
startActivity(myIntent)
}
}
}
3. 문자 보내기
그 다음은 버튼은 안만들었지만 알아두면 좋은 SMS 문자보내기 소스. 전화랑은 살짝 다른 부분이 우선 tel: 이 아닌 smsto: 로 사용한다는 것과 문자는 당연 보내는 문구가 있으니 그것을 putExtra로 담고 보낸다는 차이점이 있답니다
package com.mwsniper.review_intent_call
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 인터넷 웹 연결하기 네이버
naverLinkBtn.setOnClickListener {
val myUri = Uri.parse("https://www.naver.com")
val myIntent = Intent(Intent.ACTION_VIEW, myUri)
startActivity(myIntent)
}
linkBtn.setOnClickListener {
// 어디로 연결할건지 입력
val input = linkEdt.text.toString()
// Uri를 이용해서 정보 저장
val myUri = Uri.parse(input)
val myIntent = Intent(Intent.ACTION_VIEW, myUri)
startActivity(myIntent)
}
}
}
4. 네이버로 연결하기
인터넷 연결은 앞서 배웠던 tel: / smsto: 와 같이 uriString에 안붙여도 되고 바로 주소창을 입력하면 됩니다. 입력한 주소를 연결하는 방법은 앞서 배웠던 입력한 전화번호로 연결하기랑 비슷한 구조이기 소스만 올리고 패스하겠습니다.
<uses-permission android:name="android.permission.INTERNET"/>
참고로 인터넷도 CALL때와 비슷하게 permission을 부여해줘야합니다.
package com.mwsniper.review_intent_call
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 플레이 스토어 연결spdlqj
kakaoPlayStoreBtn.setOnClickListener {
val myUri = Uri.parse("market://details?id=com.kakao.talk&hl=ko")
val myIntent = Intent(Intent.ACTION_VIEW, myUri)
startActivity(myIntent)
}
}
}
5. 카카오스토어 연결하기
구글 스토어도 네이버주소와 비슷하게 해당 스토어의 주소가 있습니다. 그 주소를 입력한 다음 넘기면 끝!
'네이티브 > Android' 카테고리의 다른 글
Android with Kotlin : 안드로이드 기초편 - ListView 기초 리스트뷰 클릭 시 상세화면 이동 (2) | 2020.09.21 |
---|---|
Android with Kotlin : 안드로이드 기초편 - ListView 기초 프로세스 파악하기 (0) | 2020.09.21 |
Android with Kotlin : 안드로이드 기초편 - Intent 활용 데이터 함께 화면전환 (0) | 2020.09.21 |
Android with Kotlin : 안드로이드 기초편 - Intent 기초 setOnClickListener 이벤트 (0) | 2020.09.21 |
Android with Kotlin : 안드로이드 기초편 - 회원가입 화면(UI) 만들기 (0) | 2020.09.21 |