2011-08-05 37 views
0

我開始對Android的默認攝像頭應用程序使用下面的代碼來獲得我的應用程序的圖片:Android的默認攝像頭應用打開兩次

//create parameters for Intent with filename 
     ContentValues values = new ContentValues(); 
     values.put(MediaStore.Images.Media.TITLE, fileName); 
     values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera"); 

     //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState) 
     imageUri = getContentResolver().insert(
     MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

     //create new Intent 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
     intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 

     startActivityForResult(intent, actionCode); 

,並趕在onActivityResult方法中的圖片。

通常,這將工作得很好,設備將拍攝照片並將其返回給應用程序,但有時在完成相機應用程序(通過保存圖像或點擊取消)後,它會啓動相機應用程序一秒鐘時間。我怎樣才能防止應用程序打開兩次?

編輯:感謝Krylez的評論我能夠提出一個解決方案。

我已經在使用一個靜態類來保存來自相機的圖像,以便它可以被我選中的Activity所訪問,所以我也在其中放置了一個布爾值。現在,在我開始Activity來處理相機之前,我將該布爾值設置爲true,然後在檢查之後將其設置爲false,以便如果再次調用onCreate方法,則不會再次加載相機。

+0

此代碼塊屬於哪種方法? – Krylez

+0

它在onCreate方法中。相機實際上是以選項卡式的意圖來使用,但startActivityForResult在這種情況下會產生奇怪的結果,所以我開始另一個在選項卡之外的活動來處理從相機意圖獲取圖像。 – Laser

+0

好的,爲什麼它發生了一些時間,而不是其他的原因是活動停留在內存中,直到操作系統需要它。返回到相機的活動會導致onCreate方法再次被調用,重新打開相機。 – Krylez

回答

2

感謝Krylez的評論,我能夠提出解決方案。

我已經在使用一個靜態類來保存來自相機的圖像,以便它可以被我選中的Activity所訪問,所以我也在其中放置了一個布爾值。現在,在我開始Activity來處理相機之前,我將該布爾值設置爲true,然後在檢查之後將其設置爲false,以便如果再次調用onCreate方法,則不會再次加載相機。

0

我能夠通過使用相同的布爾技術解決此問題,但通過共享偏好設置,在首選項中存儲yes或no幷包裝新的意圖。

   String val=sharedPref.getString(...); 
       if(val.equals("true")) 
       { launch new intent 
        sharedPrefEditor.putstring("..","false"); 
        sharedPrefEditor.commit(); 
       } 

它解決了這個問題,相機無法運行兩次。 謝謝。

相關問題