2011-09-02 47 views
3

对于我的应用程序,我有相机意图运行时创建一个活动。问题是,当我点击确定拍摄的照片时,它只是再次打开相机拍摄照片。这里是代码:从另一个活动中设置为false。我可以确认当这项活动开始时采取的是虚假的。照相机意图保持打开在Android

public class QuickEditActivity extends Activity { 

    public static boolean taken; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.quickedit); 

     if(!QuickEditActivity.taken) { 
      RunCam(); 
     } 

    } 

    private void RunCam() { 
     QuickEditActivity.taken = true; 
     Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(camIntent,1); 

    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(data != null && data.getExtras() != null) { 
      Bitmap bitmap = (Bitmap)data.getExtras().get("data"); 

      if(bitmap != null) { 
      ImageView imgView = (ImageView)findViewById(R.id.CamView); 

      imgView.setImageBitmap(bitmap); 

      } 
      else 
      { 

      this.finish(); 
      } 

     } 
     else { 
      this.finish(); 
     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 
}  
+0

会不会采取需要是真的,说明你处理了吗?或者你在说别的什么?另外发布你的其他代码,你谈论另一个活动,它在做什么? – Jack

回答

4

我的心理能力告诉我你有一个Nexus手机。此外,我的心理能力告诉我,当您通过camIntent启动相机捕获Activity时,您的程序将被杀死,然后在相机捕获Activity完成时重新启动。因此,您的静态变量taken正被重置为false,导致您的onCreate方法始终认为这是它第一次启动,因此将您置入无限的摄像头捕获循环。

Log.d("QuickEditActivity", "Value of taken = " + (taken ? "true" : "false")); 

您可以通过重写onSaveInstanceState()解决这个问题:

您可以通过添加以下语句,你onCreate方法验证这一点

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putBoolean("taken", true); 
} 

然后检查传入的Bundle这个值到你的onCreate(Bundle)方法。

一定要让我知道我的心灵力量是如何做到的。

+1

+1 - 心灵开发者荣誉 – Martyn

+0

你的能力很接近。我有一个Droid,我听说与Nexus有类似的问题。我发现它总是设置为false,所以让我到某个地方。我甚至把这个变量放在一个不同的类中,以使它更加全局,并且由于某种原因它仍然重置为false。我实现了onSaveInstanceState(),它崩溃了,我不知道为什么。它尝试使用savedInstanceState.getboolean()时崩溃。我可能需要手工嵌入相机。你有没有其他的建议是心理上的? – Cody

+0

什么是崩溃时的堆栈? –

-1

我固定它做它用不同的方式,在这里: 这又在开始QuickEditActivity

private void startQuickEditActivity() { 

    RunCam(); 

} 


private void RunCam() { 
    Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(camIntent,1); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Intent i = new Intent(this, QuickEditActivity.class); 
    i.putExtras(data); 
    startActivity(i); 

    super.onActivityResult(requestCode, resultCode, data); 
} 

类这里是在快速编辑

公共类QuickEditActivity代码延伸活动{

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.quickedit); 

    Intent data = this.getIntent(); 

    if(data != null && data.getExtras() != null) { 
     Bitmap bitmap = (Bitmap)data.getExtras().get("data"); 


    if(bitmap != null) { 
     ImageView imgView = (ImageView)findViewById(R.id.CamView); 

     imgView.setImageBitmap(bitmap); 



    } 
    else 
    { 

     this.finish(); 
    } 

    } 
    else { 
     this.finish(); 
    } 

} 

}