I have 2 activities. From the main activity I call the second one with startActivityForResult. On the second one I have a button that calls the camera to take a photo and save it in the SD with startActivityForResult. The problem i have is that when I call the camera and get back with the result, I can't finish anymore the second activity to go to the first one. Pressing the back button or calling finish() from a button doesn't work anymore. The weird thing about it is that it works fine in the AVD and doesn't work in my mobile (Samsung galaxy ace). Here is the entire code of the Activity with the problem:
public class Pc_esperaActivity extends Activity {
//======================================================== CONSTANTES
static final int REQUEST_IMAGE_CAPTURE = 1;
static final int REQUEST_TAKE_PHOTO = 1;
//======================================================== VARIABLES
TextView ET_NOMBRE;
TextView ET_PARTE;
TextView ET_TELEFONO;
TextView ET_FECHA;
TextView ET_INCIDENCIA;
TextView ET_DETALLES;
TextView ET_FECHAESTADO; //VERR
TextView ET_ESTADO; //VERRRR
ImageView IMG_ESTADO;
ImageButton BTN_ACEPTAR;
ImageButton BTN_ESTADO;
ImageButton BTN_FOTO;
ImageButton BTN_LLAMAR;
pcenespera PC;
Gallery GALERIA;
foto ULTIMA_FOTO; // Ultima foto sacada
File ULTIMO_FILE; // Ultima imagen almacenada en la memoria
BaseAdapter ADAPTADOR_GALERIA;
int ID_ESTADO;
int INICIO; // Controla como se inició la activity, boton nuevo o seleccionando elemento existente
Activity CONTEXTO;
//======================================================== onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pc_espera);
Log.d("DEBUG", "onCreate Pc_esperaActivity"); //++++++++++++++++++++
//-----------------------------------------------------
CONTEXTO = this;
ET_NOMBRE = (TextView)findViewById(R.id.et_nombre);
ET_PARTE = (TextView)findViewById(R.id.et_parte);
ET_TELEFONO = (TextView)findViewById(R.id.et_telefono);
ET_FECHA = (TextView)findViewById(R.id.et_fecha);
ET_INCIDENCIA = (TextView)findViewById(R.id.et_incidencia);
ET_DETALLES = (TextView)findViewById(R.id.et_detalles);
ET_FECHAESTADO = (TextView)findViewById(R.id.et_fechaestado); //VERR
ET_ESTADO = (TextView)findViewById(R.id.et_estado); //VERRRR
IMG_ESTADO = (ImageView)findViewById(R.id.img_estado);
BTN_ACEPTAR = (ImageButton)findViewById(R.id.btn_aceptar);
BTN_ESTADO = (ImageButton)findViewById(R.id.btn_estado);
BTN_FOTO = (ImageButton)findViewById(R.id.btn_foto);
BTN_LLAMAR = (ImageButton)findViewById(R.id.btn_llamar);
GALERIA = (Gallery)findViewById(R.id.galeria);
//-----------------------------------------------------
//BTN_ACEPTAR.setEnabled(false);
//BTN_LLAMAR.setEnabled(false);
//-----------------------------------------------------
Intent intent = getIntent();
INICIO = intent.getIntExtra("TIPO", 1);
if (INICIO == MainActivity.PC_NUEVO) {
Log.d("--DEBUG--", "PC_NUEVO"); //++++++++++++++++++++
ET_NOMBRE.setText("");
ET_PARTE.setText("");
ET_TELEFONO.setText("");
ET_FECHA.setText("");
ET_INCIDENCIA.setText("");
ET_DETALLES.setText("");
ET_FECHAESTADO.setText("");
ET_ESTADO.setText(R.string.estado_0);
IMG_ESTADO.setImageResource(android.R.drawable.ic_menu_crop);
ID_ESTADO = 0;
PC = new pcenespera(); // Creo el PC nuevo
Log.d("--DEBUG--", "fin PC_NUEVO"); //++++++++++++++++++++
}
if (INICIO == MainActivity.PC_EXISTENTE) {
Log.d("--DEBUG--", "PC_EXISTENTE"); //++++++++++++++++++++
PC = intent.getParcelableExtra("PC_SELECCIONADO"); // Importo el PC de la actividad principal
Log.d("--DEBUG--", "Comienzo de seteo de valores"); //++++++++++++++++++++
ET_NOMBRE.setText(PC.getNOMBRE());
ET_PARTE.setText(String.valueOf(PC.getPARTE()));
ET_TELEFONO.setText(PC.getTELEFONO());
ET_FECHA.setText(PC.getFECHA());
ET_INCIDENCIA.setText(PC.getINCIDENCIA());
ET_DETALLES.setText(PC.getDETALLES());
ET_FECHAESTADO.setText(PC.getFECHAESTADO());
ID_ESTADO = PC.getID_ESTADO();
switch (ID_ESTADO){ // Establezco el texto del estado y la imagen del estado
case 0: ET_ESTADO.setText(R.string.estado_0);
IMG_ESTADO.setImageResource(R.drawable.ic_launcher);
case 1: ET_ESTADO.setText(R.string.estado_1);
IMG_ESTADO.setImageResource(R.drawable.ic_launcher);
case 2: ET_ESTADO.setText(R.string.estado_2);
IMG_ESTADO.setImageResource(R.drawable.ic_launcher);
case 3: ET_ESTADO.setText(R.string.estado_3);
IMG_ESTADO.setImageResource(R.drawable.ic_launcher);
case 4: ET_ESTADO.setText(R.string.estado_4);
IMG_ESTADO.setImageResource(R.drawable.ic_launcher);
}
Log.d("--DEBUG--", "Finalizacion de seteo de valores"); //++++++++++++++++++++
}
Log.d("--DEBUG--", "a poner adaptador de galeria"); //++++++++++++++++++++
ADAPTADOR_GALERIA = new ADA_galeria(CONTEXTO, PC.getIMAGENES());
GALERIA.setAdapter(ADAPTADOR_GALERIA);
Log.d("--DEBUG--", "adaptador de galeria puesto"); //++++++++++++++++++++
//----------------------------------------------------- BOTON ACEPTAR
BTN_ACEPTAR.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Log.d("--DEBUG--", "Clicheado BOTON ACEPTAR"); //++++++++++++++++++++
//Si los datos estan ok
if (Validar()) { //Devuelvo los valores resultado
Intent returnIntent = new Intent();
if (PC.getIMAGENES() == null) {
Log.d("--DEBUG--", "BBBB PC.getIMAGENES() == null"); //++++++++++++++++++++
}
// Asigno los valores de los EditText a el objeto PC
PC.setNOMBRE(ET_NOMBRE.getText().toString());
PC.setPARTE(Integer.parseInt(ET_PARTE.getText().toString()));
PC.setTELEFONO(ET_TELEFONO.getText().toString());
PC.setFECHA(ET_FECHA.getText().toString());
PC.setINCIDENCIA(ET_INCIDENCIA.getText().toString());
PC.setDETALLES(ET_DETALLES.getText().toString());
PC.setID_ESTADO(ID_ESTADO);
PC.setFECHAESTADO(ET_FECHAESTADO.getText().toString());
Log.d("--DEBUG--", "Valores asignados"); //++++++++++++++++++++
// Devuelvo el PC con el intent
returnIntent.putExtra("PC_RESULTADO", PC);
setResult(RESULT_OK,returnIntent);
Toast.makeText(CONTEXTO, "Resultado de actividad pasado. Falta FINISH", Toast.LENGTH_LONG).show();
CONTEXTO.finish();
Toast.makeText(CONTEXTO, "FINISH EJECUTADO", Toast.LENGTH_LONG).show();
}
}
});
//----------------------------------------------------- BOTON LLAMAR
BTN_LLAMAR.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
String TEL = ET_TELEFONO.getText().toString();
Intent INTENT_LLAMAR = new Intent(Intent.ACTION_CALL);
INTENT_LLAMAR.setData(Uri.parse("tel:" + TEL));
startActivity(INTENT_LLAMAR);
}
});
//----------------------------------------------------- BOTON FOTO
BTN_FOTO.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Log.d("DEBUG", "BOTON FOTO CLICKADO"); //++++++++++++++++++++
dispatchTakePictureIntent();
Log.d("DEBUG", "PROCESADO FOTO TERMINADO"); //++++++++++++++++++++
}
});
//----------------------------------------------------- IMAGEN DE GALERIA
GALERIA.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int posicion,
long arg3) {
show_fullscreen(PC.getIMAGENES().get(posicion).getRUTA());
}
});
//-----------------------------------------------------
}
//======================================================== onDestroy
@Override
protected void onDestroy() {
Toast.makeText(CONTEXTO, "onDestroy", Toast.LENGTH_LONG).show();;
super.onDestroy();
}
//======================================================== RESULTADO DE ACTIVIDAD LAMADA
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
ULTIMA_FOTO.setHD(BitmapFactory.decodeFile(ULTIMA_FOTO.getRUTA())); // Asigno la imagen tomada
ADAPTADOR_GALERIA.notifyDataSetChanged(); // Luego de que la foto se sacó actualizo la galeria
}
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_CANCELED) {
if(ULTIMO_FILE.delete() == true){ // Borro el archivo creado
Log.d("DEBUG", "Archivo de imagen temporal borrado"); //++++++++++++++++++++
}
}
}
//======================================================== VALIDA LOS DATOS INGRESADOS
private boolean Validar(){
boolean OK = true;
if (ET_NOMBRE.length() == 0) {
Toast.makeText(CONTEXTO, "Falta introducir un nombre", Toast.LENGTH_LONG).show();
OK = false;
}
if (ET_PARTE.length() == 0) {
Toast.makeText(CONTEXTO, "Falta introducir un número de parte", Toast.LENGTH_LONG).show();
OK = false;
}
if (ET_TELEFONO.length() == 0) {
Toast.makeText(CONTEXTO, "Falta introducir un teléfono", Toast.LENGTH_LONG).show();
OK = false;
}
if (ET_FECHA.length() == 0) {
Toast.makeText(CONTEXTO, "Falta introducir la fecha del parte", Toast.LENGTH_LONG).show();
OK = false;
}
if (ET_INCIDENCIA.length() == 0) {
Toast.makeText(CONTEXTO, "Falta introducir la incidencia", Toast.LENGTH_LONG).show();
OK = false;
}
if (ET_DETALLES.length() == 0) {
Toast.makeText(CONTEXTO, "Faltan introducir los detalles de la incidencia", Toast.LENGTH_LONG).show();
OK = false;
}
if (ET_ESTADO.length() == 0) {
Toast.makeText(CONTEXTO, "Faltan introducir el estado", Toast.LENGTH_LONG).show();
OK = false;
}
return OK;
}
//======================================================== CREA EL ARCHIVO DE LA IMAGEN Y LA ALMACENA
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "EEE" + "-" + timeStamp;
File carpeta = new File(Environment.getExternalStorageDirectory() + "/EEE Imagenes");
boolean OK = false;
if (!carpeta.exists()){
OK = carpeta.mkdir();
}
if (OK){
}
else{
}
File image = File.createTempFile(imageFileName, ".jpg", carpeta);
// Save a file: path for use with ACTION_VIEW intents
return image;
}
//========================================================
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
Log.d("DEBUG", "photoFile != null"); //++++++++++++++++++++
ULTIMO_FILE = photoFile;
ULTIMA_FOTO = PC.addIMAGEN(new foto(photoFile.getAbsolutePath(), null, null)); // Agrego la ruta de la imagen al arraylist
Log.d("--> DEBUG", "RUTA DONDE SE GUARDO LA FOTO: " + photoFile.getAbsolutePath()); //++++++++++++++++++++
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
//======================================================== MUESTRA LA IMAGEN EN PANTALLA COMPLETA
private void show_fullscreen(String IMG_PATH){ //VERRRRR DE NO USAR RUTA
Intent intent_ver = new Intent();
intent_ver.setAction(android.content.Intent.ACTION_VIEW);
intent_ver.setDataAndType(Uri.fromFile(new File(IMG_PATH)),"image/*");
startActivity(intent_ver);
}
//========================================================
}