Я работаю над приложением для Android, и часть его требует, чтобы пользователь сделал снимок, в тот момент, когда пользователь делает снимок, он сохраняет его в файловой системе и начинает новое действие для отображения недавно снятого изображения.Действие начинается без проблем, за исключением того, что оно пустое!
Когда я жестко кодирую путь в строку, вводя путь вручную, появляется изображение, так в чем же проблема?
Этометод сохраненного файла и создание намерения;
capturePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File f = capturePicture();
Intent intent = new
Intent(postSharingActivity.this, settingPostParam.class);
intent.putExtra("picture", f);
startActivity(intent);
}
});
Это другое действие и получение файла изображения;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting_post_param);
savedImage = findViewById(R.id.savedImage);
File pic = (File) getIntent().getExtras().get("picture");
Uri uri = Uri.fromFile(pic);
Toast.makeText(settingPostParam.this, "+uri.toString(),Toast.LENGTH_LONG)
.show();
if (isStoragePermissionGranted()) {
Picasso.get().load(uri).into(savedImage);
} else {
Toast.makeText(settingPostParam.this, "error", Toast.LENGTH_LONG).show();
}
}
ОБНОВЛЕНИЕ: Я обнаружил проблему, она выполняет намерение до завершения capturePicture ().Требуется путь, прежде чем даже файл будет сохранен!Так что я вернулся к своему первоначальному пути, который меняет взгляды, а не деятельность.И добавил AsyncTask.
private class myAsyncTask extends AsyncTask<Void,Void,Void>{
File f;
@Override
protected Void doInBackground(Void... voids) {
f= capturePicture();
return null;
}
@Override
protected void onPostExecute(Void result){
String rr = f.getAbsolutePath();
File g=new File(rr);
Toast.makeText(postSharingActivity.this,"onBloodyClick: "+g.toString(),Toast.LENGTH_LONG).show();
Uri uri = Uri.fromFile(g);
Toast.makeText(postSharingActivity.this,"URI :"+uri.toString(),Toast.LENGTH_LONG).show();
if(isStoragePermissionGranted()){
savedImage.setImageURI(uri);
cameraPreviewView.setVisibility(View.GONE);
postCaptureView.setVisibility(View.VISIBLE);
} else{
Toast.makeText(postSharingActivity.this,"error",Toast.LENGTH_LONG).show();
}
}
}
А вот onClickListener
capturePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new myAsyncTask().execute();
}
});
Я протестировал его, и это та же проблема, тосты в следующем порядке:
- onBloodyClick: /storage/0/emulated/0/DCIM/Camera/IMG_20180604_104845.jpg
- URI: файл: //// хранилище / 0 / эмулированный / 0 / DCIM / Camera /IMG_20180604_104845.jpg
Сохранено: /storage/0/emulated/0/DCIM/Camera/IMG_20180604_104845.jpg
Третий метод - метод capturePicture ().Что я здесь не так делаю?И спасибо за ответ.