2017-04-18 5 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

、以下を行う必要があります。

  • は23以上

  • targetSdkVersionあなたは<uses-permission>と、マニフェストにも要求している権限を有していたことがあります要素

  • は、Android 6.0以上

上で実行されています3210
+0

もう一度CommonsWareに感謝します。私は最近あなたの本を買った、それは本当に良い、素晴らしい仕事だと言う必要があります! – Carlton

関連する問題