2014-01-09 52 views
0

我已经是从所谓的活动TabActivity(我知道这是不建议使用)为:带摄像头的意图拍照永远不会回到onActivityResult()

intent2 = new Intent().setClass(this, sin2.class); 
spec = tabHost.newTabSpec("second").setIndicator("Second").setContent(intent2); 
tabHost.addTab(spec); 

这是拍摄照片的活动,将它们保存并设置缩略图。它完美的作品在大量的设备,但三星Galaxy掌上银河奇迹(总的Android 2.X)有时当我启动相机意图,它永远不会回到onActivityResult(),这意味着:

  1. 我拍照
  2. 我保存它
  3. 我不回去onActivityResult()
  4. 它让我再拍一张照片

和循环...我永远不会回来,如果我按finish(),我回到我目前的活动。

我读过StackOverflow关于做像getParent().startActivityForResult(Intent,RequestCode);这样的东西,但不起作用。

这是我把我的照片:提前

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
mMakePhotoUri = Uri.fromFile(photofile); 
i.putExtra(MediaStore.EXTRA_OUTPUT, mMakePhotoUri); 
startActivityForResult(i, num); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode==RESULT_OK) 
    { 
     if (requestCode == 1) 
     { 
      .............. things I do. 
     } 
    } 
} 

谢谢!


我的代码:

上的onCreate(photo是位图):

 scatta.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      photo = null; 
      if(foto1.getDrawable()==null) 
       foto(1); 
      else if(foto2.getDrawable()==null) 
       foto(2); 
      else if(foto3.getDrawable()==null) 
       foto(3); 
      else 
       Toast.makeText(sinistri2.this, "Cancella una foto per poter scattare un'altra", Toast.LENGTH_LONG).show(); 
     } 
    }); 

照片(INT)功能:

@SuppressLint("SimpleDateFormat") 
public void hacerfoto(int num){ 
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); 
String n = sdf.format(new Date()); 
String fotoname = "Immagine-"+ n +".jpg"; 
File photostorage = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
File photostorage2 = new File(photostorage, "im"); 
photostorage2.mkdirs(); 
photofile = new File(photostorage2, fotoname); 

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
mMakePhotoUri = Uri.fromFile(photofile); 
i.putExtra(MediaStore.EXTRA_OUTPUT, mMakePhotoUri); 
startActivityForResult(i, num); 
} 

