2014-12-16 4 views
0

У меня была проблема при попытке получить путь к изображению из захваченного изображения. Когда моя кнопка камеры по щелчку:Android получить путь к изображению из снятого изображения

takePickBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(
        android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(Intent.createChooser(cameraIntent, "Select Picture"), REQUEST_IMAGE_CAPTURE); 
     } 
    }); 

А потом коды, где я пытаюсь загрузить захваченное изображение для просмотра изображения и получить строку, чтобы передать его асинхронным Http сообщение:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    try { 
     // When an Image is picked 
     if (requestCode == REQUEST_IMAGE_CAPTURE 
       && resultCode == RESULT_OK) {    
      final ContentResolver cr = getContentResolver(); 
      final String[] p1 = new String[] { 
       MediaStore.Images.ImageColumns._ID, 
       MediaStore.Images.ImageColumns.DATE_TAKEN 
        }; 
      Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC"); 
      if (c1.moveToFirst()) { 
      String uristringpic = "content://media/external/images/media/" +c1.getInt(0); 
      Uri uri = Uri.parse(uristringpic); 
       try { 
        Bitmap bm = android.provider.MediaStore.Images.Media.getBitmap(cr, uri); 
       } finally { 

       } 
       params.put("filename", uristringpic); 
      } 
     } else { 
      Toast.makeText(this, "You haven't picked Image", 
        Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG) 
       .show(); 
    } 

} 

Однако, сделав это, захваченное изображение уже настроено на изображение. Но затем, когда я пытаюсь распечатать uristringpic, он пуст. Есть идеи?

Заранее спасибо.

ответ

1

Может быть, вы должны попробовать, как этот л

Uri photoUri; 

takePickBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(
        android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      photoUri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues()); 
      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 
      startActivityForResult(Intent.createChooser(cameraIntent, "Select Picture"), REQUEST_IMAGE_CAPTURE); 
     } 
    }); 

Теперь после того, как изображение принято у вас есть URI изображения в photoUri вар.

Если вам нужен реальный путь просто использовать

public static String getPathFromMediaUri(@NonNull Context context, @NonNull Uri contentUri) { 
    Cursor cursor = null; 
    try { 
     String[] proj = {MediaStore.Images.Media.DATA}; 
     cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 
+0

Но мне нужно, чтобы установить изображение, снятое на мой взгляд, изображения и в то же время, мне нужно, чтобы получить строку imgPath передать его как PARAMS к моему servlet – hyperfkcb

+0

@Denise try imgPath = getPathFromMediaUri (photoUri); Bitmap bitmap = BitmapFactory.decodeFile (imgPath); ImageView.setImageBitmap (bitmap); – Stepango

+0

Нет, с этими кодами изображение не настроено на imgView после захвата фотографии – hyperfkcb

0

Или вы можете вставить URI putExtra, прежде чем начать намерение камеры, где изображение будет сохранено как только пользователь берет фотографию, как этот

создать класс

public class UriHelper { 
Context mContext; 

public UriHelper(Context context) { 
    mContext = context; 
} 

// >> CHECK IF SD CARD IS MOUNTED 
// >> USE environment.getExternalStorageState() 

// 1) GET EXTERNAL STORAGE DIRECTORY 
// 2) CREATE THE SUBDIRECTORY 
// 3) CREATE A FILE NAME 
// 4) CREATE THE FILE AND RETURN ITS URI 
// >> use uri.fromFile() 
public Uri getFileUri() { 

    File mediaFile; 
    if (isExternalStorageAvailable()) { 
     // 1) Get the external storage directory 

     String appName = mContext.getString(R.string.app_name); 
     Log.i(LOGTAG, "app name is " + appName); 
     File mediaStorageDir = new File(
       Environment 
         .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
       appName); 

     // 2) Create our subdirectory 
     if (!mediaStorageDir.exists()) { 
      Log.i(LOGTAG, "Storage doest not exists"); 
      if (!mediaStorageDir.mkdirs()) { 
       // Error 
       Log.i(LOGTAG, "passed here"); 
       Log.e(LOGTAG, "Failed to create Directory"); 
       return null; 
      } 
     } 
     // 3) Create a file name 
     // 4) Create the file 

     Date now = new Date(); 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
       Locale.US).format(now); 
     String path = mediaStorageDir.getPath() + File.separator; 
     Log.i(LOGTAG, "Path is" + path); 
     mediaFile = new File(path + "IMG_" + timeStamp + ".jpg"); 

     Log.i(LOGTAG, "Created :" + Uri.fromFile(mediaFile)); 
     return Uri.fromFile(mediaFile); 
    } else 
     Log.i(LOGTAG, "STORAGE NOT AVAILABLE"); 
    return null; 
} 

private boolean isExternalStorageAvailable() { 
    boolean check = false; 
    String state = Environment.getExternalStorageState(); 
    if (state.equals(Environment.MEDIA_MOUNTED)) { 
     check = true; 
    } 
    return check; 
    } 
} 

и в своей деятельности

Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
         UriHelper ur = new UriHelper(this); 
         mPhotoUri = ur.getFileUri(); 
         if (mPhotoUri != null) { 
         takePhotoIntent .putExtra(MediaStore.EXTRA_OUTPUT, mPhotoUri); 
          startActivityForResult(takePhotoIntent, REQUEST_TAKE_PHOTO); 
         }else{ 
          Toast.makeText(this , "There was an error", Toast.LENGTH_LONG).show(); 
         } 

, то вы можете использовать Uri путь непосредственно ImageView в результате деятельности

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