当前位置: 首页 > 知识库问答 >
问题:

在Android中使用文件打开时产生的意图接收文件

司徒俊健
2023-03-14

我的 App 可以序列化对象,并通过 WhatsApp 将其发送到另一部手机:

FullRecipe fr = new FullRecipe(data);
String extension = ".rec";
String name = "recipe";    
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, name + extension);

try {
    FileOutputStream fos = new FileOutputStream(file);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(fr);
    oos.close();
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("application/rec");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
intent.setPackage("com.whatsapp");
startActivity(intent);

我使用了一个自定义的文件扩展名,并在我的清单中添加了意图过滤器,这样如果我在WhatsApp中点击打开文件,我的应用程序就会出现在应用程序选择器中。现在我想用下面的代码反序列化单击的文件:

FullRecipe fr;
Intent intent = getIntent();
Uri data = intent.getData();
String path = data.getPath();
try {
    FileInputStream fis = new FileInputStream(path);
    ObjectInputStream ois = new ObjectInputStream(fis);
    fr = (FullRecipe) ois.readObject();
    ois.close();
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

当我在WhatsApp中点击发送的文件并选择我的应用程序时,我的应用程序启动(它接收到意图),但我得到以下错误:

java.io.FileNotFoundException: /item/86477: open failed: ENOENT (No such file or directory)

显然'/Item/86477'不是正确的文件路径,但如何才能获得正确的文件路径?

共有1个答案

苗阳
2023-03-14

但是我怎样才能得到正确的一个?

您没有,因为它不是文件并且没有路径。

使用ContentResolveropenInputStream()Uri标识的内容上获取InputStream

然后,重新考虑你的计划。不是每个人都把他们的应用程序更新到最新版本,更不用说快速更新了。如果您在不同版本之间更改< code>FullRecipe的结构,现在您将拥有不兼容的序列化(旧的和新的),并且您将需要以某种方式通过编程来协调它。

 类似资料:
  • 我在sdcard中的某个文件夹中有一些pdf文件。我创建了一个将所有pdf显示为ListView的应用程序。当我单击任何pdf文件时,它会在officeSuite应用程序(不支持或损坏文件格式)中出现错误。代码有问题。这是代码。 //显示为ListVIew的项目代码 //打开文件的代码VIA Intent 错误: 损坏或不支持的文件格式

  • 我们正在构建一个相机应用程序,将照片保存在图库中的特定文件夹中。我们必须使用意图在图库中打开我们应用程序的文件夹。我们正在使用此代码,但它会显示所有文件夹。

  • 我刚下载了Java和JMeter,当我尝试打开。jmx文件,我一直收到以下错误消息: “从以下位置加载XML时出现问题:'C:\Users\blank\file_name.jmx'。原因:CannotResolveClassException:com.tag.jmeter.ext.config.PropertyReader” 我不确定会是什么问题。我安装了插件管理器,并试图打开文件后,这确实提示我

  • 该文件位于我的资产文件夹下。因此,我正在设置WebViewClient并将我的页面加载到其中。但是我得到一个“网页不可用”的错误。 以下是我的活动代码: 和布局文件:

  • 我一直在开发一个android应用程序,在这个应用程序中,我必须打开.xls和.xlsx文件以便进一步实现。在.xls的情况下,一切工作正常,但当我尝试打开.xls x文件时,它给了我异常。下面是我的代码,请帮助我解决这些异常 我正在使用的JAR: null

  • 问题内容: 和Python和有什么不一样?我什么时候应该使用哪个?(假设我处于2.5级) 问题答案: 您应该始终使用。 如文档所述: 打开文件时,最好使用open()而不是直接调用此构造函数。文件更适合类型测试(例如,编写“ isinstance(f,file)”)。 另外,自Python 3.0起 已被删除。