Я работаю над небольшим проектом приложения, который вызывает camera.app, снимает фотографию и возвращает фотографию на экране. Я могу пройти все шаги, когда фотография является локальной переменной. Однако, когда я хочу, чтобы сохранить его в определенном пути и читать его с пути, Android всегда предупреждаетНе удается получить доступ к каталогу sdcard в Android
'E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/camera_app/cam_image.jpg: open failed: ENOENT (No such file or directory)'
Там также предупреждения, что я не понимаю, такие как
E/linker: readlink('/proc/self/fd/42') failed: Permission denied [fd=42]
E/HiApp.SerializedObject: Thread-840{840} a.b(null:-1) <<<ERROR>>> read file error/storage/emulated/0/Android/data/com.huawei.appmarket/files/Data/.AppCheckInfo: open failed: ENOENT (No such file or directory)
The компьютер может прочитать SD-карту. Я не знаю, как отладить код
Button button;
ImageView imageView;
static final int CAM_REQUEST = 1;
String SDPath = Environment.getExternalStorageDirectory().getAbsolutePath();
TextView SDCard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.bn);
imageView = (ImageView) findViewById(R.id.img);
SDCard = (TextView)findViewById(R.id.sdcard);
SDCard.setText(SDPath);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = getFile();
Uri contentUri = Uri.fromFile(file);
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,contentUri);
startActivityForResult(camera_intent,CAM_REQUEST);
}});
}
private File getFile(){
File folder = new File(SDPath+"/camera_app");//"EVA-AL10/sdcard/camera_app" "storage/1599-2841/camera_app"
if(!folder.exists()){
folder.mkdir();
}
File image_file = new File(folder,"cam_image.jpg");
return image_file;
}
protected void onActivityResult(int requestCode, int resultCode, Intent data){
String path = SDPath+"/camera_app/cam_image.jpg";//"EVA-AL10/sdcard/camera_app/cam_image.jpg"
imageView.setImageDrawable(Drawable.createFromPath(path));
}
Изменено XML:
<uses-feature android:name="android.hardware.camera2"
android:required="true"></uses-feature>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
Если вы настроите таргетинг на SDK 23+, убедитесь, что у вас есть разрешение на выполнение во время выполнения. –
, на какой версии Android вы тестируете свое приложение? – UserSharma
Работает на API 23 –