Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从摄影机意图结果获取路径和文件名_Android_Camera_Android Intent_Uri_Image - Fatal编程技术网

Android 从摄影机意图结果获取路径和文件名

Android 从摄影机意图结果获取路径和文件名,android,camera,android-intent,uri,image,Android,Camera,Android Intent,Uri,Image,我想制作一张具有相机意图的图片,并将其保存到默认的DCIM文件夹中。然后我想得到图片存储的路径/文件名 我正在使用以下代码进行尝试: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, TAKE_PICTURE); 使用此代码,相机将打开,在我拍摄完一张照片后,相机将关闭并将照片保存到默认的图像文件夹(通常为/dcim/camera或sdcard/dcim/cam

我想制作一张具有相机意图的图片,并将其保存到默认的DCIM文件夹中。然后我想得到图片存储的路径/文件名

我正在使用以下代码进行尝试:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
使用此代码,相机将打开,在我拍摄完一张照片后,相机将关闭并将照片保存到默认的图像文件夹(通常为/dcim/camera或sdcard/dcim/camera…)

但是我现在如何才能获得拍摄照片的路径和文件名呢? 我已经尝试了几乎所有的
onActivityResult
我试过了

等等

我在过去的两天里研究了这个问题的解决方案,网上和stackoverflow上都有很多文章,但都不管用。 我不想要缩略图,我只想要相机拍摄的图像的路径(uri?)

谢谢你的帮助

编辑: 当我尝试时:

path=Environment.DIRECTORY_DCIM + "/test.jpg";
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE); 
它不将图像存储为test.jpg,而是使用普通图像名称2011-10-03….jpg(但也可以,我只需要图像的路径,不管名称是什么)

致意

再次编辑

path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(intent, TAKE_PICTURE); 
当我尝试这样做时,它会将图像存储到正确的文件夹中,并使用给定的名称(例如test111111.jpg)。
但是现在如何在onActivityResult中获取文件路径?

当您启动
操作\u图像\u捕获
时,您可以传递一个额外的文件作为要保存图片的文件的
URI

下面是一个简单的例子:

   File file = new File(path);
   Uri outputFileUri = Uri.fromFile(file);

   Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
   intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

   startActivityForResult(intent, TAKE_PICTURE); 

编辑:我刚刚在我的设备上尝试过,并且
file.createNewFile()
为我解决了这个问题。

图片将存储两次,首先存储在gallery文件夹中,然后存储在您指定的文件中,使用putExtra(MediaStore.EXTRA\u输出,路径)方法

您可以通过以下操作获取最后拍摄的照片:

/**
 * Gets the last image id from the media store
 * @return
 */
private int getLastImageId(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
    if(imageCursor.moveToFirst()){
        int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
        String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
        Log.d(TAG, "getLastImageId::id " + id);
        Log.d(TAG, "getLastImageId::path " + fullPath);
        imageCursor.close();
        return id;
    }else{
        return 0;
    }
}

此示例基于post:

您可以在onActivityResult()中这样使用


您好,谢谢您的快速回复,但它没有按预期工作。我会在上面解释。一个愚蠢的问题也许。。。您是否已在清单中添加权限?安卓,许可,摄像头?是的,它有时可以不经许可就工作是的,我添加了许可。我只需要知道相机保存的图片的路径。我知道路径是默认的图片文件夹,所以实际上我只需要文件名或最新拍摄图片的路径。我在找两天的解决办法。你们都知道路。。。因为你创建了你的文件。您可以将文件或路径保留为活动的成员变量嘿,此代码适用于samsung tab,但不适用于lenovo和i-ball tab,是否有其他解决方案?????
path=Environment.DIRECTORY_DCIM + "/test.jpg";
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE); 
path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(intent, TAKE_PICTURE); 
   File file = new File(path);
   Uri outputFileUri = Uri.fromFile(file);

   Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
   intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

   startActivityForResult(intent, TAKE_PICTURE); 
/**
 * Gets the last image id from the media store
 * @return
 */
private int getLastImageId(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
    if(imageCursor.moveToFirst()){
        int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
        String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
        Log.d(TAG, "getLastImageId::id " + id);
        Log.d(TAG, "getLastImageId::path " + fullPath);
        imageCursor.close();
        return id;
    }else{
        return 0;
    }
}
if(requestCode==CAMERA_CAPTURE)
    {

        Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
        if(cursor != null && cursor.moveToFirst())
        {
            do 
            {
                String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA));
               Uri selectedImage = Uri.parse(picturePath);

            }
            while(cursor.moveToNext());
                cursor.close();
            File out = new File(picturePath);
            try 
            {
                mOriginal = decodeFile(out);
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            mSelected.setImageBitmap(mOriginal);
        }
    }