2017-02-10 6 views
-1

이미지를 서버로 보내려는 프로젝트에서 작업 중입니다. 이미지를 서버에 보내면 marshmallow를 제외한 모든 버전이 정상적으로 작동합니다.열기 실패 : 서버에 이미지 업로드 중 marshmallow에서 EACCES (사용 권한이 거부되었습니다.)

갤러리에서 이미지를 가져 오는 동안 권한이 있습니다. 이미지를 보낼 수있는 특별한 허가가 있습니까?

private static int PICK_IMAGE_REQUEST = 1; 

if (Build.VERSION.SDK_INT <= 19) { 
       Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, PICK_IMAGE_REQUEST); 
      } else if (Build.VERSION.SDK_INT > 19) { 
       Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, PICK_IMAGE_REQUEST); 

      } 
+0

Downvoter 설명하십시오 ..? 왜 당신 downvoted – Sasi

답변

1

의 AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
해결됩니다 활동

private static final int REQUEST_STORAGE = 112; 


    if (Build.VERSION.SDK_INT >= 23) { 
    String[] PERMISSIONS = {android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE}; 
    if (!hasPermissions(mContext, PERMISSIONS)) { 
     ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST_STORAGE); 
    } else { 
     Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(i, PICK_IMAGE_REQUEST); 
    } 
} else { 
    Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(i, PICK_IMAGE_REQUEST); 
} 

/*get Permissions Result*/ 
@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case REQUEST_STORAGE: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, PICK_IMAGE_REQUEST); 
      } else { 
       Toast.makeText(mContext, "The app was not allowed to write to your storage.", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

    /*check permissions for marshmallow*/ 

private static boolean hasPermissions(Context context, String... permissions) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
     for (String permission : permissions) { 
      if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 
+0

도움 주셔서 감사합니다. 그 일 – Sasi

1

줄 수있는 한 가지 더 많은 인터넷 허가가 있습니다. 권한이 권한은 런타임에 부여 할 필요가 마시맬로 같이 부여 된 경우

"<uses-permission android:name="android.permission.INTERNET" />" 

또한 .. 설정으로 이동하고 확인 아래 링크

확인을 .... 할 https://developer.android.com/training/permissions/requesting.html

희망 당신의 문제는 ...이 함께

+0

답변 해 주셔서 감사합니다. 그것의 일했다. – Sasi