안드로이드 코틀린 : 권한 개요 및 일반 권한 사용하기 - WebView
Lucy Archive
Lucy / Facilitate4U
2021. 3. 15. 13:10

안드로이드 권한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) 파일에서 아래와 같이 코드를 추가하면 됩니다.

biuld.gradle에서 viewBinding 설정 코드 추가

View Binding은 레이아웃에 있는 View의 Id를 코드에서 직접 사용 할 수 있도록 해주는 도구 입니다. View Binding과 관련된 설명은 아래의 링크를 참조해주세요.

안드로이드 View Binding 사용하기

 

안드로이드 View Binding 사용하기 - kotlin-android-extensions 지원 중단

안드로이드 View Binding 방법 정리 안드로이드 코드에서 레이아웃 View에 접근하기 위해 사용된 kotlin-android-extensions 의 지원이 중단예정으로, 이를 대체하여 사용 할 수 있는 ViewBinding 사용법에 대해

juahnpop.tistory.com

 

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>

activity_main.xml

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 와 연결 후 웹 페이지를 로드하는 코드입니다.

 

실행 결과

매니페스트 권한 설정 ~ 코드 작성 완료 후 실행하면 아래와 같은 화면을 볼 수 있습니다. 왼쪽 그림은 매니패스트에 권한 설정을 하지 않은 경우 에러메세지를 나타내고, 오른쪽 그림은 권한 설정이 정상적으로 된 경우의 실행 화면입니다.

(왼) 권한 명세 하지 않았을 때, (오) 권한 명세 정상적으로 했을 때

 

요약

이 포스트의 내용을 요약하면 아래와 같습니다.

  • 안드로이드 권한은 크게 설치 권한, 런타임 권한이 있다.
  • 설치 권한은 개인 정보와 크게 관련이 없는 기능 또는 데이터이다.
  • 설치 권한은 안드로이드 매니페스트에 사용할 권한을 작성하는 것으로 권한 관련 절차는 마무리 된다.

이후 포스트는 런타임 권한(위험 권한)을 사용하는 방법에 대해 작성할 예정입니다. 끝까지 읽어 주셔서 감사합니다.

관련포스트

🤞 안드로이드 앱 제작 관련글 목록 보기

🤞 안드로이드 권한 관련글 목록 보기