Video: Project Tango 2025
Android thúc đẩy nhiều dự án sáng tạo của Google. Chẳng hạn, thiết bị máy tính bảng được gọi là Project Tango. Thoạt nhìn, một thiết bị Project Tango giống như một chiếc máy tính bảng 7 inch thông thường. Khi bật thiết bị, bạn sẽ thấy màn hình chính Android quen thuộc với các biểu tượng để khởi chạy ứng dụng và với các chỉ báo cho tín hiệu WiFi và Sức mạnh của pin.
Thiết bị này thậm chí chạy ứng dụng Cửa hàng Play của Google, vì vậy bạn có thể sử dụng nó để duyệt web, chỉnh sửa tài liệu và làm tất cả những thứ mà các thiết bị máy tính bảng thông thường làm.
Nhưng phần cứng của dự án Tango không phải là bình thường. Mặt sau của máy tính bảng có bộ cảm biến độ sâu, camera mắt cá và máy ảnh hồng ngoại. Kết hợp dữ liệu từ các nguồn này với phần mềm theo dõi chuyển động nội bộ, Project Tango tạo ra một bản đồ 3D của không gian xung quanh.
Bạn có thể tạo bản đồ phòng khách của riêng mình và lưu trữ bản đồ trên thiết bị Project Tango. Khi mang thiết bị trở lại phòng khách, thiết bị nhớ không gian và tất cả các vật bên trong không gian.
Tango đi kèm với một vài ứng dụng demo. Với một ứng dụng, bạn nhắm mục tiêu thiết bị ở hai điểm để đo khoảng cách giữa các điểm đó. Bạn có thể đứng một vài feet từ điểm xuất phát và điểm kết thúc bởi vì thiết bị này biết bạn từ đâu trong mỗi điểm.
Với một ứng dụng khác, bạn đi qua thế giới ảo. Để thay đổi quan điểm của bạn trong một thế giới, bạn không xoay một phím điều khiển, di chuyển con chuột, hoặc kéo ngón tay của bạn dọc theo một màn hình. Thay vào đó, bạn xem màn hình của thiết bị khi bạn di chuyển quanh môi trường thực tế của chính bạn. Thiết bị này cho bạn thấy những gì bạn thấy trong thế giới ảo khi bạn đi về phía trước, quay sang nhìn sang hai bên và điều hướng theo các đối tượng 3D ảo.
Để giúp bạn bắt đầu phát triển, Project Tango đi kèm với một số ứng dụng mẫu. Mở ứng dụng QuickStart rất cơ bản trong Android Studio hiển thị các giá trị dịch và xoay khi bạn di chuyển thiết bị từ nơi này sang nơi khác. (Xem hình sau).
Ở cốt lõi của ứng dụng QuickStart là Hoạt động trên Android. Một số mã của ứng dụng xuất hiện bên dưới.
/ * * Bản quyền năm 2014 Google Inc. Tất cả các quyền được bảo lưu. * * Cấp phép theo Giấy phép Apache, Phiên bản 2. 0 ("Giấy phép"); * bạn không thể sử dụng tệp này ngoại trừ tuân thủ Giấy phép. * Bạn có thể lấy bản sao Giấy phép tại * * // www. apache. org / licenses / LICENSE-2. 0 * * Trừ khi luật pháp hiện hành yêu cầu hoặc đã đồng ý bằng văn bản, phần mềm * phân phối theo Giấy phép được phân phối trên cơ sở "AS IS", * KHÔNG CÓ ĐẢM BẢO HO ORC ĐIỀU KIỆN BẤT K AN HÌNH THỨC NÀO, thể hiện hay ngụ ý.* Xem Giấy phép cho các ngôn ngữ cụ thể chi phối điều khoản và * hạn chế theo Giấy phép. * / import com. Google. atap. tangoservice. Tango; nhập khẩu com. Google. atap. tangoservice. Tango. OnTangoUpdateListener; nhập khẩu com. Google. atap. tangoservice. TangoConfig; nhập khẩu com. Google. atap. tangoservice. TangoCoordinateFramePair; nhập khẩu com. Google. atap. tangoservice. TangoPoseData; / / Có nhiều tờ khai nhập khẩu ở đây lớp MainActivity công khai mở rộng hoạt động {@Hãy bảo vệ void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (bố cục R. activity_main); mTranslationTextView = (TextView) findViewById (R id id. translation_text_view); mRotationTextView = (TextView) findViewById (R.số luân phiên_tập tin xem); / / Khởi tạo Tango khách hàng mTango = mới Tango (này); / / Thiết lập cấu hình Tango cho phép theo dõi chuyển động mConfig = mTango. getConfig (TangoConfig. CONFIG_TYPE_CURRENT); mConfig. putBoolean (TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true);} @Chuyển quyền được bảo vệ void onActivityResult (int requestCode, int resultCode, Intent data) {try {setTangoListeners ();} catch (TangoErrorException e) {} thử {mTango. kết nối (mConfig);} catch (TangoOutOfDateException e) {} catch (TangoErrorException e) {}} private void setTangoListeners () {// Chọn phối hợp các cặp khung ArrayList framePairs = new ArrayList (); khung. thêm (mới TangoCoordinateFramePair (TangoPoseData. COORDINATE_FRAME_START_OF_SERVICE, TangoPoseData. COORDINATE_FRAME_DEVICE)); // Thêm một người nghe Tango pose data mTango. connectListener (framePairs, new OnTangoUpdateListener () { @Override public void onPoseAvailable (TangoPoseData pose) { // Định dạng dịch và quay dữ liệu cuối cùng String translationMsg = Chuỗi định dạng (sTranslationFormat, pose. [0], [1], đặt ra [2].vòng quay cuối cùng [1], đặt ra [2] // Hiển thị dữ liệu trong TextViews runOnUiThread (new Runnable () { @Override public void run () { mTranslationTextView setText (translationMsg); mRotationTextView. }); } });}} Những gì bạn nhìn thấy ở đây không phải là toàn bộ MainActivity 210 dòng lớp học, nhưng một số điểm nổi bật quan trọng của lớp đã được tóm tắt.
Hãy nhìn vào lớp MainActivity. Tâm của mã hoạt động nằm trong lớp OnTangoUpdateListener vô danh với phương thức onPoseAvailable của nó.
Trong cuộc sống hàng ngày, đặt ra là cách bạn định hướng đầu của bạn so với môi trường xung quanh. Và trong thuật ngữ Project Tango, một đặt ra là cách bạn định hướng thiết bị liên quan đến môi trường xung quanh. Một hình dáng được mô tả bằng bảy số, như số dịch và số quay mà bạn thấy trong hình trước. Khi phần cứng của thiết bị cảm thấy một tư thế mới, phần mềm gọi phương thức onPoseAvailable. Phương thức onPoseAvailable phải hiển thị các thông báo như Translation: -2.6622, 3 214773, 2. 824979 trong các trường văn bản của hoạt động.
Nhưng có vấn đề. Các quy tắc luồng của Android cho thấy không có chủ đề nào ngoài chủ đề chính có thể cập nhật giao diện người dùng của ứng dụng. Trong lớp MainActivity, cá thể OnTangoUpdateListener chạy trong một chủ đề của riêng nó. Vì vậy, phương thức onPoseAvailable của cá thể không thể hiển thị các thông báo trong các trường văn bản của hoạt động bằng cách gọi trực tiếp mTranslationTextView. setText và mRotationTextView. setText phương pháp.
Nhưng như Giáo sư Farnsworth trong
Futurama luôn luôn nói, có "Tin vui, mọi người! "Android có một phương pháp runOnUiThread chỉ trong những dịp như vậy. Tham số của phương thức runOnUiThread là một lớp thực hiện giao diện Runnable của Java. Trong mã của ứng dụng QuickStart, phương thức chạy của lớp này hiển thị văn bản thay mặt cho trường hợp OnTangoUpdateListener. Cuối cùng, người dùng của thiết bị nhìn thấy dữ liệu Translation and Rotation, và tất cả là tốt.
