2011-09-02 64 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(); 
    } 

} 

}

相關問題