2012-03-21 4 views
0

Привет, У меня есть галерея в моем приложении, которая показывает изображение в изображении, когда вы нажимаете на миниатюру. Я настраиваю прослушиватель длинного клика для диалогового окна предупреждения, в котором есть две кнопки для установки в качестве обоев и один для совместного использования. У меня есть намерение долевого участия, и кэш получения чертежа несколько работает. Он работает в эмуляторе, но не на моем телефоне. Я использовал многие примеры на этом сайте, чтобы добиться этого, но он вообще не работает. он сохраняет силу закрытия приложения на моем телефоне. любая помощь приветствуется.Ошибка файловой системы Android только для чтения

       alertDialog.setButton2("Share", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 

          imgView.setDrawingCacheEnabled(true); 
          Bitmap b = imgView.getDrawingCache(); 
          File sdCard = Environment.getExternalStorageDirectory(); 
          File file = new File(sdCard.getAbsolutePath() + "image.jpg"); 

          try { 
           file.createNewFile(); 
           OutputStream fos = null; 
           fos = new FileOutputStream(file); 
           b.compress(CompressFormat.JPEG, 100, fos); 
           fos.flush(); 
           fos.close(); 
          } catch (FileNotFoundException e) { 

           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } catch (IOException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 

          Log.d("Save Example", "Image saved."); 

          Intent shareIntent = new Intent(Intent.ACTION_SEND); 
          Uri phototUri = Uri.parse("file:///sdcard/image.jpg"); 
          shareIntent.setData(phototUri); 
          shareIntent.setType("image/jpeg"); 
          shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri); 
          startActivity(Intent.createChooser(shareIntent, "Share Via")); 
         } 

        }); 

      alertDialog.show(); 
      return true; 
     } 
    }); 

Update: это, кажется, проблема с

b.compress(CompressFormat.JPEG, 95, fos); 

он продолжает говорить, что нулевой указатель.

Выводит нулевой указатель на самом деле является ошибкой read_only. Так как на самом деле он не записывает файл, я получаю файловую систему только для чтения ioexception. Почему он это делает?

+0

Прежде чем вы начнете писать, вам нужно просмотреть разрешения каталога. Вы должны понимать основные разрешения файловой системы из UNIX для выполнения этого анализа. – JoxTraex

+0

Вы используете разрешение записи в файле манифеста ?? –

+0

да, у меня есть write.external.storage в манифесте – Pestilence

ответ

0

ОК, вот что я в итоге сделал, чтобы получить это, чтобы поделиться фотографиями на тот случай, если другим это понадобится. Оказывается, мой ImageView не отображался как BitMap, поэтому он делал файлы без ничего. Поэтому вместо этого я просто назову выталкиваемый из его положения и сохраняющий это. Это намного более чистый код для этой простой галереи. У меня есть это в диалоговом окне предупреждения, но его можно также установить на обычную кнопку.

   alertDialog.setButton2("Share", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int which) { 

          long currentTime = System.currentTimeMillis(); 
          imgView.setDrawingCacheEnabled(true); 
          String newFolder = "/CFW"; 
          String extStorageDirectory = Environment 
            .getExternalStorageDirectory() 
            .toString(); 
          File sdCard = new File(extStorageDirectory 
            + newFolder); 
          sdCard.mkdir(); 

          File file = new File(sdCard.getAbsolutePath() 
            + "/cfw" + currentTime + ".jpg"); 

          try { 
           InputStream is = getResources() 
             .openRawResource(pics[position]); 
           OutputStream os = new FileOutputStream(file); 
           byte[] data = new byte[is.available()]; 
           is.read(data); 
           os.write(data); 
           is.close(); 
           os.close(); 
          } catch (FileNotFoundException e) { 

           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } catch (IOException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 

          Log.d("Save Example", "Image saved."); 

          Intent shareIntent = new Intent(
            Intent.ACTION_SEND); 
          Uri photoUri = Uri 
            .parse("file:///sdcard/CFW/cfw" 
              + currentTime + ".jpg"); 
          shareIntent.setData(photoUri); 
          shareIntent.setType("image/jpeg"); 
          shareIntent.putExtra(Intent.EXTRA_STREAM, 
            photoUri); 
          startActivity(Intent.createChooser(shareIntent, 
            "Share Via")); 
         } 

        }); 

      alertDialog.show(); 
      return true; 
     } 
    }); 

} 
Смежные вопросы