我onActivityResult功能:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    String filename = sacarfoto(); 

    if (requestCode == 1){ 

     sacarfoto(); 


     if(photo != null){ 
      ruta1 = sacarfoto(); 
      foto1.setBackgroundColor(Color.parseColor("#00000000")); 
      photo = f.resize(photo, filename); 
      foto1.setImageBitmap(photo); 

      cancellare1.setVisibility(View.VISIBLE); 

     } 
     else{ 
      cancellare1.setVisibility(View.GONE); 
      foto1.setBackgroundResource(R.drawable.fondoicona); 
      Toast.makeText(this, "C'è stato un errore, riprova a scattare la foto", Toast.LENGTH_LONG).show(); 
     } 

     try { 
     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     File f = new File(ruta1); 
     Uri contentUri = Uri.fromFile(f); 
     mediaScanIntent.setData(contentUri); 
     this.sendBroadcast(mediaScanIntent); 
     } catch (Exception e) { 

     } 
    } 
    if (requestCode == 2){ 
     sacarfoto(); 
     if(photo != null){ 
      ruta2 = sacarfoto(); 
      photo = f.resize(photo, filename); 
      foto2.setImageBitmap(photo); 
      foto2.setBackgroundColor(Color.parseColor("#00000000")); 
      cancellare2.setVisibility(View.VISIBLE); 
     } 
     else{ 
      cancellare2.setVisibility(View.GONE); 
      foto2.setBackgroundResource(R.drawable.fondoicona); 
      Toast.makeText(this, "C'è stato un errore, riprova a scattare la foto", Toast.LENGTH_LONG).show(); 
     } 

     try{ 
     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     File f = new File(ruta2); 
     Uri contentUri = Uri.fromFile(f); 
     mediaScanIntent.setData(contentUri); 
     this.sendBroadcast(mediaScanIntent); 
     } catch (Exception e) { 

     } 
    } 
    if (requestCode == 3){ 
     sacarfoto(); 

     if(photo != null){ 
      ruta3 = sacarfoto(); 
      photo = f.resize(photo, filename); 
      foto3.setImageBitmap(photo); 
      foto3.setBackgroundColor(Color.parseColor("#00000000")); 
      cancellare3.setVisibility(View.VISIBLE); 

     } 
     else{ 
      cancellare3.setVisibility(View.GONE); 
      foto3.setBackgroundResource(R.drawable.fondoicona); 
      Toast.makeText(this, "C'è stato un errore, riprova a scattare la foto", Toast.LENGTH_LONG).show(); 
     } 

     try { 
     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     File f = new File(ruta3); 
     Uri contentUri = Uri.fromFile(f); 
     mediaScanIntent.setData(contentUri); 
     this.sendBroadcast(mediaScanIntent); 
     } catch (Exception e) { 

     } 
    } 
    if (requestCode == 4) { 

     try{ 
      Uri selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri); 
      System.out.println("Image Path : " + selectedImagePath); 
      photo = f.decodeAndResizeFile(new File(selectedImagePath)); 


     } catch(NullPointerException ex){ 
      try { 
      photo = (Bitmap) data.getExtras().get("data"); 
      } 
      catch (Exception e){ 
       photo = BitmapFactory.decodeFile(selectedImagePath);   
      } 
     } 
      if(photo != null){ 
       if (foto1.getDrawable()==null){ 
        photo = f.resize(photo,selectedImagePath); 
        ruta1 = selectedImagePath; 
        foto1.setImageBitmap(photo); 
        foto1.setBackgroundColor(Color.parseColor("#00000000")); 
        cancellare1.setVisibility(View.VISIBLE); 
       } 
       else if (foto2.getDrawable()==null){ 
        photo = f.resize(photo,selectedImagePath); 
        ruta2 = selectedImagePath; 
        foto2.setImageBitmap(photo); 
        foto2.setBackgroundColor(Color.parseColor("#00000000")); 
        cancellare2.setVisibility(View.VISIBLE); 
       } 
       else if (foto3.getDrawable()==null){ 
        photo = f.resize(photo,selectedImagePath); 
        ruta3 = selectedImagePath; 
        foto3.setImageBitmap(photo); 
        foto3.setBackgroundColor(Color.parseColor("#00000000")); 
        cancellare3.setVisibility(View.VISIBLE); 
       } 
       else 
        Toast.makeText(sinistri2.this, "Cancella una foto per poter scattare un'altra", Toast.LENGTH_LONG).show(); 


      } 
      else{ 

       Toast.makeText(this, "Non si è potuto riuscire, riprova scattando una foto o scegliendo una foto dalla gallery.", Toast.LENGTH_LONG).show(); 
      } 
    } 
    } 

} 

函数sacarfoto()给出了一个String,但有时候会用于执行一个进程,但这个错误并不重要。

+0

“num”的值是什么? –

+0

我有很多'if(requestCode == someNum)',我处理它...它在一些设备上正常工作,例如我的。 num可能是1,2或3 –

+0

将您的完整代码 –

回答

1

我敢肯定,你认为它从来没有返回,但实际上它返回RESULT_CANCEL。尝试在onActivityResult中添加if(result == RESULT_CANCEL)。也许摄像头不可能保存图片或类似的东西。

+0

但是,它有时可以正常工作...我的意思是...如果时间不起作用,我重新启动应用程序并工作正常......无论如何,你会给我这个答案吗? =)。谢谢你的时间。 –

+0

尝试做一些调试并找出错误。意图是否返回null extras?是保存的图像? –

+0

是的,图像保存为我说的,然后意图是空=) –

相关问题