Я использую намерение с действием android.provider.MediaStore.ACTION_IMAGE_CAPTURE
, чтобы захватить изображение и получить путь к изображению. После того, как я получил путь, я декодирую его в растровое изображение.Bitmap decode File return null
Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath);
Все хорошо работает на DEVICE1, журнал для траекторных изображений выглядеть следующим образом:
/storage/emulated/0/Pictures/QPOS/IMG_20160622_110127_1473532607.jpg
Затем я запустить приложение на новый вызов устройства устройство2. Путь образ, который я получил после захвата изображения:
/storage/emulated/0/Pictures/QPOS/IMG_20160622_105436_2068195440.jpg
Это нормальный вид. Но метод декодирования возвращают нулевое растровое изображение на этой линии
Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath);
Я не знаю, почему отличаются между двумя устройства, я построю на том же исходном коде. Можете ли вы объяснить, почему я получил нулевое битовое изображение для файла декодирования метода? И как решить эту проблему? Благодарю.
Update: добавить разрешения запроса на API 23 с помощью этого метода:
private void requestPermissions() {
Log.d("binh", "request Permision");
if (Build.VERSION.SDK_INT >= 23) {
List<String> permissionRequestList = new ArrayList<>();
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
permissionRequestList.add(android.Manifest.permission.CAMERA);
}
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
permissionRequestList.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
permissionRequestList.add(android.Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
permissionRequestList.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
permissionRequestList.add(android.Manifest.permission.READ_PHONE_STATE);
}
if (permissionRequestList.size() > 0) {
ActivityCompat.requestPermissions(this, permissionRequestList.toArray(new String[permissionRequestList.size()]), Constants.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
}
}
Это код, чтобы создать путь для изображения:
private File setUpPhotoFile() throws IOException {
File f = createImageFile();
currentPhotoPath = f.getAbsolutePath();
return f;
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = JPEG_FILE_PREFIX + timeStamp + "_";
File albumF = getAlbumDir();
File imageF = File.createTempFile(imageFileName, JPEG_FILE_SUFFIX, albumF);
return imageF;
}
private File getAlbumDir() {
File storageDir = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
//storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), getString(R.string.app_name));
storageDir = new File(
getExternalFilesDir(Environment.DIRECTORY_PICTURES), getString(R.string.app_name));
if (storageDir != null) {
if (!storageDir.mkdirs()) {
if (!storageDir.exists()) {
Log.d("CameraSample", "failed to create directory");
return null;
}
}
}
} else {
Log.d(getString(R.string.app_name), "External storage is not mounted READ/WRITE.");
}
return storageDir;
}
После сборки и получили разрешение от диалога , У меня такая же проблема.
Удалось ли вам найти решение? Я читал разные темы в SOF, и у вас точно такие же, как у меня. У каждой другой темы есть «аналогичная проблема», но в конце их решение не распространяется на нашу проблему, не уверен, почему она была помечена как дубликат. Или, может быть, я пропустил хороший? – Laurent