Jak odkodować bitmapy z katalogu zasobów w systemie Android 7?BitmapFactory.decodeStream z aktywów zwraca wartość null na urządzeniu z systemem Android 7
Moja aplikacja działa poprawnie w wersjach Androida do Marshmallow. W systemie Android 7 nie można załadować obrazów z katalogu zasobów.
mój kod:
private Bitmap getImage(String imagename) {
// Log.dd(logger, "AsyncImageLoader: " + ORDNER_IMAGES + imagename);
AssetManager asset = context.getAssets();
InputStream is = null;
try {
is = asset.open(ORDNER_IMAGES + imagename);
} catch (IOException e) {
// Log.de(logger, "image konnte nicht gelesen werden: " + ORDNER_IMAGES + imagename);
return null;
}
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, PW, PH);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
// Lesen des Bitmaps in der optimierten Groesse
return BitmapFactory.decodeStream(is, null, options);
}
W wyniku (tylko Android 7) BitmapFactory.decodeStream
jest null. Działa poprawnie ze starszymi interfejsami API Androida.
W trybie debugowania widzę następujący komunikat:
09-04: 10: 10: 50.384 6274-6610/myapp D/skia --- SkAndroidCodec :: NewFromStream zwrócony zerowej
Czy ktoś może mi powiedzieć, dlaczego i jak poprawić kodowanie?
Edycja: W międzyczasie znalazłem, że usunięcie pierwszego BitmapFactory.decodeStream z inJustDecodeBounds = true prowadzi do udanego BitmapFactory.decodeStream z inJustDecodeBounds = false. Nie znam przyczyny i nie wiem, jak zastąpić pomiar rozmiaru bitmapy.
Domyślam się, że Twój problem dotyczy konkretnego zasobu. Właśnie przetestowałem [jedną z moich próbek książek] (https://github.com/commonsguy/cw-omnibus/tree/master/Bitmaps/InSampleSize), która ładuje obrazy z zasobów na Nexusie 9 z systemem Android 7.0. Wygląda na to, że działa dobrze. – CommonsWare