28

Tôi đang cố gắng chụp ảnh bằng ý định. Vấn đề của tôi là đôi khi sau khi chụp một bức ảnh hoạt động của tôi, mà gọi là startActivityForResult, dường như bị phá hủy để onCreate được gọi lại.Hoạt động bị giết/onCreate được gọi sau khi chụp ảnh thông qua mục đích

Đây là mã của tôi để chụp ảnh sau khi nhấp một ImageView, mà hình ảnh sẽ được thay thế:

if (!getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
      Util.makeLongToast(R.string.lang_no_camera); 
     } else { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, TAKE_ITEM_PHOTO); 
     } 

...

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.v(TAG, "onactivityresult called"); 
    if (requestCode == TAKE_ITEM_PHOTO) { 
     if (data != null) { 

      imageUri = data.getData(); 


       try { 
        img_photo.setImageBitmap(Media.getBitmap(
          getContentResolver(), imageUri)); 
      } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

     } else 
      Log.w(TAG, "data is null"); 
    } 
} 

Vì vậy, tất cả tôi cố gắng là để chụp ảnh và thay thế hình ảnh của một lần xem hình ảnh với nó. Nhưng trong một số trường hợp, onCreate được gọi sau khi onActivityResult được gọi và hình ảnh mới bị mất.

Trợ giúp được đánh giá cao.

+1

bản sao có thể có của [Android: Hoạt động bị hủy sau khi gọi Camera Intent] (http: // stackoverflow.com/questions/16014930/android-activity-getting-destroyed-after-calling-camera-intent) –

Trả lời

102

Thực tế máy ảnh gây ra sự thay đổi định hướng trong hoạt động của bạn, đó là lý do tại sao hoạt động của bạn bị hủy và tái tạo.

Thêm điều này vào tệp kê khai của bạn, điều này sẽ ngăn thay đổi hướng và hoạt động của bạn sẽ không bị hủy và được tạo lại.

<activity 
    android:name=".YourActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:screenOrientation="portrait" > 
</activity> 
+2

Cảm ơn bạn! android: configChanges = "orientation | keyboardHidden" là dòng bị thiếu! ;) – Cattivo

+13

THANK YOU cho câu trả lời này! Tôi đang ôm màn hình của mình –

+15

Cũng xin lưu ý rằng trong API cao hơn cấp 13, bạn cũng nên thêm "screenSize" vào configChanges. http://developer.android.com/guide/topics/manifest/activity-element.html –

1

Sửa định hướng hoạt động/ứng dụng của bạn vì khi bạn quay lại/kết thúc() hoạt động và đồng thời bạn thay đổi hướng thì làm mới hoạt động và tự động khởi động lại.

1

Dường như có điện thoại phá hủy hoạt động khi nhập hình ảnh, chẳng hạn như Galaxy S3. Nó được đề cập rằng nếu ứng dụng của tôi là ở chế độ chân dung nó sẽ xảy ra bởi vì những hình ảnh đang ở chế độ phong cảnh. Vì vậy, tất cả các đề xuất liên quan đến configChanges trong tệp kê khai không áp dụng cho trường hợp này.

Điều tôi đã làm thay vì chống lại onDestroy của hoạt động (khiến cho onActivityResult() của đoạn không được gọi sau onCreate()) là thực hiện onActivityResult() cũng trong hoạt động của chính nó và ở đó Tôi có thể nhận được đường dẫn hình ảnh. Sau đó, tôi đã vượt qua con đường đó đến mảnh vỡ, một khi nó được tạo ra, để tiếp tục xử lý. Tất nhiên tôi phải nói với ứng dụng của mình, khi nó được tạo lại, nó cần quay trở lại fragmnet gọi để xử lý hình ảnh

Các vấn đề liên quan