gpt4 book ai didi

java - 从 DCIM 相机文件夹中读取不起作用

转载 作者:行者123 更新时间:2023-11-30 11:17:22 24 4
gpt4 key购买 nike

已解决

我对 int 返回类型使用了一个字节,并且在错误的时刻进行了转换,请参阅我的回答。

原始问题

是否允许读取文件夹 DCIM/Camera 中的文件?我尝试在外部存储的很多地方进行读写操作,但它可以正常工作,除了读取从该文件夹中拍摄的照片(我已经能够写入)。

可能是我安装的 eclipse 没有编译最新版本的源代码的问题,但我现在正疯狂地试图找出答案。我试过删除并再次添加 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 权限,但没有成功。可能它应该通过其他我不知道的访问方式来完成,因为我从未尝试阅读那些图片。

我要读取的图片恰好是 7900 字节长,是用 genymotion 的虚拟相机拍摄的。当我阅读它时,我要么只得到 4 个字节,要么得到 0 个字节(到达文件末尾),但 logcat 上没有一个异常或错误。

此代码在除 DCIM/Camera 中的那些图片之外的任何位置的测试套件中运行正常

public void testReadCamera() throws IOException {
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

FileInputStream is = new FileInputStream(new File(dir, "Camera/IMG_20140623_125853.jpg"));
ArrayList<Byte> bytes = new ArrayList<Byte>();
byte b = 0;
while((b = (byte) is.read()) != -1) {
bytes.add(b);
}
byte[] data = new byte[bytes.size()];
for(int i = 0; i < bytes.size(); i++){
data[i] = bytes.get(i);
}

assertEquals(7900, data.length);

}

list

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.adyrsoft.pictures.test"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="10" />

<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.adyrsoft.pictures" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>

</manifest>

我做错了什么?

最佳答案

用头撞屏幕几个小时后,我发现了问题所在。我在错误的时间使用了错误的数据类型和转换。编码时间太多,注意力太少。一些新鲜空气和第二双眼睛有助于发现错误 :)

public void testReadCamera() throws IOException {
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

FileInputStream is = new FileInputStream(new File(dir, "Camera/IMG_20140623_125853.jpg"));
ArrayList<Byte> bytes = new ArrayList<Byte>();
int b = 0; // This has to be an int, return type of FileInputStream.read() is int
while((b = is.read()) != -1) { // I was casting to byte here... I still wonder why myself...
bytes.add((byte)b); //Here is where the cast should have been.
}
byte[] data = new byte[bytes.size()];
for(int i = 0; i < bytes.size(); i++){
data[i] = bytes.get(i);
}

assertEquals(file.length(), data.length); // Also...

}

关于java - 从 DCIM 相机文件夹中读取不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com