1

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);
    }
    //========================================================
}

0 Answers0