본문 바로가기
  • fishing...
  • eating...
MISCELLANEOUSNESS

안드로이드 권한의 종류

by 회색뿔 2010. 9. 29.


안드로이드는 사용하고 쉽다. 또한 쉽게 어플을 개발할 수 있는 환경을 갖추고 있다.

그럼에도 불구하고 어플을 만들다 보면 더욱 세세한 작업을 필요로 할 때가 있다. 이럴때 운이 좋게 코드 몇줄로 똑딱똑딱 해서 되는 경우도 있지만, 환경 제한에 걸려서 삽질을 하다 지옥을 맛보게 될 수도 있다.

그전에 시도하려고 하는 기능이 접근 권한이 있는지부터 확인을 하고 시작하는 게 정신건강에 이로울 것이다.
실제로 삽질을 열심히 하고 나서 돌아봤더니 권한 설정하고 몇줄의 추가로 충분히 되는 기능이 있었다.

삽질을 하다보면 시간도 흘르고 삽도 무뎌지기 마련이다. 이런 상태가 지속되면 포기하는 이가 속출하기 마련이다.
그래서 알아보고자 한다.

안드로이드 권한의 종류(Kind ofandroid.Manifest.permission)

android.Manifest.permission은 java.lang.object를 상속받은 클래스로서 가지는 타입은 String이다.

GPS 관련 Permission
ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION

Camera 관련 Permission
CAMERA

SMS 관련 Permission
SEND_SMS, READ_SMS, WRITE_SMS

그림 1] http://developer.android.com/reference/android/Manifest.permission.html의 내용 중 발췌




위 많은 permission 중에서 CAMERA의 권한을 이용해서 카메라를 이용 할 수 있는 간단한 프로그램을 작성해 보았다.

그림 2] CAMERA permission의 상세 내용 중 반드시 확인할 내용

위 처럼 세세한 내용을 확인하기 위해서는 각각의 값을 누르면 되는데 중점적으로 확인 할 내용은 지원 가능한 최소 API레벨이 되겠다.
Constant Value : "android.permission.CAMERA" 라는 부분이 있는데 이 내용을 'Manifest.xml'파일에 추가적으로 적어주면 이제 이 권한을 사용할 수 있는 준비가 완료된 것이다.

그림 3] Android Menifest.xml 파일 스크린 샷

다른 프로젝트에서 스샷을 떠왔기 때문에 프로젝트의 정보는 지웠습니다.

그런데 이쯤에서 드는 생각이 있을거라 생각된다. Intent를 이용해서 카메라를 사용하면 돼지 왜?! 굳이 귀찮게 이렇게 하느냐고 하실 수도 있다. 결정적인 차이는 권한을 이용하게 되면 카메라를 직접제어할 수 있다는 것이 Intent를 사용하는 것과 다르겠다. 

지금 작업하고 있는 프로젝트가 Intent에서 카메라 어플을 호출해서 사용하는 것 이상의 효과와 기능을 추가하고 싶다면 카메라를 직접 제어할 필요성이 있게 된다. 이때는 위의 방법대로 권한을 주면 되는 것이고, 기능이 크게 필요없다면 Intent를 이용하면 되겠다.


공부했으니까 한번 써봤다.

그림 4] 카메라 구동 스크린



Manifest.xml

    
        
            
                
                
            
        

    
    


 


main.xml






aaa.java
import java.io.IOException;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class aaa extends Activity implements SurfaceHolder.Callback{
	
	private Camera camera;
	public static final String FOCUS_MODE_AUTO = "auto"; 
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        SurfaceView surface = (SurfaceView)findViewById( R.id.camsurface );
        SurfaceHolder holder = surface.getHolder();
        
        holder.addCallback(this);
        holder.setType( SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS );
        //holder.setFixedSize(400, 300);
    }

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		
		//if( mediaRecorder == null )
		{
			try {
				camera = Camera.open();
		        
				camera.setPreviewDisplay(holder);
				camera.startPreview();
			}catch( IOException E )
			{
				Log.d("CAMERA", E.getMessage());
			}
		}
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		camera.stopPreview();
		camera.release();
	}
}
표1, 그림1, 2는 인용을 목적으로 http://develop.android.com/reference 에서 발췌하였습니다.


'MISCELLANEOUSNESS' 카테고리의 다른 글

맥북 키보드와 단축키  (0) 2010.10.07
갤럭시S 메모리 관리하기.  (2) 2010.09.26
블러그 열심히하면 영화표가 공짜?!  (8) 2010.09.24