2013-05-29 2 views
0

В моем приложении я выбираю изображение из галереи, чем обрезал это изображение, чем сохранял его во внешнем хранилище.Как сохранить изображение в внутренней памяти приложения, после выбора из галереи и обрезания с помощью намерения

Но если sd-card недоступен, чем проблема.

Итак, здесь я спрашиваю, как хранить изображение в внутренней памяти приложения.

Вот мой код для внешнего хранилища.

Override 
    public void onClick(View v) { 
     int outputX = 400; 
     int outputY = 400; 
     int aspectX = 1; 
     int aspectY = 1; 
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 
     intent.setType("image/*"); 
     intent.putExtra("crop", "true"); 
     intent.putExtra("aspectX", aspectX); 
     intent.putExtra("aspectY", aspectY); 
     intent.putExtra("outputX", outputX); 
     intent.putExtra("outputY", outputY); 
     intent.putExtra("scale", true); 
     intent.putExtra("return-data", false); 
     selectedImageUri = getTempUri(); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, selectedImageUri); 
     intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
     intent.putExtra("noFaceDetection", true); 

     startActivityForResult(intent, 2); 
    } 

Вот как я получаю URI из externel файла:

private Uri getTempUri() { 
     return Uri.fromFile(getTempFile()); 
    } 

    private File getTempFile() { 
     if (isSDCARDMounted()) { 

      File f = new File(Environment.getExternalStorageDirectory(), 
        TEMP_PHOTO_FILE); 
      try { 
       f.createNewFile(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       Toast.makeText(MainActivity.this, "file issue", Toast.LENGTH_LONG) 
         .show(); 
      } 
      return f; 
     } else { 
      return null; 
     } 

    } 

    private boolean isSDCARDMounted() { 
     String status = Environment.getExternalStorageState(); 

     if (status.equals(Environment.MEDIA_MOUNTED)) 
      return true; 
     return false; 
    } 

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

     if(requestCode == 2) { 
      path = selectedImageUri.getPath(); 
      imageView.setImageBitmap(BitmapFactory 
        .decodeFile(path)); 
     } 
    } 

ответ

0

Вы можете использовать Context's getCacheDir() метод для хранения изображения в кэше приложения. Используйте следующий код для хранения изображения внутри каталога кеша.

//this will create a custom directory inside cache directory 
File cacheDir = new File(this.getCacheDir(), "Custom_Directory"); 
if (!cacheDir.exists()) 
    cacheDir.mkdir(); 

//this will give you full path of cache directory. You can use this for your file 
this.getCacheDir().getAbsolutePath() 
Смежные вопросы