2017-11-18 15 views
-6

저는이 질문이 여러 번 전에 물었다는 것을 알고 있습니다. 정확히 무엇을해야하는지 또는 정확히 무엇을 해야할지 이해할 수 없기 때문에 여전히 작동하지 않습니다.permission.WRITE_CALENDAR : manifest.xml에 선언되어 있지만 권한이 없습니다.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.user.neuertestdiesenbenutzen"> 
    <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 
    <uses-permission android:name="android.permission.READ_CALENDAR" /> 

    <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=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

내 MainActivity의 모습을 다음과 같이 주어진 대답은 나를 위해 작동하지 않았다 .. 을 어쨌든, 따라서 ... 달력에 이벤트를 추가하려면, 내 매니페스트에 permission.WRITE_CALENDAR 추가 그 :

package com.example.user.neuertestdiesenbenutzen; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     CalManager c = new CalManager(getApplicationContext()); 
     int permissionCheck = 
      ContextCompat.checkSelfPermission(MainActivity.this, 
      Manifest.permission.WRITE_CALENDAR); 
     if(permissionCheck== PackageManager.PERMISSION_GRANTED) { 
      Log.d("mychecks", "Permission granted"); 
      c.addEvToCal(); 
     } 
     else{ 
      Log.d("mychecks", "Permission denied"); 
     } 
    } 
} 

그러나 permi를 인식하지 못합니다. ssion과 나는 결과를 얻는다 : Permission denied.

누구나이 상황에서 이해하기 쉬운 방법으로 설명 할 수 있습니까?

도움 주셔서 감사합니다. 다음 무료 질문이 저를 요구하는 경우

+0

TL보다이

ActivityCompat.requestPermissions(Activity.this, new String[]{Manifest.permission.WRITE_CALENDAR}, 1);// pass here permission request code to handle permission result 

같은 권한을 요청; 닥터 : 당신의 권한 검사가 실패하면 당신이 요청해야 'requestPermissions()'를 통해 허가를받은 사용자 –

답변

0

이 있는지 확인하십시오 귀하의 프로젝트 것을

public static final String[] NECESSARY_PERMISSIONS = new String[] { 

     Manifest.permission.WRITE_CALENDAR, 

    }; 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ContextCompat.checkSelfPermission(PasswordSetupActivity.this, 
        Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { 

       new Handler().postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         ActivityCompat.requestPermissions(
           (Activity) PasswordSetupActivity.this, 
           NECESSARY_PERMISSIONS, 123); 

        } 
       }, 1400); 
      } 

     } 

:

0

당신이 실행하려면 시간이 권한을 시도 6.0 버전

이상 시간이 권한을 실행하는 데 필요한 targetSdkVersion23 또는 그 이상

시도해보십시오.

이 허용 한 사용자를 알 수있는 onRequestPermissionsResult에 권한을 허가 결과를 처리하거나하지

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case 1: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        c.addEvToCal(); 
        // permission was granted, yay! Do the 
        // contacts-related task you need to do. 

       } else { 

        // permission denied, boo! Disable the 
        // functionality that depends on this permission. 
       } 
       return; 
      } 

     } 
    } 
+0

하, 고맙습니다. D 잘 처리됩니다! 하지만 제 이해를 위해서 : 1400과 123은 무엇을합니까? 그리고 한번만 또는 앱을 다시 시작할 때마다 permissionrequest를 받아 들여야합니까? – Zimbaa

+0

@Zimbaa 1400은 처리기 밀리 초 단위의 시간이고 123은 권한 코드를 처리합니다. 결과를 확인하려면 아래 내 세부 정보를 확인하십시오. – Prem

+1

아, 알겠습니다. 답 : D 답장을 보내 주셔서 감사합니다! : D – Zimbaa