Android Wear: 如何将图像数据存储到手表中

3
我正在寻找如何将图像数据存储到我的Android Wear应用中。
我想要做的事情如下:
1. 拍照并将其发送到手表上(通过DataMap)。 2. 我的手表显示照片。 3. 当我在Android Wear上的应用重新启动时,应用会显示之前拍摄的照片。
目前,重启应用后照片会被清除。我想要存储照片。
有没有任何方法可以将照片保存到手表中?
谢谢。
[更新1]
我尝试使用Environment.getExternalStorageDirectory()保存图像,但返回“NOT EXISTS”。
String imagePath = Environment.getExternalStorageDirectory()+"/test.jpg";

try {
  FileOutputStream out = openFileOutput(imagePath, Context.MODE_WORLD_READABLE);
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
  out.close();
} catch (Exception e) {
  e.printStackTrace();
}

File file = new File(bitmapPath);
boolean isExists = file.exists();
if (isExists) {
  LOGD(TAG, "EXISTS");
} else {
  LOGD(TAG, "NOT EXISTS");
}

[更新2]
我发现以下错误...
java.lang.IllegalArgumentException: File /storage/emulated/0/test.jpg contains a path separator

[更新3]
try {
  BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(path));
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
  out.close();
} catch (Exception e) {
  e.printStackTrace();
}

java.io.FileNotFoundException: /image: open failed: EROFS (Read-only file system)

[更新4]
我放置了它。但并没有改变。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

[更新5 已解决]

我发现"path"路径是正确的。(抱歉,我没有注意到它)

String imagePath = Environment.getExternalStorageDirectory() + "/test.jpg";

try {
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(imagePath));
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    out.close();
} catch (Exception e) {
    e.printStackTrace();
}

你确定位图已经清除了吗?对我来说,使用这段代码重新启动后,图像仍然可用:https://github.com/heinrisch/talkclient/blob/master/src/main/java/se/heinrisch/talkclient/TalkClient.java#L187 - Heinrisch
@Heinrisch 真的吗!?谢谢!我现在去查看。 - zono
@Heinrisch,当您使用“Wearable.DataApi.putDataItem”保存对象时,该对象存储多长时间并可用于“Wearable.DataApi.getDataItems”?如果关闭手表或与移动设备的连接丢失,是否会持久化此对象? - culebrins
我不是很清楚。我从未遇到过物品丢失的情况。它可以在关机和连接中断时正常工作。 - Heinrisch
1个回答

2
我相信你遇到的问题是因为openFileInput()适用于内部存储而非外部存储。事实上,没有理由使用Environment.getExternalStorage()。我认为手表没有外部存储。
尝试使用像openFileOutput("test.jpg", Context.MODE_WORLD_READABLE);这样的方法(fyi MODE_WORLD_READABLE已被弃用)。
然后使用openFileInput("test.jpg")来获取它。
导致错误的原因是openFileOutput()不能有子目录。

非常感谢。正如您所说,Environment.getExternalStorage()可用于存储图像。非常好的答案! - zono
那么正确答案是什么?是 Environment.getExternalStorage() 还是不是? - Lim Thye Chean
Environment.getExternalStorage()可用。我已经测试过我的应用程序,您可以查看:https://play.google.com/store/apps/details?id=virtualgs.photowatch - Lim Thye Chean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接