2012-06-21 30 views
5

Đây là một điều thú vị ...hướng Android - các vấn đề có ý định (máy ảnh)

Tôi có một ứng dụng tôi đang viết cho các thiết bị chạy Android 2.3.3 trở lên.

Nó có hoạt động chính gọi camera qua Intent.

Nếu người dùng nhấp vào nút để khởi chạy máy ảnh; sau đó chụp ảnh; sau đó nhấp vào "Xong" để quay lại hoạt động chính - ứng dụng hoạt động tốt và hiển thị ảnh mới trong một lần xem trên hoạt động chính. Tuy nhiên,

tuy nhiên, nếu người dùng sử dụng hoạt động chính theo hướng dọc; sau đó nhấp vào nút để mở ý định của máy ảnh và thay đổi hướng sang cảnh quan; sau đó nhấp vào thực hiện để quay lại hoạt động chính - ứng dụng gặp sự cố

nhưng sau đó ... tuy nhiên, nếu người dùng sử dụng hoạt động chính theo hướng dọc; sau đó nhấp vào nút để mở ý định của máy ảnh và thay đổi hướng sang cảnh quan; sau đó thay đổi hướng quay về chân dung (trong máy ảnh) trước khi nhấp vào xong để trở về hoạt động chính - sau đó ứng dụng tiếp tục chạy bình thường.

Tôi đã thử thay đổi tệp kê khai để buộc ứng dụng (hoạt động chính) được định hướng theo chiều dọc xử lý việc tái bản vẽ của hoạt động trên đó trở về từ mục đích camera:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

trong cửa sổ gỡ lỗi tôi nhận được lỗi mô tả trường hợp ngoại lệ nullpointer - tôi nghĩ rằng điều này là do các quan điểm không còn ở đó sau khi một sự thay đổi định hướng cho hình ảnh được chuyển vào trừ khi định hướng giống như khi nó được để lại.

Tôi hơi bị kẹt nên sẽ đánh giá cao một số lời khuyên.

+0

http://i56.tinypic.com/2iu97on.jpgh logcat của sự cố – max4ever

+0

http://stackoverflow.com/questions/14066038/why-image-captured-using-camera-intent-gets-rotated-on -some-devices-in-android –

Trả lời

3

Khi định hướng màn hình của bạn thay đổi, Activity của bạn bị hủy và được tạo lại theo hướng mới. Vì vậy, bất kỳ biến nào đã đạt được tham chiếu trong suốt thời gian của Activity sẽ không còn đề cập đến bất kỳ điều gì và nếu bạn cố truy cập các đối tượng mà chúng tham chiếu mà không gán lại giá trị cho chúng, bạn sẽ nhận được NullPointerException.

Phương pháp onSaveInstanceState() được sử dụng để lưu dữ liệu tạm thời giữa các thay đổi cấu hình. Điều này tạo ra một Gói được chuyển đến onCreate() khi số Activity khởi động lại.

Nếu không có bất kỳ mã nào, tôi không biết đó có phải là vấn đề của bạn hay không, nhưng đáng xem.

Xem http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges để biết thêm thông tin (và thông tin chính xác hơn tôi đã cung cấp, không nghi ngờ gì).

+0

Cảm ơn bạn đã biết mẹo. Trong quá trình điều tra, tôi thực sự đã tìm thấy hai tai nạn mà tôi phải đối phó. Sự cố đầu tiên đã được giải quyết bằng cách chèn hai phương thức này vào hoạt động chính của tôi: – agrodude

1

hey tôi không chắc chắn nhưng cố gắng để đưa tài sản trong file manifest này hy vọng nó sẽ làm việc

android:configChanges="orientation|keyboardHidden" 
+0

Điều đó có thể hoạt động, nhưng Google không khuyến nghị sử dụng bất kỳ thứ gì khác ngoài phương sách cuối cùng - xem http://developer.android.com/guide/topics/ resources/runtime-changes.html # HandlingTheChange – Spinner

+1

Điều này cũng không hoạt động: ( – NarendraJi

+0

@DroidWormNarendra cho tôi biết chính xác bạn muốn làm gì với bàn phím mềm? –

0

Một số thiết bị Android như Samsung S3 và S4 có cái nhìn bề mặt máy ảnh mặc định trong Chế độ phong cảnh. Khi bạn gọi máy ảnh và chụp ảnh và đến ứng dụng của bạn, cho dù bạn đã đặt định hướng PORTRAIT nó sẽ mở đầu tiên trong chế độ LANDSCAPE và sau đó thay đổi sang chế độ PORTRAIT.

Hành vi hệ điều hành Android của nó. Do hoạt động này tự tạo lại nó. Tại thời điểm đó bạn đang nhận được Null Pointer ngoại lệ. Bạn có thể xử lý bằng cách đặt configChanges trong tệp kê khai.

android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 

và bạn có thể lưu trữ dữ liệu tạm thời trong onSaveInstanceState() đúng theo @Spinner trong câu trả lời của mình.

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