如何在Android中制作具有所需文件名的图片?

如何在Android中制作具有所需文件名的图片?,android,Android,我有一个Android应用程序,它可以拍照,拍照后,它会将文件名保存到数据库中。稍后,当我将数据从Android应用程序传输到Web服务器时,我希望这些文件名可以用于在另一个应用程序中预览这些图片。所以,我不得不担心数据库中的名称和图片的名称是一致的,并且从我的应用程序中拍摄的所有图片都在某个特定的文件夹中(例如“PictureFolder”)。 到目前为止,我有两个问题无法解决 问题1 我在文件夹中创建所需的图片名称,如picture\u 32016302\u 103500\u bro\u.j

我有一个Android应用程序,它可以拍照,拍照后,它会将文件名保存到数据库中。稍后,当我将数据从Android应用程序传输到Web服务器时,我希望这些文件名可以用于在另一个应用程序中预览这些图片。所以,我不得不担心数据库中的名称和图片的名称是一致的,并且从我的应用程序中拍摄的所有图片都在某个特定的文件夹中(例如“PictureFolder”)。 到目前为止,我有两个问题无法解决

问题1

我在文件夹中创建所需的图片名称,如
picture\u 32016302\u 103500\u bro\u.jpg
,之后,我的Android应用程序将图片放入我的特定文件夹中,但名称为
picture\u 32016302\u 103500\u bro\u-67940687.jpg
。不是每次都是这个精确值,而是每张图片的随机数。为什么会这样?代码如下

private static final int ActivityStartamera = 0;

public void takePicture( View view)
{
    Intent takePic= new Intent();
    takePic.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
    File photofile = null;
    try{
        photofile=createImageFile();
        takePic.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photofile));
        startActivityForResult(takePic, ActivityStartamera);
        Toast.makeText(this,Uri.fromFile(photofile).toString(), Toast.LENGTH_LONG).show();
    }
    catch (IOException e)
    {
        e.printStackTrace();
        Toast.makeText(this, "Error", Toast.LENGTH_LONG).show();
        imageFileName="";
    }
}

protected  void onActivityResult (int requestCode, int resultCode, Intent data)
{
    if(requestCode == ActivityStartamera && resultCode == RESULT_OK)
    {
        Toast.makeText(this, "Picture taken", Toast.LENGTH_LONG).show();
    }
    else{
        image.delete();
    }
}

File createImageFile () throws IOException{
    String timeStamp = new SimpleDateFormat("MyyyyMdd_HHmmss").format(new Date());
    imageFileName = "picture_"+timeStamp+"_bro_";
    storage = Environment.getExternalStoragePublicDirectory("PictureFolder");
    if (!storage.exists())
    {
        Toast.makeText(this, "Directory created", Toast.LENGTH_LONG).show();
        storage.mkdirs();
   }
    image = File.createTempFile(imageFileName, ".jpg", storage);
    return image;
} 
问题2

我想用USB线将创建的图片从应用程序传输到PC。当我将手机连接到电脑时,我进入文件夹“PictureFolder”,在那里我看到一个空文件夹。之后,我断开手机和电脑的连接,用应用程序拍了几张照片,将手机连接回电脑,文件夹仍然是空的。若我重启手机,那个么照片会显示在文件夹中。所以我对此表示怀疑,并在手机上安装了文件浏览器,我看到从应用程序中拍摄的照片显示在该文件夹中,但只有在重新启动后才会显示在PC文件浏览器中。有办法解决这个问题吗?或者在传输图像之前我必须重新启动手机?文件夹内容是否保存到某个缓存文件中,或者问题出在哪里


我使用HTC desire 610和Caterpillar b15q,在这两种设备中我都有这个问题,因此我认为这并不取决于安装了应用程序的手机。

这是一个时间戳,而不是一个随机数。文件名有一个精确的模式,它们都是唯一的,因为用户不希望他们的图片被覆盖使用timespamp我已经解决了图片不会被覆盖的问题。我只是不明白怎么才能在文件名中得到这个“-number”…Java中的临时文件可以做到这一点。如果你想要一个合理命名的文件,你可以创建一个普通的文件对象好的,这个问题解决了num 1。问题2呢?不确定。从未在应用程序中将文件写入磁盘。我猜你需要关闭一些资源来刷新缓冲区并强制写入,否则,它只是存储在内存中,这是一个时间戳,而不是一个随机数。文件名有一个精确的模式,它们都是唯一的,因为用户不希望他们的图片被覆盖使用timespamp我已经解决了图片不会被覆盖的问题。我只是不明白怎么才能在文件名中得到这个“-number”…Java中的临时文件可以做到这一点。如果你想要一个合理命名的文件,你可以创建一个普通的文件对象好的,这个问题解决了num 1。问题2呢?不确定。从未在应用程序中将文件写入磁盘。我猜您需要关闭一些资源,以便刷新缓冲区并强制写入,否则,它只会存储在内存中