В основном я пытаюсь создать простое приложение, которое использует приложение камеры по умолчанию, чтобы сделать снимок, затем я хочу отобразить это изображение в новом действии в ImageView , но все, что я пытался привелНевозможно отобразить результат работы камеры в ImageView
java.io.FileNotFoundException: /storage/emulated/0/imageToProcess.jpg: open failed: ENOENT (No such file or directory)
Я включил правильные разрешения (возможно, даже слишком много) в манифесте:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
и я также вручную с просьбой разрешения, если необходимо, в в деятельности:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 1);
}
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
поэтому я не думаю, что проблема связана с разрешениями на чтение/запись.
В XML-файле моего основного вида деятельности, я создал кнопку с помощью прослушивателя OnClick, который вызывает следующий метод:
public void openCamera(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(Environment.getExternalStorageDirectory() + File.separator + "imageToProcess.jpg");
imgUri = Uri.fromFile(f);
intent.putExtra("imgUri", imgUri.toString());
startActivityForResult(intent, TAKE_PICTURE);
}
Вот метод onActivityResult() я определил, чтобы создать новое намерение и передать URI для новой деятельности:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode == TAKE_PICTURE && resultCode == Activity.RESULT_OK) {
Intent camResult = new Intent(this, ShowCameraResult.class);
camResult.putExtra("imgUri", imgUri.toString());
startActivity(camResult);
}
}
Примечание: imgUri и TAKE_PICTURE определяются в верхней части класса, как protected static final int TAKE_PICTURE = 1;
и private Uri imgUri;
Наконец, вот мой ShowCameraResult активность
public class ShowCameraResult extends AppCompatActivity {
private Bitmap mImageBitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_camera_result);
ImageView imageView = (ImageView)findViewById(R.id.imageView);
String filePath = getIntent().getStringExtra("imgUri");
Log.d("ShowCameraResult", "directory: " + filePath);
try {
mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(filePath));
imageView.setImageBitmap(mImageBitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Метод вызова Log.d выше возвращает
ShowCameraResult: directory: file:///storage/emulated/0/imageToProcess.jpg
Это приводит меня к мысли, что результат изображения с камеры на самом деле не сохраняются в мой imageToProcess.jpg, но я мог быть очень не прав, поскольку это первый настоящий проект андроида, над которым я работал.
Так что мой вопрос: Где я ошибся?
Любая помощь очень ценится, спасибо!
испытание его на устройстве не на эмуляторе –
@Dhara Я тестирование на Galaxy S5 – Austin
Сво ошибка в тесте Samsung на другой device –