2015-07-01 68 views
0

我用下面的代码片段保存图像用户已在设备上:三星设备返回图像文件路径错误

private void createImageFile() throws IOException { 
    // Create an image file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = "JPEG_" + timeStamp + "_"; 
    File storageDir = Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_PICTURES); 
    File image = File.createTempFile(
      imageFileName, /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
    ); 

    image.mkdirs(); 

    // Save a file: path for use with ACTION_VIEW intents 
    cameraFilePath = "file://" + image.getAbsolutePath(); 
} 

private void saveImageToGallery(Context context) { 

    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    mediaScanIntent.setData(Uri.parse(cameraFilePath)); 
    context.sendBroadcast(mediaScanIntent); 

} 

这对于大多数设备工作正常,一些三星(银河S5,S3 )虽然表现奇怪;我的方法createImageFile创建以下路径:

file:///storage/emulated/0/Pictures/JPEG_20150701_131442_-1853613631.jpg 

,但图像保存在设备上以下路径:

/storage/emulated/legacy/Pictures/JPEG_20150701_131442_-1853613631.jpg 

/storage/sdcard0/Pictures/JPEG_20150701_114009_-1853613631.jpg 

我在这里做一些基本错误?还是仅仅三星没有遵循标准?

+0

你在模拟器上测试吗? –

+0

它适用于仿真器以及除三星以外的所有设备。 – FWeigl

+0

根据各种设备上的内部或外部存储器,存储路径将发生变化 –

回答

3

通过像getExternalStoragePublicDirectory()这样的方法返回到您的流程的路径不必与您从自己的应用以外的地方看到的内容相对应。 Android 4.2+平板电脑和Android 5.0+手机支持多个用户。每个用户都有自己独立的一组代表内部和外部存储的目录。因此,您的过程获得的路径将映射到“真正”的文件系统路径,以便用户恰好使用您的应用程序。该映射过程的细节是制造商和设备特定的。

IOW,不要担心这种差异。如果您的应用程序正在读写,并且您可以从外部工具中查找并编写用于调试的文件,则一切正常。

+0

感谢您的回答。事情是我需要使用该文件路径显示与毕加索保存的图像和毕加索不会找到/显示该文件路径的图像。 – FWeigl

+0

@Ascorbin:毕加索可以在'getExternalStoragePublicDirectory()'中找到文件。如果遇到问题,可以询问一个单独的堆栈溢出问题,您可以在其中解释如何将图像放入'getExternalStoragePublicDirectory()'中,如何尝试使用Picasso从'getExternalStoragePublicDirectory()'中读取这些图像以及如何读取您遇到的具体问题。 – CommonsWare

+0

好的,谢谢。也许你可以看看这个新问题? http://stackoverflow.com/questions/31242161/picasso-not-showing-images-from-gallery-on-certain-samsung-devices – FWeigl