我有Android应用程序可以拍照,拍照后它会将文件名保存到数据库中。稍后,当我将数据从Android应用程序传输到WebServer时,我希望这些文件名可用于在另一个应用程序中预览这些图片。所以我不得不担心数据库中的名字和图片的名称都包含在内,并且从我的应用程序中获取的所有图片都在某个特定的文件夹中(例如“PictureFolder”)。 到目前为止,我有两个我无法处理的问题。
问题1
我创建了所需的图片名称,例如picture_32016302_103500_bro_.jpg
,在文件夹中,我的Android应用程序会在我的特定文件夹中创建图片,但名称为picture_32016302_103500_bro_-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线将创建的图片从app传输到PC。当我将手机连接到PC时,我转到文件夹“PictureFolder”,在那里我看到了空文件夹。之后我断开手机与PC的连接,用app拍几张照片,将手机连接回PC,文件夹仍然是空的。如果我重新启动手机,则照片会显示在文件夹所以我怀疑并在手机上安装了File explorer,我看到从应用程序中拍摄的照片出现在该文件夹中,但只有在重新启动后才出现在PC文件浏览器中。有没有什么办法解决这一问题?或者我必须在传输图像之前重新启动手机?文件夹内容是否保存到某个缓存文件或问题在哪里?
我使用HTC欲望610和卡特彼勒b15q,在这两款设备中我都有这个问题,所以我认为它不取决于应用程序安装的是哪款手机。