안드로이드 권한1 : 인터넷 권한을 사용하여 WebView로 웹 페이지 보기
일반 권한을 사용하는 법으로 앱 내부 WebView를 사용하여 웹페이지를 보는 예제
를 소개합니다.
안드로이드 권한 개요
권한의 종류
안드로이드 기기에는 카메라, 마이크, GPS, 사진, 주소록 등 개인정보 보호가 필요한 데이터와 기능이 많이 있습니다. 앱 권한은 이런 기능 또는 데이데한 접근을 보호하기 위해 존재합니다. 안드로이드에서 권한은 크게 두 종류가 있습니다. 개인정보와 크게 관련없는 기능 또는 데이터는 앱 설치시 동하는 것으로 간주하는 설치 권한, 개인 정보와 관련있어 앱 실행시 사용자에게 권한을 승인 받아야 하는 런타임 권한(위험 권한)두 종류가 있습니다.
- 설치 권한
- 사용자의 개인정보 보호화 다른 앱 작업에 영향이 거의 없는 권한
- 앱의 세부 정보 페이지에 권한과 관련안 안내를 표시
- 앱 설치시 권한 동의 하는 것으로 간주(사용자 권한 동의 절차 불필요)
- 설치 권한에는 일반 권한과 서명 권한이 있음
- 런타임 권한(위험한 권한)
- 사용자의 개인 정보와 관련된 데이터 또는 기능 사용을 사용하는 권한
- 앱 실행시 사용자에게 권한 사용 허가를 받음
일반 권한의 종류
일반 권한은 AndroidManifest.xml 에 권한을 명세하는 것만으로 앱에서 실행 가능합니다.
- 네트워크 연결 상태 확인
- 와이파이 상태 확인
- 블루투스 상태 확인
- 네트워크 및 인터넷 사용
- 기기 간 근거리 통신 사용
- 알람 설정
- 진동 설정
<!--일반 권한 - 코드 작성 불필요-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.VIBRATE"/>
런타임 권한(위험 권한) 종류
위험 권한은 AndroidManifest.xml 에 권한을 명세 후 앱 실행시 사용자에게 권한을 요청 받도록 코드를 작성해야합니다. 실제로 더 많은 권한 종류가 있습니다.
- 캘린더 읽기/쓰기
- 카메라
- 주소록 읽기/쓰기/계정정보 가져오기
- 위치 정보 사용
- 마이크 녹음
- 전화,문자관련
- 바디 센서
- 안드로이드 공용 저장소 읽기/쓰기
<!--위험 권한 - 코드 작성 필요-->
<!--권한 그룹 : CARENDAR-->
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<!--권한 그룹 : CAMERA -->
<uses-permission android:name="android.permission.CAMERA"/>
<!--권한 그룹 : CONTACTS-->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<!--권한 그룹 : LOCATION-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION_LOCATION"/>
<!-- 권한 그룹 : MICROPHONE-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 권한 그룹 : PHONE-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_NUMBER"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.ADD_VOICEMAIL"/>
<uses-permission android:name="android.permission.USE_SIP"/>
<!-- 권한 그룹 : SENSOR-->
<uses-permission android:name="android.permission.BODY_SENSORS"/>
<!-- 권한 그룹 : SMS-->
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<!-- 권한 그룹 : STORAGE-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
일반 권한 사용하기 : WebView 사용
아래 따라하기는 WebView로 웹페이지를 불러오는 예제입니다.
프로젝트 생성
- 템플릿 : Empty Activity
- 프로젝트명 : WebView
앱 권한 매니페스트에 등록
app > manifests > AndroidManifest.xml 에 인터넷 사용 권한을 명시합니다. 인터넷 접속은 일반 권한(설치 권한)으로 별도의 권한 요청 코드 작성이 불필요합니다.
<uses-permission android:name="android.permission.INTERNET"/>
View Binding 환경 설정
build.gradle(Module) 파일에 viewBinding 요소를 추가합니다.
android {
...
viewBinding {
enabled = true
}
}
실제 build.gradle(Module) 파일에서 아래와 같이 코드를 추가하면 됩니다.
View Binding은 레이아웃에 있는 View의 Id를 코드에서 직접 사용 할 수 있도록 해주는 도구 입니다. View Binding과 관련된 설명은 아래의 링크를 참조해주세요.
UI 만들기
레이아웃 파일 activity_main.xml 파일에서 아래와 같이 코드를 작성합니다. 기존 코드에서 textView를 삭제 후 아래 코드의 WebView 요소만 추가하면 됩니다. WebView의 id는 webView로 입력하였습니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt 코드 작성
MainActivity.kt 에서 아래와 같이 코드를 작성합니다.
package com.blacklog.webview
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.blacklog.webview.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.webView.loadUrl("https://www.google.com")
}
}
위의 코드는 ViewBinding으로 UI의 WebView 와 연결 후 웹 페이지를 로드하는 코드입니다.
실행 결과
매니페스트 권한 설정 ~ 코드 작성 완료 후 실행하면 아래와 같은 화면을 볼 수 있습니다. 왼쪽 그림은 매니패스트에 권한 설정을 하지 않은 경우 에러메세지를 나타내고, 오른쪽 그림은 권한 설정이 정상적으로 된 경우의 실행 화면입니다.
요약
이 포스트의 내용을 요약하면 아래와 같습니다.
- 안드로이드 권한은 크게 설치 권한, 런타임 권한이 있다.
- 설치 권한은 개인 정보와 크게 관련이 없는 기능 또는 데이터이다.
- 설치 권한은 안드로이드 매니페스트에 사용할 권한을 작성하는 것으로 권한 관련 절차는 마무리 된다.
이후 포스트는 런타임 권한(위험 권한)을 사용하는 방법에 대해 작성할 예정입니다. 끝까지 읽어 주셔서 감사합니다.
'Programming > Android App(Kotlin)' 카테고리의 다른 글
안드로이드 저장소 정리 : 앱 전용 디렉토리? 내부 저장소? 외부 저장소? 공용저장소 (0) | 2021.03.17 |
---|---|
안드로이드 코틀린 : 런타임 권한(위험 권한) 요청 코드 작성 방법 - 카메라 및 외부 저장소 권한 사용 예시 (1) | 2021.03.16 |
안드로이드 View Binding 사용하기 - kotlin-android-extensions 지원 중단 (0) | 2021.03.12 |
안드로이드 코틀린 : 전환된 Activity 종료 결과 수신하기, startActivityForResult() 와 onActivityResult() (1) | 2021.03.11 |
안드로이드 코틀린 : Activity 전환 할 때 데이터 넘기기 (0) | 2021.03.10 |