내 문제에 대한 간략한 요약 : 로컬 이미지 파일을 읽으려고합니다. 내 자산 디렉토리에 파일을 포함하고 자산으로 취급하면 모든 것이 잘 작동합니다. 그러나 외부 sd 카드에서 읽으려고하면 BitmapFactory.decode 스트림이 null을 반환합니다. .jpeg 및 .png 파일 모두에서 동일한 결과가 나타납니다.BitmapFactory.decodeStream은 로컬 파일을 읽는 중 NULL을 반환합니다.
File f = new File("/mnt/extSdCard/Maps/Colorado/Boulder.jpg");
InputStream isf = new BufferedInputStream(new FileInputStream(f.toString()));
어느 경우에서의 InputStream가 전달됩니다
내가 자산 파일에서 InputStream를 얻는 방법이있다 : 나는이 자산 파일에서 InputStream를 얻는 방법
InputStream isa = context.getAssets().open("Boulder.jpg");
입니다 이 코드는 다음과 같습니다 (이 코드가 익숙하면 인터넷 예에서 빌려 왔습니다.)
this.decoder = BitmapRegionDecoder.newInstance(inputStream, false);
tmpOptions.inJustDecodeBounds = true;
Bitmap temp = BitmapFactory.decodeStream(inputStream, null, tmpOptions);
setSceneSize(tmpOptions.outWidth, tmpOptions.outHeight);
tmpOptions.inJustDecodeBounds = false;
tmpOptions.inSampleSize = (1<<downShift);
sampleBitmap = BitmapFactory.decodeStream(inputStream, null, tmpOptions);
다시, 파생 된 자산 파일을 사용하여 InputStream, 모든게 잘 작동합니다. 반대로, sdCard 파일의 경우 첫 번째 호출 후에 outWidth 및 outHeight는 모두 -1이고 두 번째 이후에는 sampleBitmap이 null입니다.
나는이 문제에 대한 축을 감싸고 있으며,이 포럼을 탐색하고 제안 된 솔루션을 사용하지 않고 많은 시간을 보냈다. 필자는 파일의 두 버전을 모두 열어 위의 그림과 같이 InputStream을 작성한 테스트 코드를 작성한 다음 각 스트림의 내용을 읽고 각 바이트를 비교하여 동일하다고 판별했습니다.
같은 결과를 사용하여 다른 기기에서 코드를 사용해 보았습니다.
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/>
내가 자산이 동적으로 그렇게 모든 것을 포함하여 시스템에 파일을 추가 할 수있는 기능이 필요합니다 : 나는 현재 AndroidManifest를에 다음 버전 정보와 갤럭시 노트 II (안드로이드 4.1.1)에서 테스트하고 있습니다 옵션이 아닙니다. 어떤 도움이라도 대단히 감사하겠습니다.