我有2项活动。从主要活动我用startActivityForResult调用第二个。在第二个我有一个按钮,调用相机拍照并使用startActivityForResult将其保存在SD中。 我遇到的问题是,当我打电话给相机并取回结果时,我再也无法完成第二个活动去第一个活动。按下后退按钮或从按钮调用完成()不再起作用。 关于它的奇怪之处在于它在AVD中工作正常并且在我的手机(三星Galaxy ace)中不起作用。 以下是带有问题的活动的完整代码:
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);
}
//========================================================
}