2013-02-19 34 views
7

Bạn sẽ nghĩ rằng sẽ có một giải pháp chuyển tiếp thẳng. Tài liệu Android có trạng thái:Nhận hướng của thiết bị Android

Cảm biến định hướng không được chấp nhận trong Android 2.2 (API cấp 8). Thay vì sử dụng dữ liệu thô từ cảm biến định hướng, chúng tôi đề xuất mà bạn sử dụng phương thức getRotationMatrix() kết hợp với phương thức getOrientation() để tính giá trị định hướng.

Tuy nhiên, chúng không cung cấp giải pháp về cách triển khai getOrientation()getRotationMatrix(). Tôi đã dành vài giờ đọc qua các bài đăng ở đây về các nhà phát triển bằng cách sử dụng các phương pháp này nhưng tất cả chúng đều có một phần dán mã hoặc một số triển khai lạ. Googling đã không cung cấp một hướng dẫn. Ai đó có thể xin vui lòng dán một giải pháp đơn giản bằng cách sử dụng hai phương pháp để tạo ra định hướng ??

+0

để bạn muốn thiết bị c định hướng urrent? –

+0

Có nhưng nó phải độc lập với màn hình thực tế. Một dịch vụ sẽ có thể xác định hướng. – AndroidDev

+0

Bạn muốn xác định xem thiết bị có ở chế độ dọc hoặc ngang từ một dịch vụ không? –

Trả lời

6

đây là việc thực hiện cho getOrientation():

public int getscrOrientation() 
    { 
     Display getOrient = getWindowManager().getDefaultDisplay(); 

     int orientation = getOrient.getOrientation(); 

     // Sometimes you may get undefined orientation Value is 0 
     // simple logic solves the problem compare the screen 
     // X,Y Co-ordinates and determine the Orientation in such cases 
     if(orientation==Configuration.ORIENTATION_UNDEFINED){ 

      Configuration config = getResources().getConfiguration(); 
      orientation = config.orientation; 

      if(orientation==Configuration.ORIENTATION_UNDEFINED){ 
       //if height and widht of screen are equal then 
       // it is square orientation 
       if(getOrient.getWidth()==getOrient.getHeight()){ 
        orientation = Configuration.ORIENTATION_SQUARE; 
       }else{ //if widht is less than height than it is portrait 
        if(getOrient.getWidth() < getOrient.getHeight()){ 
         orientation = Configuration.ORIENTATION_PORTRAIT; 
        }else{ // if it is not any of the above it will defineitly be landscape 
         orientation = Configuration.ORIENTATION_LANDSCAPE; 
        } 
       } 
      } 
     } 
     return orientation; // return value 1 is portrait and 2 is Landscape Mode 
    } 

Và u cũng có thể tham khảo ví dụ này đại diện cho việc sử dụng cả hai phương pháp:

 getOrientation and getRotationMatrix 

http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html

+0

Đó là định hướng màn hình mà tôi đã sử dụng trong mã. Tôi không tin rằng đó là điều tương tự như việc định hướng thiết bị dựa trên cảm biến. Trong thực tế, tôi thậm chí đã thử điều đó trong quá khứ và nó sẽ không hoạt động bên trong một dịch vụ không có màn hình. Các dịch vụ thường không truy cập màn hình và có thể xác định hướng thiết bị từ các cảm biến. GetOrientation và getRotationMatrix là bắt buộc. – AndroidDev

+0

Tôi đã thử nó nhưng nó không cho kết quả như mong đợi. Tôi vừa tải xuống một ứng dụng từ cửa hàng ứng dụng hiển thị tất cả các cảm biến trên thiết bị của bạn và cách chúng hoạt động. Một được gọi là cảm biến định hướng và khi bạn sử dụng nó, ứng dụng sẽ hiển thị cách cảm biến hoạt động chính xác. Giá trị không được thay đổi (hoặc thay đổi rất ít) khi bạn không di chuyển thiết bị. Mã trong liên kết ở trên không cung cấp bất kỳ kết quả đáng tin cậy nào nhưng các giá trị nhảy khắp nơi. – AndroidDev

+0

Tôi bắt đầu nghĩ rằng có thể đặt điểm ngắt và chạy trong chế độ gỡ lỗi có thể ảnh hưởng đến cách cảm biến được đọc. Tôi sẽ thử và chạy nó mà không cần gỡ lỗi và hiển thị các giá trị khi chúng được cập nhật và xem điều gì xảy ra. – AndroidDev

4
public int getScreenOrientation() { 


// Query what the orientation currently really is. 
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)    { 
    return 1; // Portrait Mode 

}else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
    return 2; // Landscape mode 
} 
return 0; 
} 
2
protected void onResume() { 
    // change the screen orientation 
    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
     setContentView(R.layout.portrait); 
    } else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     setContentView(R.layout.landscape); 
    } else { 
     setContentView(R.layout.oops); 
    } 
} 
Các vấn đề liên quan