2016-09-26 26 views
5

Trong giả lập (tôi sử dụng genymotion) nó hoạt động tốt, nhưng khi tôi chạy nó trên một thiết bị thực tế (điện thoại của tôi là ASUS ZenFone Laser 5.0) ném một FileNotFoundExceptionFileNotFoundException: mở thất bại: EACCES (Permission denied)

java.io.FileNotFoundException: /storage/emulated/0/cam20160926_075819.jpg: mở thất bại: EACCES (Permission denied)

imgBitmap = MediaStore.Images.Media.getBitmap (cr, selectedImage);

đây là phương pháp onActivityResult()

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode){ 
      case CAMERA_REQUEST: 
       if (resultCode == Activity.RESULT_OK){ 
        Uri selectedImage = imageUri; 
        getActivity().getContentResolver().notifyChange(selectedImage, null); 
        ContentResolver cr = getActivity().getContentResolver(); 
        Bitmap imgBitmap; 
        try { 
         imgBitmap = MediaStore.Images.Media.getBitmap(cr, selectedImage); 

         accountPhoto.setImageBitmap(imgBitmap); 
        } catch (IOException e) { 
         e.printStackTrace(); 
         Toast.makeText(getActivity().getApplicationContext(), "Something went wrong while taking a photo", Toast.LENGTH_LONG).show(); 
         Log.e("Camera", e.toString()); 
        } 

       } 
     } 
    } 

tôi đọc một số câu hỏi có liên quan và các giải pháp về EACCES này, và có vẻ như vấn đề là về việc cho phép tôi:

<uses-feature android:name="android.hardware.camera2" android:required="true"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

tôi thiếu một cái gì đó? cảm ơn vì đã trả lời

+0

bạn sử dụng phiên bản SDK và Android nào? –

+0

Tôi đang ở marshmallow 6.0 bây giờ api lvl 23. và phiên bản sdk tối thiểu của tôi trong ứng dụng của tôi là api lvl 18 –

+0

vì vậy tôi không thể thấy yêu cầu cấp phép của bạn về Đọc và ghi bộ nhớ ngoài? –

Trả lời

1

bạn phải yêu cầu sự cho phép trước khi bạn bắt đầu hướng dẫn bạn bởi vì sự cho phép này được coi là nguy hiểm trong Marshmallow:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && 
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 
    { 
     requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, RESULT); 
    } 
    else 
    { 
    //your code 
    } 
+0

Tôi nên đặt cái này ở đâu? –

+0

bạn đặt nó trước khi hướng dẫn sử dụng sự cho phép –

+0

im sử dụng phân đoạn trong vấn đề này, tôi không thể tìm thấy khởi tạo RESULT –

0

Tôi nghi ngờ WRITE_EXTERNAL_STORAGE ghi đè quyền đọc READ_EXTERNAL_STORAGE. Nếu bạn nhìn vào documentation bạn sẽ thấy rằng trước đây cũng cho phép đọc từ bộ nhớ.

Hãy thử và xóa thuộc tính android:maxSdkVersion và xem có hoạt động hay không. Tôi nghi ngờ rằng thiết bị của bạn chạy một phiên bản SDK> 18.

Kiểm tra câu trả lời này cho biết thêm: https://stackoverflow.com/a/15270626/425238

+0

cảm ơn bạn đã trả lời, nhưng nó vẫn không hoạt động. –

Các vấn đề liên quan