2015-12-07 2 views
1

У меня проблема, что я беру фотографию, которую хочу сохранить во внутреннем хранилище. но я не знаю, как это сделать. Кто может предложить какое-то решение? Благодарю. Существует мой код:Сохранить фотографию во внутреннем хранилище

public class ThreeFragment extends Fragment { 


private static final String TAG = ThreeFragment.class.getSimpleName(); 
private static int RESULT_LOAD_IMAGE = 1; 
private static final int REQUEST_IMAGE_CAPTURE = 1; 
View root; 
GridView gridView; 
String mCurrentPhotoPath; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    root = inflater.inflate(R.layout.fragment_three, container, false); 
    dolist(); 
    return root; 
} 
public void dolist() { 
    gridView = (GridView) root.findViewById(R.id.gridview); 
    gridView.setAdapter(new ImageAdapter(getActivity())); 
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      switch (position) { 
       case 0: 
        openGallery(); 
        break; 
       case 1: 
        takePhoto(); 
        break; 

       case 2: 
        Log.d(TAG, "333333333333333333333"); 
        break; 
       default: 

        break; 
      } 
     } 
    }); 
} 

private void takePhoto() { 

    Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
     startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE); 
    } 
} 
private String saveToInternalSorage(Bitmap bitmap) { 
    ContextWrapper cw = new ContextWrapper(getActivity()); 
    File dic = cw.getDir("TEST", Context.MODE_PRIVATE); 

    File mypath = new File(dic, ".jpg"); 
    FileOutputStream fos = null; 
    try { 
     fos = new FileOutputStream(mypath); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
     fos.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return dic.getAbsolutePath(); 
} 

public void openGallery() { 
    Intent i = new Intent(Intent.ACTION_PICK, 
      MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
    startActivityForResult(i, RESULT_LOAD_IMAGE); 
} 

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

    if (requestCode == RESULT_LOAD_IMAGE) { 
     if (resultCode == Activity.RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
      Cursor cursor = getActivity().getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 
     } 
    } 
    else if (requestCode == REQUEST_IMAGE_CAPTURE) { 
     if (resultCode == Activity.RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap bitmap = (Bitmap) extras.get("data"); 
      saveToInternalSorage(bitmap); 

      // setPath(saveToInternalSorage(bitmap)); 
     } 

    } 
} 

} 
+0

что вы получаете в onActivityResult в миниатюре. Вы хотите сохранить исходное изображение на хранение? – dex

+0

есть. им просто сохранить его. но после сфотографирования появляется мое приложение Ошибка при доставке результата ResultInfo {who = null, request = 196609, result = -1, data = Intent {act = inline-data (имеет дополнительные функции)}} в действие {com.example. qtv.myapplication/com.example.qtv.myapplication.view.MainActivity}: java.lang.NullPointerException: uri –

+0

Существует простой способ сделать это: mTempImageFile: это путь, где вы хотите сохранить файл изображения. Uri tempURI = Uri.fromFile (mTempImageFile); Intent i = новое намерение (MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra (MediaStore.EXTRA_OUTPUT, tempURI); activity.startActivityForResult (i, CHOOSE_CAMERA_RESULT); – dex

ответ

1
*Try This : 
File mImageFile is path where you want to store you camera image file. 

Uri tempURI = Uri.fromFile(mImageFile); 
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
i.putExtra(MediaStore.EXTRA_OUTPUT, tempURI); 
activity.startActivityForResult(i, CHOOSE_CAMERA_RESULT); 


then in your onActivityResult 

@Override 
public void onActivityResultRAW(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResultRAW(requestCode, resultCode, data); 
    switch(requestCode) 
    { 
    case CHOOSE_CAMERA_RESULT: 
    { 
     if (resultCode == RESULT_OK) 
     { 
      // here you image has been save to the path mImageFile. 
      Log.d("ImagePath", "Image saved to path : " + mImageFile.getAbsoultePath()); 
     } 
    } 
    break; 
    } 
}* 
+0

sr .. может быть, у меня неправильный мой идеал. Я хочу сохранить на пути, как тот же «Этот ПК \ Nexus 5 \ Внутреннее хранилище \ DCIM \ .thumbnails". когда мы открываем его на ПК, вы можете видеть всю картину. –

+0

@AceAkatsuki вы можете хранить свое изображение там, где хотите сохранить, просто укажите этот путь, например mImageFile = Envinorment.getExternalStorageDirectory() + File.Seperator + "DCIM"; он сохранит изображение в этом месте. Пожалуйста, объясните мне, если я ошибочно понял. – dex

+0

Файл mImageFile = новый файл (Environment.getExternalStorageDirectory() + File.separator + "DCIM"); но журнал не отображается. , когда я добавляю «DCIM \\. Abc») (abc - это floder), а затем появляется ошибка. Попробуйте вызвать виртуальный метод «java.lang.String java.io.File.getAbsolutePath()» в ссылке на нулевой объект. Можете ли вы объяснить мне. Благодарю . –

0

Попробуйте:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, setImageUri()); 
cameraIntent.putExtra("return-data", true); 
mActPanelFragment.startActivityForResult(cameraIntent, ActivityConstantUtils.CAMERA_REQUEST); 

// метод

public Uri setImageUri() { 

    File file = new File(Environment.getExternalStorageDirectory().getPath(), ActivityConstantUtils.STORED_IMAGE_PATH+"/Images/WOMCamera"); 
    if (!file.exists()) { 
     file.mkdirs(); 
    } 
    ActivityConstantUtils.mCurrentPhotoPath = (file.getAbsolutePath() + "/"+"IMG_"+ System.currentTimeMillis() + ".jpg"); 
    Uri imgUri = Uri.fromFile(new File(ActivityConstantUtils.mCurrentPhotoPath)); 
    if (file.canWrite()) { 
    } 
    return imgUri; 
} 

После этого кода записи для результата:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == ActivityConstantUtils.GALLERY_INTENT_REQUEST_CODE && resultCode == Activity.RESULT_OK) { 

       String imagePath = getFilePath(data); 
    } 
    } 

private String getFilePath(Intent data) { 
     String imagePath; 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

     Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
     cursor.moveToFirst(); 

     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     imagePath = cursor.getString(columnIndex); 
     cursor.close(); 

     return imagePath; 

    } 
+0

sr но я не знаю, у вас есть ActivityConstantUtils .. где у тебя это получилось? –

+0

Статическая переменная "ActivityConstantUtils.mCurrentPhotoPath" заменяет ее глобальной или локальной переменной. DataType должен быть String. –

+0

Действительно я не понимаю. PLS объяснить это. im noob. ActivityConstantUtils - это класс. Потому что я вижу, что он вызывает дочерний метод. –

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