2012-12-05 44 views
30

Các Maps v2 bang tài liệu:Android Maps API đòi hỏi OpenGL ES 2

Bởi vì phiên bản 2 của API Google Maps dành cho Android đòi hỏi OpenGL ES phiên bản 2, bạn phải thêm một yếu tố <uses-feature> như một đứa trẻ của các yếu tố manifest trong AndroidManifest.xml:

<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true"/>` 

này thông báo cho các dịch vụ bên ngoài của yêu cầu . Đặc biệt, nó có tác dụng ngăn chặn Google Cửa hàng Play hiển thị ứng dụng của bạn trên các thiết bị không hỗ trợ phiên bản OpenGL ES 2.

Trong thực tế, nó ném một exception nếu điều này không có trong manifest . Tôi không muốn lọc ứng dụng của mình trong cửa hàng, tôi dự định tiếp tục sử dụng bản đồ cũ cho các thiết bị cũ và chỉ hiển thị bản đồ mới nếu các tính năng được yêu cầu có mặt, được phát hiện trong thời gian chạy thay vì trước khi cài đặt.

Vậy làm cách nào để thực hiện điều đó? Nó có phải giống như một số APKs với số khác nhau manifests?

+2

Chỉ cần android: required = "false". Sau đó, nó không nên được lọc. – thaussma

+6

'android: required =" false "' kết quả trong '12-05 22: 18: 31.484: E/AndroidRuntime (9618): Gây ra bởi: java.lang.RuntimeException: API Google Maps Android chỉ hỗ trợ OpenGL ES 2.0 andabove. Vui lòng thêm vào AndroidManifest.xml 'trên Nexus S 4.1.2 – qubz

+0

Vấn đề tương tự ở đây, nếu tôi xóa yêu cầu khỏi tệp kê khai (hoặc set required = "false") MapFragment ném một ngoại lệ trên một thiết bị không hỗ trợ OpenGL ES 2.0. Nó giống như MapFragment đang tìm kiếm yêu cầu trong cấu hình dịch vụ hoạt động hơn là kiểm tra xem bản thân thiết bị có hỗ trợ OpenGL ES 2.0 hay không. –

Trả lời

28

cuối cùng Cập nhật

Tính đến 2013/12/20, các Android Dashboard cho thấy khoảng 100% các thiết bị bây giờ hỗ trợ OpenGL 2.0+ nên câu trả lời này là không còn phù hợp. Bạn có thể chỉ cần yêu cầu OpenGL ES 2.0+ trong tệp kê khai của mình.

Cập nhật

này được cố định như của rev 7 của Google Play Services SDK add-on. Sử dụng an toàn là <uses-feature android:glEsVersion="0x00020000" android:required="false"/> và đến detect OpenGL ES 2.0 at runtime.

Original câu trả lời

Dường như API v2 Google Maps dành cho Android đòi hỏi một <uses-feature android:glEsVersion="0x00020000" android:required="true/> khai rõ ràng trong AndroidManifest.xml vì vậy không có cách nào để triển khai Google Maps dành cho Android dịch vụ API v2 không loại trừ tất cả các thiết bị 1.x OpenGL ES . Tại thời điểm viết bài này, Google's Android Dashboard cho thấy rằng, trong số các thiết bị 1.1 và 2.0, 90.8% thiết bị hỗ trợ 2.0.

Trên một thiết bị đặc biệt (Motorola XOOM), mã này kết quả trong supportsEs2 = true:

// Check if the system supports OpenGL ES 2.0. 
final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); 
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000; 

Tuy nhiên, khi không có <uses-feature> khai trong biểu hiện, MapFragment là ném một RuntimeException:

Caused by: java.lang.RuntimeException: Google Maps Android API only supports OpenGL ES 2.0 andabove. Please add <uses-feature android:glEsVersion="0x00020000" android:required="true" /> into AndroidManifest.xml 
    at maps.y.ae.a(Unknown Source) 
    at maps.y.bu.a(Unknown Source) 
    at maps.y.p.onCreateView(Unknown Source) 
    at com.google.android.gms.maps.internal.IMapFragmentDelegate$Stub.onTransact(IMapFragmentDelegate.java:107) 
    at android.os.Binder.transact(Binder.java:297) 
    at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source) 
    at com.google.android.gms.maps.SupportMapFragment$a.onCreateView(Unknown Source) 
    at com.google.android.gms.internal.c$4.a(Unknown Source) 
    at com.google.android.gms.internal.c.a(Unknown Source) 
    at com.google.android.gms.internal.c.onCreateView(Unknown Source) 
    at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:884) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066) 
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168) 
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:280) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 
    ... 22 more 

Dưới đây là hy vọng rằng bản cập nhật cho thư viện Maps sẽ xóa giới hạn này để chúng tôi có thể triển khai một APK đơn lẻ và sử dụng API thời gian chạy để xác định có tải trải nghiệm Google Maps phiên bản 2 mới hay không giải pháp tốt.

+4

Vấn đề này được theo dõi tại đây: http://code.google.com/p/gmaps-api-issues/issues/detail?id=4699 Đừng quên gắn dấu sao vấn đề, với hy vọng rằng nó sẽ nhận được nhận thấy. Tính đến tháng 12 năm 2012, chỉ có 7 phiếu. –

2

này là cố định và sẽ được phát hành với phiên bản tiếp theo của Android Maps API như đã đề cập trong issue #4699

1

tôi đã cùng một vấn đề, nhìn xung quanh và hầu hết các workaround gợi ý cho giả lập không làm việc cho tôi. Sau đó, tôi tìm thấy một bài đăng là giả lập Genymotion được đề xuất. Trình mô phỏng này hỗ trợ phiên bản OpenGL ES 2. Nó cũng nhanh hơn nhiều so với trình mô phỏng chuẩn.

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