2011-11-28 65 views
3

我正在制作一个应用程序,可以从摄像头拍摄图片并将其加载到ImageView中。 现在我的问题是,当我打开一个摄像头,拍照并返回到我的应用程序,然后 onCreate方法也被调用,然后调用onActivityResult后。当从摄像头返回结果时也调用onCreate方法

这个问题出现在三星的模型中。当我在HTC Wildfire上运行这段代码时,一切正常。在HTC Wildfire onActivityResult被调用,然后onResume被调用。所以我想要在HTC Wildfire中实现 ,但不能三星S.

这里是我的代码,

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     Drawable drawable = null; 
     System.out.println("Faces Fond"+facesFound); 
     System.out.println("On Activity Result is called"); 
     switch (requestCode) { 

     case Constants.PICK_IMAGE: 
      switch(resultCode) 
      { 
      case RESULT_CANCELED: 
       break; 
      case RESULT_OK: 
       dragLayer.removeAllViews(); 
       isFaceDetected = false; 
       resetArray(); 
       numberOfViews = 0; 
       if(data!=null){ 
       uriOfImage = data.getData(); 
       System.out.println("Uri is "+ uriOfImage); 
       if(bitmapForDragLayer != null) 
       bitmapForDragLayer.recycle(); 
        try { 
         bitmapForDragLayer = BitmapFactory.decodeStream(getContentResolver().openInputStream(uriOfImage)); 
         bitmapForDragLayer = Bitmap.createScaledBitmap(bitmapForDragLayer, widthOfBitmap, heightOfBitmap, true); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } 
        catch(Exception e){ 
         e.printStackTrace(); 
        } 
        drawable = new BitmapDrawable(bitmapForDragLayer); 
        dragLayer.setBackgroundDrawable(drawable); 
        isImageLoaded = false; 
        } 
       break; 
      } 
       break; 

     case Constants.TAKE_PICTURE_CODE: 
      switch(resultCode) 
      { 
      case RESULT_CANCELED: 
       break; 
      case RESULT_OK: 
       dragLayer.removeAllViews(); 
       isFaceDetected = false; 
       resetArray(); 
       numberOfViews = 0; 
       System.out.println("Value of data"+data); 
       if(data!=null){ 
       bitmapForDragLayer = (Bitmap)data.getExtras().get("data"); 
       bitmapForDragLayer = Bitmap.createScaledBitmap(bitmapForDragLayer, widthOfBitmap, heightOfBitmap, true); 
        drawable = new BitmapDrawable(bitmapForDragLayer); 
       dragLayer.setBackgroundDrawable(drawable); 
       isImageLoaded = false; 
       } 
       break; 
      } 
      break; 

     case Constants.FRAME_SELECT_CODE: 
      currentFrame = frameSelection.getFrameBitmap(resultCode); 
      currentSelectedBitmapVO.setSelectedBitmap(selectedFrame); 
      selectedFrame = currentFrame; 
        for(int i=0;i<array.size();i++) 
        { 
         System.out.println("value of i"+i); 
         if(array.get(i)) 
         { 
         int height = currentBitmapVO[i].getSelectedBitmapHeight(); 
         int width = currentBitmapVO[i].getSelectedBitmapWidth(); 
         Bitmap b = Bitmap.createScaledBitmap(currentFrame, width, height, true); 
         selectedFrame = b; 
         imageView[i].setImageBitmap(selectedFrame); 
         imageView[i].invalidate(); 
         } 
        } 
       break; 
     } 
} 

这里是调用相机,可拍摄图片的代码。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, Constants.TAKE_PICTURE_CODE); 

相同的代码在HTC中运行良好,但在三星中没有。

+0

您的活动如何处理配置更改? – QuickNick

+0

看看这篇文章:http://stackoverflow.com/questions/4901752/android-2-2-sdk-droid-x-camera-activity-doesnt-finish-properly/8679892#8679892我解决了关于这个问题使用丑陋的解决方法调用onCreate函数。 – Neonigma

回答

1

也许你的应用程序已被系统杀死,因为拍照时内存不足。然后,活动生命周期将再次开始:onCreate()

+0

但是这个代码在HTC Wildfire中工作正常,它具有较低的处理器,三星S拥有比HTC Wildfire更高的处理器。 – Pankit

+0

我检查logCat,我发现onCreate和onResume被调用两次,onActivityResult被调用一次。顺序如下。 1.onCreate 2.onActivityResult 3.onResume 4.onCreate 5.onResume。 – Pankit

+0

@Pankit,我解决了同样的问题。这是你正在寻找的: http://stackoverflow.com/questions/10411009/activity-killed-oncreate-called-after-taking-picture-via-intent – Cookienator

相关问题