Intereting Posts
Добавление параметров для выбора с помощью jQuery не работает Как создать HTTP-сервер на Android, доступ к которому может получить рабочий стол (наоборот) с помощью NanoHTTPD StackOverflow в списке – Android Возможно ли включить функцию fastscroll в списке? AppBarLayout с recyclerView во вложенном фрагменте Android Twitter Fabric SDK конфликтует с Google GSON При запутывании с помощью ProGuard, -keepattribтрибуты SourceFile, LineNumberTable делают результирующий apk проще для обратной инженерии? Изменение метаданных в метаданных приложения менеджера пакетов в android Запросить разрешения во время выполнения из v4.Fragment и выполнить обратный вызов в Fragment? Состояние батареи всегда не заряжается Активность камеры, при которой uri переходит к нулевому значению при изменении ориентации экрана Имя оператора мобильной связи Trace Панель навигации Android на стороне, редактируя AOSP В ссылке Android Browser не всегда выполняется onClick, вызывающий фокус вместо Настройка JAVA_HOME для intelliJ?

BitmapFactory: невозможно декодировать поток: java.io.FileNotFoundException, даже если файл действительно существует

Я создаю простое приложение, чтобы сделать снимок. Это мой код

Button b1; ImageView iv; String TAG = "MAIN ACTIVITY"; File photo; private Uri mImageUri; private File createTemporaryFile(String part, String ext) throws Exception { File externalStorageDirectory = Environment.getExternalStorageDirectory(); File tempDir = new File(externalStorageDirectory + "/cameratest/"); if (!tempDir.exists()) { tempDir.mkdir(); } return File.createTempFile(part, ext, tempDir); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.button); iv = (ImageView) findViewById(R.id.imageView); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); try { // place where to store camera taken picture photo = createTemporaryFile("picture", ".jpg"); photo.delete(); } catch (Exception e) { Log.v(TAG, "Can't create file to take picture!"); Toast.makeText(getApplicationContext(), "Please check SD card! Image shot is impossible!", Toast.LENGTH_SHORT).show(); } mImageUri = Uri.fromFile(photo); intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(intent, 0); } }); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode == 0 && resultCode == RESULT_OK) { Log.d(TAG, mImageUri.toString()); Bitmap bitmap = BitmapFactory.decodeFile(mImageUri.toString()); iv.setImageBitmap(bitmap); } } 

Как вы можете видеть, я добавил eLog.d(TAG, mImageUri.toString()); В конце и в logcat (а также в FileNotFoundException ) я вижу эту директорию:

 03-27 00:43:30.498 30526-30526/myapplication.example.falcoleo.cameratest1 D/MAIN ACTIVITY: file:///storage/emulated/0/cameratest/picture459838058.jpg 03-27 00:43:30.499 30526-30526/myapplication.example.falcoleo.cameratest1 E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: file:/storage/emulated/0/cameratest/picture459838058.jpg: open failed: ENOENT (No such file or directory) 

Предположим, существует ли этот каталог? Spoler alert , он делает . И это не похоже на то, что изображение создается после BitmapFactory.decodeFile . Я действительно не понимаю, что я делаю неправильно. Все работает отлично, за исключением случаев, когда на самом деле нужно отображать фотографию, тогда она просто не отображает ее. Просто пусто. Как WTF m8, я просто пытаюсь сделать свою работу, не нужно сходить с ума, вы знаете.

Замените mImageUri.toString() с помощью mImageUri.getPath() .

decodeFile ожидает путь, а не строку uri.

 file:///storage/emulated/0/cameratest/picture459838058.jpg 

Удалить file:// потому что decodeFile () ожидает путь к файловой системе.

 /storage/emulated/0/cameratest/picture459838058.jpg