2017-04-18 1 views
0

런타임에 외부 저장소를 읽을 수있는 권한을 요청하고 싶습니다. Button을 클릭하면 앱에서 권한을 요청해야하지만 버튼을 클릭하면 대화 상자가 표시되지 않습니다. 코드 (이것은 Fragment에서이다) : 대화 요청 권한 여기에 표시하지 않는 이유Android : 요청시 런타임 권한이 없습니까?

private Button photo; 

    //Constants 
    private static final int GALLERY_INTENT = 2339; 
    private static final int REQUEST_EXTERNAL_STORAGE = 4435; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_profile, container, false); 

     photo = (Button) rootView.findViewById(R.id.photoButton); 
     photo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //start permission check for gallery 
       //check if permission is granted 
       if(ActivityCompat.checkSelfPermission(getContext(), 
         Manifest.permission.READ_EXTERNAL_STORAGE) 
         != PackageManager.PERMISSION_GRANTED){ 
        //if permission is not granted, ask for permission. 
        ActivityCompat.requestPermissions(getActivity(), 
          new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
          REQUEST_EXTERNAL_STORAGE); 
       }else{ 
        //if permission already granted, start gallery intent. 
        uploadPhotoToFirebase(); 
       } 

      } 
     }); 


     return rootView; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){ 

      Uri uri = data.getData(); 

      StorageReference storageReference = FirebaseStorage 
        .getInstance() 
        .getReference("profile_images/"+FirebaseAuth 
          .getInstance() 
          .getCurrentUser() 
          .getUid() 
        ); 

      storageReference.putFile(uri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) { 
        //File successfully uploaded 
       } 
      }).addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception e) { 
        //File upload not successful 
       } 
      }); 

     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode){ 
      case REQUEST_EXTERNAL_STORAGE: 
       if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
        //Permission to read external storage GRANTED 
        uploadPhotoToFirebase(); 

       }else{ 
        //Permission to read external storage DENIED 
       } 
     } 
    } 

    private void uploadPhotoToFirebase(){ 
     Intent intent = new Intent(Intent.ACTION_PICK); 
     intent.setType("image/*"); 
     startActivityForResult(intent, GALLERY_INTENT); 
    } 

} 

누구나 알고? 대화 상자가 표시하려면

+0

if 블록 내부에 중단 점을 설정하면'ActivityCompat.requestPermissions' 줄에 도달합니까? –

+0

@AndrewBrooke 1 분 줘 봐요! – Carlton

+1

매니페스트에 올바른 targetSdk가 있습니까? –

답변

1

, 당신은해야합니다

  • targetSdkVersion (23)의 이상이 높은

  • <uses-permission>와 함께, 매니페스트도 요청하는 권한 (들)을 가지고 요소

  • 은 안드로이드 6.0 이상을 실행중인

될3210
+0

CommonsWare에게 다시 한 번 감사드립니다. 나는 최근에 당신의 책을 샀습니다. 정말 좋은 직장이라고 말해야합니다! – Carlton

관련 문제