2017-02-03 3 views
0

나는 android를 처음 사용했습니다. 사용자 지정 클래스에서 사용 권한을 부여하려고합니다. 나는이맞춤 클래스를 사용하여 사용 권한 부여

public interface RequestPermissionsResultInterface 
{ 
    void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults); 
} 

public interface PermissionManagerInterface 
{ 
    void onPermissionGranted(String message, int requestCode); 
    void onPermissionDenied(String message, int requestCode); 
} 

public class PermissionManager 
{ 
    private Activity mActivity; 
    private static volatile PermissionManagerInterface mManagerInterface; 


    public static PermissionManager getInstance(Context context) 
    { 
     if (mPermissionManager == null) 
     { 
      synchronized (PermissionManager.class) 
      { 
       if (mPermissionManager == null) 
       { 
        mPermissionManager = new PermissionManager(context); 
       } 
      } 
     } 
     return mPermissionManager; 
    } 

    private boolean isReadStorageAllowed() 
    { 
     int result = ContextCompat.checkSelfPermission(this.mActivity, Manifest.permission.READ_EXTERNAL_STORAGE); 
     return ((result == PackageManager.PERMISSION_GRANTED)); 
    } 

    public RequestPermissionsResultInterface askPermission(
     Activity mActivity, 
     String permissionName, 
     final PermissionManagerInterface managerInterface, 
     final int requestCode) 
    { 
     boolean isReadExternalStorageAllowed = isReadStorageAllowed(); 
     if(isReadExternalStorageAllowed == false) 
     { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity, permissionName)) 
      { 
       final AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); 
       builder.setMessage("Please allow all permissions in App Settings for additional functionality."); 
       builder.setCancelable(false); 
       builder.setPositiveButton("Allow", new DialogInterface.OnClickListener() { 
        public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) { 
         managerInterface.onPermissionGranted("Permission Granted", requestCode); 
        } 
       }); 
       builder.setNegativeButton("Deny", new DialogInterface.OnClickListener() { 
        public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) { 
         managerInterface.onPermissionDenied("Permission Denied", requestCode); 
        } 
       }); 

       final AlertDialog alert = builder.create(); 
       alert.show(); 
      } 
     } 
     else managerInterface.onPermissionGranted("Permission Already Granted", requestCode); 
    } 
} 

같은 두 개의 인터페이스와 싱글 톤 클래스를 가지고 그리고 여기에 내가 다시

PermissionManager permManager = PermissionManager.getInstance(); 
permManager.askPermission(
      MainActivity.this, 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
      mPermissionManagerInterface,    // assume this exists 
      EXTERNAL_STORAGE_PERMISSION_CODE); 

MainActivity

에서이 클래스를 사용하는 방법입니다 ....이 지속되지 않습니다. 권한을 부여한 다음 앱을 중지했다가 다시 시작하면 .... 권한을 다시 요청하는 중입니다. 무엇이 잘못 될 수 있습니까 ?? 감사합니다

+0

Android를 처음 사용하는 경우 문서화 된 방식으로 시도해보고 나면 먼저 자신의 스핀을 넣어보십시오. – Kuffs

답변

0

"사용자 지정"방법을 선택하는 경우 여전히 특정 작업을 처리해야합니다.

  1. 이전에 권한을 요청했으나 거부 된 경우에만 해당됩니다. 당신은 "권한을 부여하십시오"라는 대화 상자를 표시하기 위해 그것을 사용하는 것 같지만 실제로 시스템에 권한 요청 대화 상자를 표시하도록 요구하지는 않습니다.

  2. 실제로 사용 권한을 요청하는 명령은 ActivityCompat.requestPermissions입니다. 코드에서이를 볼 수 없습니다. 사용자는 실제로 요청하지 않는 한 권한을 부여 할 수 없습니다.

  3. onRequestPermissionsResult은 권한이 부여되었다고 말하는 인터페이스입니다.

전체 지침은 설명서에 있습니다. 안드로이드 문서에서

https://developer.android.com/training/permissions/requesting.html

+0

고마워요. 그러나 그것은 그 문제의 일부일뿐입니다. 아래 내 대답을 참조하십시오. –

+0

다시 살펴보면 2 번에서 권한을 요청하지 않는다고 말한 것을 볼 수있을 것입니다. 그래서 나는 정말로 당신에게 완전한 대답을주었습니다. 답변을 수락 \지지하십시오. http://stackoverflow.com/help/someone-answers 이것은 포럼이 아닙니다. 고마워요 – Kuffs

+0

예. 어떤 의미에서 귀하의 대답은 완전합니다. 내 사용자 정의 대화 상자가이를 처리 할 수있을 것으로 예상 했었습니다 (잘못). 그렇지 않았습니다. 사용자 정의 대화 상자를 사용하는 경우 ActivityCompat.requestPermissions를 통해 권한을 요청해야합니다. 그래서 두 개의 대화 상자가 나타납니다. (내 사용자 정의 대화 상자가 쓸모 없다는 것을 알게되어 귀찮습니다.) 나는 이해가되기를 바랍니다. 당신에게 아직 완전한 신용. 나는 15 가지의 평판이 없으므로 upvote 할 수 없다. –

0

참고 : 앱) (requestPermissions를 호출하면, 시스템은 사용자에게 표준 대화 상자를 보여줍니다. 앱에서 해당 대화 상자를 구성하거나 변경할 수 없습니다.

나는 결코 작동하지 않을 사용자 지정 대화 상자를 통해 권한을 부여하려고 시도하고있었습니다. 이것은 문제의 일부일뿐입니다.

사용자 정의 대화 코드 섹션에서 권한을 요청하지 않았습니다 (표준 + 사용자 정의 대화 상자의 두 가지 대화 상자가 표시되기 때문에 좋지 않습니다). 따라서 사용자 정의 대화 상자를 제거하고 표준 대화 상자를 사용합니다.

명성은 커프스으로 나에게 올바른 방향으로 나를 넣어주기 때문에.

관련 문제