Android ImageView SDCard - PullRequest
       14

Android ImageView SDCard

0 голосов
/ 24 декабря 2011

Я пытаюсь прочитать файл изображения из /mnt/sdcard/image.jpg в мой ImageView.Вот мой код:

Bitmap bmp = BitmapFactory.decodeFile("/mnt/sdcard/image.jpg");     
webImage.setImageBitmap(bmp);

У меня есть разрешение на запись во внешнее хранилище.

Мой код говорит, что bmp имеет значение null, даже если изображение находится в корневом каталоге (я иду на диск и диск image.jpg.)

Что я делаю неправильно?

Ответы [ 5 ]

2 голосов
/ 24 декабря 2011

Может быть два случая:

1) Если изображение находится в корневой папке SDCard, к нему можно получить доступ через

 Environment.getExternalStorageDirectory().toString + File.separator + "yourimage.jpg"

2) Но я думаю, что в вашем случае именно в / mnt / sdcard / external_sd ваша карта памяти устройства в этом случае попробуйте это:

Environment.getExternalStorageDirectory().toString + File.separator + "external_sd"  + File.separator + "yourimage.jpg"

Замените два вышеупомянутых пути на ваш в BitmapFactory.decodeFile("Replace Here...")

1 голос
/ 24 декабря 2011

Спасибо, мне удалось это решить. Вот что я нашел:

  1. Я пошел в проект> чистый
  2. Я отключил телефон от компьютера. Когда он подключен, SD монтируется, и вы не можете просматривать данные.
  3. Имя изображения не может начинаться с цифр. Я использую SDK 7.
  4. Я просмотрел LogCat и не получил никаких ошибок, однако сохранение в другие системные области (например, /Android/Data/) вызвало FileNotFoundException - ошибку разрешений.

    File destination = new File(Environment.getExternalStorageDirectory(), "image" + 
    DateHelper.getTodaysDate() + "_" + DateHelper.getCurrentTime() + ".jpg");
    
    private View.OnClickListener listener = new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Add extra to save full-image somewhere
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
      Uri.fromFile(destination));
        startActivityForResult(intent, REQUEST_IMAGE);
      }
    };
    
1 голос
/ 24 декабря 2011

Я подозреваю, что карта с изображением не смонтирована в /mnt/sdcard/.

Поскольку вы используете устройство Motorola, есть вероятность, что у вас есть два запоминающих устройства (см. этот список , если ваше устройство там, это так) .В этой ситуации вам нужно использовать API внешнего хранилища Motorola , чтобы получить путь к вашему второму запоминающему устройству.

Также в целом: Вы не можете полагаться на пути жесткого кодирования к SD-карте, подобные этой .Точка монтирования отличается на разных устройствах.Или могут называться по-разному, некоторые устройства могут иметь флэш-память вместо карты и т. Д.Вкратце: то, что работает на вашем телефоне, ломается на других.Вы можете прочитать надежный путь к первичному внешнему хранилищу, вызвав вместо этого Environment.getExternalStorageDirectory().

0 голосов
/ 24 декабря 2011

Ваш код в порядке. Просто проверьте, пишете ли вы правильный путь SD-карты или нет. Возможно, по этой причине вы получаете нулевое растровое изображение.

И «разрешение на запись во внешнее хранилище» предназначено для записи на SD-карту, а не для чтения с SD-карты. Сделайте эту концепцию понятной.

0 голосов
/ 24 декабря 2011

Пожалуйста, проверьте LogCat для получения дополнительной информации.

Полагаю, у вас есть устройство Samsung. У Samsung, как правило, есть папка external_sd, поэтому вы, возможно, добавили ее не на ту SD-карту, поскольку у Samsung часто есть внутренняя и внешняя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...