2015-07-07 2 views
0

Я хочу получить и сохранить фотографию с камеры Android. Это код:EACCES (Разрешение отказано) в использовании камеры Android

public void avviaFotocamera(View v){ 
     this.launchCamera(); 
    } 

    private void launchCamera() { 
     try { 
      mOutputFile = new File(getExternalStorageDirectory(), "temp.jpg"); 
      Intent intentCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, 
        Uri.fromFile(mOutputFile)); 
      startActivityForResult(intentCamera, CAMERA_REQUEST); 
     } catch (Exception e) { 
      Toast t = Toast.makeText(this, "Si è verificato un errore durante l'acquisizione dell'immagine:\n" + e.toString(), Toast.LENGTH_LONG); 
      t.show(); 
     } 
    } 

     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      if(requestCode == CAMERA_REQUEST) { 
       try { 
        Bitmap datiFoto = android.provider.MediaStore.Images.Media.getBitmap(this.getContentResolver(), 
             Uri.fromFile(mOutputFile)); 
        saveBitmap(datiFoto); 
        mOutputFile.delete(); 
       } catch (Exception e) { 
        Toast t = Toast.makeText(this, "Si è verificato un errore durante l'acquisizione dell'immagine:\n" + e.toString(), Toast.LENGTH_LONG); 
        t.show(); 
       } 
      } 
     } 

    private void saveBitmap(Bitmap datiFoto) { 
     try { 
      //Nome del file da assegnare all'immagine 
      final String fileName = "prova.jpg"; 
      FileOutputStream out = new FileOutputStream(getExternalStorageDirectory()+fileName); 
      datiFoto.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     } catch (Exception e) { 
      Toast t = Toast.makeText(this, "Si è verificato un errore durante il salvataggio dell'immagine:\n" + e.toString(), Toast.LENGTH_LONG); 
      t.show(); 
      e.printStackTrace(); 
     } 
    } 

однако я получаю эту ошибку: java.io.FileNotFoundException: /prova.jpg: Не удалось открыть: EACCES (нет прав). Это проявляется, когда я добавить все необходимые разрешения:

<uses-sdk 
     android:maxSdkVersion="22" 
     android:minSdkVersion="15" 
     android:targetSdkVersion="15" /> 

    <uses-permission 
     android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
     android:maxSdkVersion="22" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission 
     android:name="android.permission.READ_EXTERNAL_STORAGE" 
     android:maxSdkVersion="22" /> 
    <uses-permission android:name="android.permission.SET_DEBUG_APP" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS"/> 
    <uses-feature android:name="android.hardware.camera"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="com.javapapers.android.maps.path.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 

Как я могу это исправить ??

ответ

1

похоже, что вы пытаетесь сохранить файл как /prova.jpg, который будет находиться в корневом каталоге устройства. Ваше приложение не может хранить файлы там. Оказывается, что эта линия не работает, как ожидалось:

FileOutputStream out = new FileOutputStream(getExternalStorageDirectory()+fileName); 

Возможно попробовать:

File outFile = new File(Environment.getExternalStorageDirectory(), "prova.jpg"); 
FileOutputStream out = new FileOutputStream(outFile);