728x90
Java 코드로 된 Tedpermission 을 코틀린에서 사용하기 위한 방법이다.
자바로 된 코드를 코틀린 파일에 붙여넣기 하면 대부분 기초적인 변환이 이루어진다.
이후 약간의 손을 보면 사용이 가능해진다.
앱 build.gradle
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.link2me.android.tedpermission" minSdkVersion 23 targetSdkVersion 29 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.core:core-ktx:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'gun0912.ted:tedpermission:2.0.0' } |
2021.7월 확인사항
implementation 'io.github.ParkSangGwon:tedpermission:2.3.0' 로 TED Permission 이 변경되었더라.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.link2me.android.tedpermission"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <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=".LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
LoginActivity.kt
import android.Manifest import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.net.Uri import android.os.Build import android.os.Bundle import android.provider.Settings import android.util.Log import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.gun0912.tedpermission.PermissionListener import com.gun0912.tedpermission.TedPermission class LoginActivity : AppCompatActivity() { var context: Context? = null var permissionlistener: PermissionListener = object : PermissionListener { override fun onPermissionGranted() { // 권한 허가시 실행 할 내용 initView() } override fun onPermissionDenied(deniedPermissions: MutableList<String>?) { // 권한 거부시 실행 할 내용 Toast.makeText(this@LoginActivity, "권한 허용을 하지 않으면 서비스를 이용할 수 없습니다.", Toast.LENGTH_SHORT) .show() } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) context = this@LoginActivity; checkPermissions() } private fun checkPermissions() { if (Build.VERSION.SDK_INT >= 26) { // 출처를 알 수 없는 앱 설정 화면 띄우기 val pm: PackageManager = context!!.getPackageManager() Log.e("Package Name", packageName) if (!pm.canRequestPackageInstalls()) { startActivity( Intent( Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:$packageName") ) ) } } if (Build.VERSION.SDK_INT >= 23) { // 마시멜로(안드로이드 6.0) 이상 권한 체크 TedPermission.with(context) .setPermissionListener(permissionlistener) .setRationaleMessage("앱을 이용하기 위해서는 접근 권한이 필요합니다") .setDeniedMessage("앱에서 요구하는 권한설정이 필요합니다...\n [설정] > [권한] 에서 사용으로 활성화해주세요.") .setPermissions( Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_CALL_LOG, // 안드로이드 9.0 에서는 이것도 추가하라고 되어 있음. Manifest.permission.CALL_PHONE, // 전화걸기 및 관리 Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ).check() } else { initView() } } fun initView() { } } |
728x90
'안드로이드 > Kotlin 기능' 카테고리의 다른 글
[코틀린] Activity 전환 Intent (0) | 2020.05.09 |
---|---|
[코틀린] volley 라이브러리 사용예제 (0) | 2020.05.09 |
[코틀린] PrefsHelper (0) | 2020.05.04 |
[코틀린] ViewPager 만들기 (0) | 2020.04.24 |
[코틀린] webView 예제1 (0) | 2020.04.20 |