Chúng tôi đang phát triển trò chơi độc lập cho android và muốn người dùng chọn biệt hiệu của mình. Chúng tôi đã chọn sử dụng Hoạt động gốc được cung cấp bởi NDK vì đó dường như là cách dễ nhất để đi.Sụp đổ khi đóng bàn phím mềm khi đang sử dụng hoạt động gốc
Vấn đề đầu tiên chúng tôi gặp phải với bàn phím là các chức năng ANativeActivity_showSoftInput() dường như không làm gì cả (như mô tả ví dụ here), vì vậy chúng tôi đưa lên bàn phím sử dụng JNI cuộc gọi đến chức năng:
static void showKeyboard(Activity activity) {
String s = Context.INPUT_METHOD_SERVICE;
InputMethodManager m = (InputMethodManager)activity.getSystemService(s);
View w = activity.getWindow().getDecorView();
m.showSoftInput(w, 0);
}
Tính năng này hoạt động tốt khi đưa bàn phím lên và hoạt động tốt trên một số thiết bị. Nhưng trên các thiết bị khác (ví dụ Nexus 7), khi người dùng cố gắng để đóng bàn phím bằng cách nhấn "ẩn bàn phím" nút ứng dụng bị đóng băng với debug đầu ra này:
I/InputDispatcher( 453): Application is not responding: AppWindowToken{429b54a8 token=Token{42661288 ActivityRecord{41bb0b00 u0 com.example.project/android.app.NativeActivity}}} - Window{420d6138 u0 com.example.project/android.app.NativeActivity}. It has been 5006.7ms since event, 5005.6ms since wait started. Reason: Waiting because the focused window has not finished processing the input events that were previously delivered to it.
I/WindowManager( 453): Input event dispatching timed out sending to com.example.project/android.app.NativeActivity
Và sau đó người dùng sẽ được trình bày với một hộp thoại hộp nói rằng:
Project isn't responding. Do you want to close it? [Wait]/[OK]
Có điều gì đó chúng tôi đang làm rõ ràng là sai? Hoặc có thể đây là một lỗi? Các vấn đề như this one dường như đề xuất chức năng bàn phím chưa bao giờ được triển khai đúng cách trong keo gốc.
Trên một lưu ý phụ, chúng tôi chưa thử nghiệm trên nhiều thiết bị, nhưng những nơi mà nó không sụp đổ là những người có hệ điều hành Android cũ hơn. Ngoài ra, đối với những người gặp sự cố, khi bàn phím xuất hiện, nút này sẽ thay đổi nút quay lại từ một cái trông giống như thế này thành nút trông giống như thế này . Có lẽ điều đó tương ứng với một sự kiện đầu vào khác không được tính khi lần đầu tiên họ phát triển loại keo gốc? Tôi chỉ đang đoán thôi .
Dù sao, nếu ai đó có bàn phím mềm hoạt động trong khi sử dụng hoạt động gốc, vui lòng cho chúng tôi biết bạn đã làm như thế nào.
Cheers
CẬP NHẬT
Nó đã được báo cáo là một lỗi trong Android here, chúng tôi vẫn sẽ rất vui khi được nghe về cách giải quyết mặc dù. Nếu bạn cũng bị ảnh hưởng bởi nó, bạn có thể muốn bỏ phiếu cho vấn đề đó (bằng cách nhấn dấu sao).
Tôi hoàn toàn bị mất điều đó, tốt hơn nhiều so với vá các tập tin c, cảm ơn bạn. –
Tình cờ, tôi đã nhận được bản nâng cấp cho Nexus của mình hôm nay và có vẻ như sự cố đã được khắc phục trong Android 4.3. Đề xuất của bạn giúp bạn dễ dàng áp dụng hàm process_input được vá chỉ khi phiên bản Android là 4.2. Nếu bạn muốn, bạn có thể kết hợp các câu trả lời của bạn và của tôi để cung cấp một giải pháp cuối cùng cho người khác. Sau đó tôi sẽ đánh dấu nó là câu trả lời cuối cùng. Nếu không, nếu tôi sẽ nhớ, tôi sẽ cố gắng làm điều đó đôi khi vào tuần tới. Chúc mừng. –
Chắc chắn - đã cập nhật. Tôi cũng nhận thấy sự cố được khắc phục ở 4.3! Quá xấu nó sẽ tồn tại trên thị trường trên 4.1 và 4.2 điện thoại trong một thời gian ... – krsteeve