Android 他的:

Android 他的:,android,android-file,Android,Android File,获取Uri后,您可以使用上面相同的方法获取剪切图像的路径。请参阅此链接,它可以帮助您mImageCaptureUri=Uri.fromFile(新文件(Environment.getExternalStorageDirectory(),“tmp\u avatar\u”+String.valueOf(System.currentTimeMillis())+“.jpg”)是存储捕获图像的地方还是什么地方?@Bhargav:-是的,图像是从相机捕获的。但是如何获取从gallery中选择的图像的路径和文

获取Uri后,您可以使用上面相同的方法获取剪切图像的路径。

请参阅此链接,它可以帮助您
mImageCaptureUri=Uri.fromFile(新文件(Environment.getExternalStorageDirectory(),“tmp\u avatar\u”+String.valueOf(System.currentTimeMillis())+“.jpg”)是存储捕获图像的地方还是什么地方?@Bhargav:-是的,图像是从相机捕获的。但是如何获取从gallery中选择的图像的路径和文件名。您的答案检索原始图像名,而不是保存在gallery中的裁剪图像。是的,有一段时间我认为这是您的问题。我们需要看看你在哪里修剪。裁剪图像时,您有一个位图对象,对吗?您需要将该文件保存在库中,保存时使用文件对象。可以从该对象获取路径。如果我能看到包含裁剪位图的代码,我可以为您提供更多帮助;然后裁剪位图。压缩(格式、质量、流);我已将图像保存到gallery。我只需要得到那个文件名和路径。好的,首先我真的很难弄清楚你做了什么,在哪里你没有得到你需要的信息。现在我想我知道你的问题是什么了。你没有将裁剪后的图像保存到gallery中,Android会自己保存(实际上不确定,但你这么说),因此你无法保存名称和路径。因此,您需要编写保存它的代码,并将指定的名称用于所选的路径。您仍然可以为此使用上述代码。
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    final String [] items           = new String [] {"Take from camera", "Select from gallery"};                
    ArrayAdapter<String> adapter    = new ArrayAdapter<String> (this, android.R.layout.select_dialog_item,items);
    AlertDialog.Builder builder     = new AlertDialog.Builder(this);

    builder.setTitle("Select Image");
    builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
        public void onClick( DialogInterface dialog, int item ) { //pick from camera
            if (item == 0) {
                Intent intent    = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
                                   "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));

                intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

                try {
                    intent.putExtra("return-data", true);

                    startActivityForResult(intent, PICK_FROM_CAMERA);
                } catch (ActivityNotFoundException e) {
                    e.printStackTrace();
                }
            } else { //pick from file
                Intent intent = new Intent();

                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);

                startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE);
            }
        }
    } );

    final AlertDialog dialog = builder.create();

    Button button   = (Button) findViewById(R.id.btn_crop);
    mImageView      = (ImageView) findViewById(R.id.iv_photo);

    button.setOnClickListener(new View.OnClickListener() {  
        @Override
        public void onClick(View v) {
            dialog.show();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) return;

    switch (requestCode) {
        case PICK_FROM_CAMERA:
            doCrop();

            break;

        case PICK_FROM_FILE: 
            mImageCaptureUri = data.getData();

            doCrop();

            break;          

        case CROP_FROM_CAMERA:          
            Bundle extras = data.getExtras();

            if (extras != null) {               
                Bitmap photo = extras.getParcelable("data");

                mImageView.setImageBitmap(photo);
            }

            File f = new File(mImageCaptureUri.getPath());            

            if (f.exists()) f.delete();

            break;

    }
}

private void doCrop() {
    final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>();

    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0 );

    int size = list.size();

    if (size == 0) {            
        Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();

        return;
    } else {
        intent.setData(mImageCaptureUri);

        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 200);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);

        if (size == 1) {
            Intent i        = new Intent(intent);
            ResolveInfo res = list.get(0);

            i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));

            startActivityForResult(i, CROP_FROM_CAMERA);
        } else {
            for (ResolveInfo res : list) {
                final CropOption co = new CropOption();

                co.title    = getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo);
                co.icon     = getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo);
                co.appIntent= new Intent(intent);

                co.appIntent.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));

                cropOptions.add(co);
            }

            CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Choose Crop App");
            builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
                public void onClick( DialogInterface dialog, int item ) {
                    startActivityForResult( cropOptions.get(item).appIntent, CROP_FROM_CAMERA);
                }
            });

            builder.setOnCancelListener( new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel( DialogInterface dialog ) {

                    if (mImageCaptureUri != null ) {
                        getContentResolver().delete(mImageCaptureUri, null, null );
                        mImageCaptureUri = null;
                    }
                }
            } );

            AlertDialog alert = builder.create();

            alert.show();
        }
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
   if (requestCode == PICK_FROM_FILE && resultCode == RESULT_OK)
   { 
      Uri pictureUri = data.getData();
   }
}
private String getRealPathFromURI(Context context, 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();
        }
    }
}
private Uri saveOutput(Bitmap croppedImage)    
{
    Uri saveUri = null;
    // Saves the image in cache, you may want to modify this to save it to Gallery
    File file = new File(getCacheDir(), "cropped");
    OutputStream outputStream = null;
    try
    {
        file.getParentFile().mkdirs();
        saveUri = Uri.fromFile(file);
        outputStream = getContentResolver().openOutputStream(saveUri);
        if (outputStream != null)
        {
            croppedImage.compress(Bitmap.CompressFormat.JPEG, 90, outputStream);
        }
    } catch (IOException e)
    {
        // log the error
    }

    return saveUri;
}