이번 포스팅에선 앱을 만들 때 중요한 것 중 하나인 권한을 설정하는 방법을 다루겠습니다.
먼저 앱 수준 gradle 파일을 열어 의존성 문구를 하나 추가해줍니다.
implementation 'gun0912.ted:tedpermission:2.2.3'
권한 설정을 좀 더 편리하게 할 수 있는 라이브러리를 사용하기 위한 의존성입니다.
그리고 매니페스트에 아래 권한을 추가해줍니다.
<uses-permission android:name="android.permission.CAMERA"/>
다음은 xml 코드입니다. 버튼을 누르면 카메라 권한을 요청하는 화면을 띄울 것이기 때문에 화면 구성은 버튼 하나만 있는 매우 간단한 화면입니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="권한 요청"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
다음은 자바 코드입니다. 버튼만 있기 때문에 간단하게 클릭 리스너만 만들겠습니다.
public class MainActivity extends AppCompatActivity
{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
}
});
}
}
버튼 클릭 리스너를 만들었으니 이제 카메라 권한을 요청하는 코드만 넣으면 됩니다.
빠르게 만들기 위해 아래의 스틱코드 포스팅에서 코드를 가져와 사용하겠습니다.
stickode.com/detail.html?no=2080
포스팅을 즐겨찾기하셨다면 아래와 같이 'PERMISSION'이라는 탭이 보입니다.
저것을 선택하면 아래와 같이 권한을 요청하는 코드의 기본 틀이 완성됩니다.
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;
import java.util.List;
public class MainActivity extends AppCompatActivity
{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
PermissionListener permissionListener = new PermissionListener()
{
@Override
public void onPermissionGranted()
{
Toast.makeText(MainActivity.this, "권한이 허가된 상태입니다", Toast.LENGTH_SHORT).show();
Log.e("권한", "권한 허가 상태");
}
@Override
public void onPermissionDenied(List<String> deniedPermissions)
{
Toast.makeText(MainActivity.this, "권한이 거부된 상태입니다", Toast.LENGTH_SHORT).show();
Log.e("권한", "권한 거부 상태");
}
};
TedPermission.with(MainActivity.this)
.setPermissionListener(permissionListener)
.setRationaleMessage("카메라 권한이 필요합니다!")
.setDeniedMessage("지금 거부하시더라도 '설정 > 권한'에서 다시 권한을 허용하실 수 있습니다")
.setPermissions()
.check();
}
});
}
}
이제 마지막으로 setPermissions() 안에 어떤 권한을 요청할 것인지를 적어주면 됩니다.
이 부분에 넣을 권한은 다양한 방식으로 넣을 수 있는데, 이 포스팅에선 카메라 권한만을 필요로 하기 때문에 아래와 같이 적겠습니다.
.setPermissions(Manifest.permission.CAMERA)
완성된 형태는 아래와 같습니다.
import android.Manifest;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;
import java.util.List;
public class MainActivity extends AppCompatActivity
{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
PermissionListener permissionListener = new PermissionListener()
{
@Override
public void onPermissionGranted()
{
Toast.makeText(MainActivity.this, "권한이 허가된 상태입니다", Toast.LENGTH_SHORT).show();
Log.e("권한", "권한 허가 상태");
}
@Override
public void onPermissionDenied(List<String> deniedPermissions)
{
Toast.makeText(MainActivity.this, "권한이 거부된 상태입니다", Toast.LENGTH_SHORT).show();
Log.e("권한", "권한 거부 상태");
}
};
TedPermission.with(MainActivity.this)
.setPermissionListener(permissionListener)
.setRationaleMessage("카메라 권한이 필요합니다!")
.setDeniedMessage("지금 거부하시더라도 '설정 > 권한'에서 다시 권한을 허용하실 수 있습니다")
.setPermissions(Manifest.permission.CAMERA)
.check();
}
});
}
}
앱을 실행시켜서 어떻게 동작하는지 확인해 보겠습니다.
정상적으로 카메라 권한을 얻었습니다. 만약 사용자가 거부할 경우 아래와 같이 설정 화면으로 이동해서 허용하도록 유도할 수 있습니다.
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 텍스트 자동 완성 기능을 만들어보자 (0) | 2021.05.03 |
---|---|
[JAVA][Android] 알림(Notification) 기능 만들기 (0) | 2021.05.02 |
[JAVA][안드로이드] 토스트 메시지 & 팝업창 띄우기 (0) | 2021.04.30 |
[Java][Android] Bottom Sheet 만들기 (0) | 2021.04.29 |
[Java][Android] Chip EditText 만들기 (0) | 2021.04.27 |