<blockquote>

  <p>이글은 2017년 7월에 작성 됨</p>

</blockquote>


<h1 id="마시멜로우-api-23-이상에서-권한-체크와-권한-요청하기">마시멜로우 API 23 이상에서 권한 체크와 권한 요청하기</h1>


<p>Android 6.0(API 레벨 23)부터 사용자는 앱이 설치될 때가 아니라 <strong>앱이 실행되는 중에 앱에 권한을 부여</strong>합니다. 이 접근방식에서는 사용자가 앱을 설치하거나 업데이트할 때 권한을 부여할 필요가 없으므로 앱 설치 과정이 간소화됩니다. 또한 사용자가 앱의 기능을 더 세부적으로 제어할 수 있습니다. 예를 들어, 기기 위치가 아니라 카메라에 대한 액세스 권한을 카메라 앱에 부여하도록 선택할 수 있습니다. 사용자는 앱 설정 화면으로 이동하여 언제든지 권한을 취소할 수 있습니다.</p>


<ul>

<li><p><a href="https://developer.android.com/training/permissions/requesting.html#perm-checkl">안드로이드 개발자 페이지 런타임에 권한체크</a></p></li>

<li><p><a href="https://developer.android.com/training/permissions/requesting.html#perm-request">안드로이드 개발자 페이지 런타임에 권한 요청</a></p></li>

</ul>


<h2 id="androidmanifestxml">AndroidManifest.xml</h2>


<p><code>androidmanifest.xml</code>에 필요로 하는 권한을 입력합니다.</p>


<pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag">&lt;<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.READ_CALENDAR"</span>/&gt;</span></code></pre>


<h2 id="mainactivityjava">MainActivity.java</h2>


<h3 id="권한-체크가-필요한-버전인지-확인">권한 체크가 필요한 버전인지 확인</h3>




<pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword">if</span> (Build.VERSION.SDK_INT &lt; Build.VERSION_CODES.M){

    <span class="hljs-keyword">return</span>;

}</code></pre>


<p><code>protected void onCreate(Bundle saveInstanceState)</code> 아래에 다음과 같은 코드를 사용해서 권한 설정이 제대로 되어 있는지 확인합니다.0</p>


<pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword">int</span> permissionCheck = ContextCompat.checkSelfPermission(<span class="hljs-keyword">this</span>,

        Manifest.permission.READ_CALENDAR);

<span class="hljs-keyword">if</span> (permissionCheck == PackageManager.PERMISSION_GRANTED){

    Toast.makeText(<span class="hljs-keyword">this</span>, <span class="hljs-string">"캘린더 권한이 있음"</span>, Toast.LENGTH_SHORT).show();

}<span class="hljs-keyword">else</span>{

    Toast.makeText(<span class="hljs-keyword">this</span>, <span class="hljs-string">"캘린더 권한이 없음"</span>, Toast.LENGTH_SHORT).show();

    <span class="hljs-keyword">if</span> (ActivityCompat.shouldShowRequestPermissionRationale(<span class="hljs-keyword">this</span>,Manifest.permission.READ_CALENDAR)){

        Toast.makeText(<span class="hljs-keyword">this</span>, <span class="hljs-string">"캘린더 권한설명이 필요함"</span>, Toast.LENGTH_SHORT).show();

ActivityCompat.requestPermissions(

                <span class="hljs-keyword">this</span>,

                <span class="hljs-keyword">new</span> String[] {Manifest.permission.READ_CALENDAR},

                <span class="hljs-number">1</span>);

    }<span class="hljs-keyword">else</span>{

        ActivityCompat.requestPermissions(

                <span class="hljs-keyword">this</span>,

                <span class="hljs-keyword">new</span> String[] {Manifest.permission.READ_CALENDAR},

                <span class="hljs-number">1</span>);

    }

}</code></pre>


<p>이제 앱을 실행하면 권한이 제대로 되었는지 체크 할 수 있습니다.</p>


<p>다음은 권한 체크의 결과 화면에 따른 이벤트를 줄 수 있습니다. 권한이 <code>승인</code>되었으면 어떻게 동작하고, <code>거부</code>하였을 동작하는 기능을 합니다.</p>


<p><code>CTRL</code>+<code>O</code> 키를 눌러서 아래와 같은 화면에서 onRequestPermissionResult 를 찾습니다.</p>


<p><img src="http://i.imgur.com/9MBT72U.png" alt="Imgur" title=""></p>


<pre class="prettyprint"><code class="language-java hljs ">

<span class="hljs-annotation">@Override</span>

<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onRequestPermissionsResult</span>(<span class="hljs-keyword">int</span> requestCode, @NonNull String[] permissions, @NonNull <span class="hljs-keyword">int</span>[] grantResults) {

    <span class="hljs-keyword">switch</span> (requestCode){

        <span class="hljs-keyword">case</span> <span class="hljs-number">1</span>: {

            <span class="hljs-keyword">if</span> (grantResults.length &gt; <span class="hljs-number">0</span> &amp;&amp; grantResults[<span class="hljs-number">0</span>] == PackageManager.PERMISSION_GRANTED){

                Toast.makeText(<span class="hljs-keyword">this</span>, <span class="hljs-string">"캘린더 권한을 사용자가 승인함"</span>, Toast.LENGTH_SHORT).show();

            }<span class="hljs-keyword">else</span>{

                Toast.makeText(<span class="hljs-keyword">this</span>, <span class="hljs-string">"캘린더 권한 거부됨"</span>, Toast.LENGTH_SHORT).show();

            }

            <span class="hljs-keyword">return</span>;

        }

    }

}</code></pre>


<p>메소드들을 검색하다 보면 신기한 이벤트들을 찾아 볼 수 있습니다. 정말 할 수 있는게 무궁무진 하다는 것을 알 수 있습니다.</p>

반응형

'개발 > 안드로이드' 카테고리의 다른 글

안드로이드 HTML 파싱하기 (JSOUP)  (0) 2017.07.10

+ Recent posts