【问题标题】:Content provider with internal storage具有内部存储的内容提供程序
【发布时间】:2014-07-08 01:06:24
【问题描述】:

我正在编写一个应用程序,我在其中将照片保存在内部存储中。我正在使用这个 blog

的解决方案

我以前知道两个文件的名称,所以我可以在代码中拥有,但在我的应用程序中也会有一个画廊。所以我的问题是:如何在不知道文件名的情况下保存文件(文件名是使用日期和时间生成的)?内容提供者的 oncreate 在初始化期间开始,那么如何将新文件名传递给内容提供者?

提前致谢。

【问题讨论】:

  • I'm using solution from this blog你有这个例子吗?
  • 是的,但在此示例中,文件名是硬编码在自定义 ContentProvider 中的。
  • 好吧,我无法让它工作。而且我看不懂代码。首先我必须让它工作。你有什么问题吗?
  • 没有,一切都很顺利。
  • 让它工作。现在在回答您的问题之前,我想知道您是否还打算将内容提供程序用于其他操作。稍后在您的应用中?

标签: java android android-contentprovider internal-storage


【解决方案1】:

在内容提供者类中删除onCreate文件创建完全。

public static String lastPictureSaved = "";

更改函数openFile。在那里,文件名将根据日期时间和创建的文件进行设置。

 Date date = new Date();     
 date.getTime();
 SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd_HHmmss");
 String datetimestr = formatter.format(date);       
 lastPictureSaved = getContext().getFilesDir() + "/" + datetimestr + ".jpg";        
 File f = new File(lastPictureSaved);

 try
   {
    f.createNewFile();
   }
 catch (IOException e)
   {
    e.printStackTrace();

    Log.d(TAG, e.getMessage());
   }

在Host活动中变化

 File out = new File(getFilesDir(), "newImage.jpg");

 File out = new File(MyFileContentProvider.lastPictureSaved);

【讨论】:

  • 我还有一个问题。更改后,我无法将以前的版本与硬编码的文件名一起使用。如何添加从哪个活动内容提供者被调用的条件?然后时间戳将仅用于图库和文件名,即。 newImage 仅来自另一个。
  • 对不起,我不明白你到底想要什么。你想从另一个活动中调用它吗?您想将内容提供者不仅用于拍摄快照,还用于其他用途?好吧,我马上问你是否打算将内容提供者用于其他事情。而你从来没有给出令人满意的答案。
  • 我使用内容提供程序仅用于拍照。基本上,我有两个活动:在第一个活动中,我使用硬编码文件名“partner.jpg”捕获了一个照片动作,因此它与该博客文章中的代码相同。第二个活动是带有时间戳文件名的图像的网格视图。我的问题是如何在内容提供者中处理这两个选项?
  • 向你的类添加另一个静态变量。像 public static String theCaller = ""; 在你拍照之前设置它像 MyFileContentProvider.theCaller = "ActivityA"; 然后在 openFile() 检查 'theCaller' 并采取相应的行动。您甚至可以将文件名放在那里。或者只是使用MyFileContentProvider.theFileName = "alittlepicture.jpg" 之类的文件名或空文件名。或MyFileContentProvider.theFileName = "" 并检查 openFile() 中的文件名。所以你有办法让提供者确定文件名或活动。你还想要什么?
猜你喜欢
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多