我的应用程序可以序列化对象并通过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);
我使用自定义文件扩展名并在我的Manifest中添加了intent-filters,因此如果我尝试通过在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'不是一个合适的文件路径,但我怎样才能找到合适的文件路径?
答案 0 :(得分:0)
但我怎样才能找到合适的人?
你没有,因为它不是文件而且没有路径。
使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
。
然后,重新考虑你的计划。并非所有人都将他们的应用更新到最新版本,更不用说快速了。如果在版本之间更改FullRecipe
的结构,现在您将具有不兼容的序列化(旧的和新的),并且您需要以某种方式以编程方式协调它。