Android

[안드로이드] 퍼미션 설정(JAVA)

codeandcoffee 2024. 6. 6. 00:18
안드로이드 퍼미션 종류 및 설정 방법

안드로이드 퍼미션 종류 및 설정 방법

안드로이드 애플리케이션에서 권한(permission)은 앱이 특정 기능을 사용하거나 사용자 데이터에 접근하기 위해 필요합니다. 아래는 다양한 카테고리별로 안드로이드에서 사용할 수 있는 주요 권한과 해당 권한을 설정하는 코드 예시를 정리한 목록입니다.

네트워크 관련 권한

  • INTERNET: 네트워크 소켓을 열기 위한 권한.
  • ACCESS_NETWORK_STATE: 네트워크 연결 상태를 확인하기 위한 권한.
  • ACCESS_WIFI_STATE: Wi-Fi 연결 상태를 확인하기 위한 권한.
  • CHANGE_WIFI_STATE: Wi-Fi 연결 상태를 변경하기 위한 권한.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    

하드웨어 접근 권한

  • BLUETOOTH: 블루투스 기능을 사용하기 위한 권한.
  • BLUETOOTH_ADMIN: 블루투스 설정을 변경하기 위한 권한.
  • NFC: NFC 기능을 사용하기 위한 권한.
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.NFC" />
    

위치 관련 권한

  • ACCESS_FINE_LOCATION: GPS를 사용한 고정밀 위치 정보 접근 권한.
  • ACCESS_COARSE_LOCATION: Wi-Fi 및 셀룰러 네트워크를 사용한 대략적인 위치 정보 접근 권한.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    

저장소 관련 권한

  • READ_EXTERNAL_STORAGE: 외부 저장소 읽기 권한.
  • WRITE_EXTERNAL_STORAGE: 외부 저장소 쓰기 권한.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

SMS 관련 권한

  • SEND_SMS: SMS 메시지 보내기 권한.
  • RECEIVE_SMS: SMS 메시지 수신 권한.
  • READ_SMS: SMS 메시지 읽기 권한.
  • RECEIVE_MMS: MMS 메시지 수신 권한.
<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_MMS" />
    

전화 관련 권한

  • READ_PHONE_STATE: 전화 상태와 장치 ID에 접근하기 위한 권한.
  • CALL_PHONE: 전화 걸기 권한.
  • READ_CALL_LOG: 통화 기록 읽기 권한.
  • WRITE_CALL_LOG: 통화 기록 쓰기 권한.
  • ADD_VOICEMAIL: 음성 사서함 추가 권한.
  • USE_SIP: SIP 인터넷 전화 사용 권한.
  • PROCESS_OUTGOING_CALLS: 발신 전화 감시 및 수정 권한.
<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.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.ADD_VOICEMAIL" />
<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    

카메라와 마이크 관련 권한

  • CAMERA: 카메라 사용 권한.
  • RECORD_AUDIO: 오디오 녹음 권한.
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
    

기타 권한

  • ACCESS_BACKGROUND_LOCATION: 앱이 백그라운드에서 위치 정보에 접근하기 위한 권한.
  • READ_CONTACTS: 연락처 읽기 권한.
  • WRITE_CONTACTS: 연락처 쓰기 권한.
  • GET_ACCOUNTS: 기기에 저장된 계정 목록에 접근하기 위한 권한.
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
    

권한 요청 예제 코드 (Java & Kotlin)

Java 예제 코드:

public class MainActivity extends AppCompatActivity {
    private static final int PERMISSION_REQUEST_CODE = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (checkPermission()) {
            // Permission is already granted
        } else {
            requestPermission();
        }
    }

    private boolean checkPermission() {
        int result = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        int result1 = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
        return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
    }

    private void requestPermission() {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0) {
                boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                boolean readExternalStorageAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED;

                if (cameraAccepted && readExternalStorageAccepted) {
                    // Permissions granted
                } else {
                    // Permissions denied
                }
            }
        }
    }
}
    

'Android' 카테고리의 다른 글

[안드로이드] SQLite 사용법(Kotlin)  (0) 2024.06.07
[안드로이드] SQLite 사용법(JAVA)  (1) 2024.06.07
[안드로이드] 퍼미션 설정(Kotlin)  (0) 2024.06.06