2016-03-01 29 views
7

Đây có thể được coi là lặp lại this post, nhưng điều đó không bao giờ nhận được câu trả lời thích hợp, vì vậy có thể câu hỏi cần thêm một chút ngữ cảnh để thu hút câu trả lời.Cách phát hiện xem trình khởi chạy có hỗ trợ xoay màn hình chính không

Về cơ bản, tôi đã quản lý thiết lập theo dõi Service đồng hồ xoay màn hình chính và khi điều đó xảy ra, AppWidgets của tôi sẽ được làm mới để phản hồi.

Trong khi điều này hoạt động tốt như xa như nó đi, một cái bẫy lớn với phương pháp này là nó thực sự chỉ phát hiện màn hình luân chuyển và không đặc biệt màn hình chủ quay.

Vì vậy, thông thường một thiết bị sẽ hỗ trợ xoay màn hình trong các ứng dụng thông thường (tức là xoay vòng Activity). Vấn đề là việc xoay màn hình trong những trường hợp đó sẽ kích hoạt sai số theo dõi của tôi Service.

Tiện ích của tôi sau đó nghĩ rằng họ cần tìm nạp và hiển thị nội dung mới cho chế độ xem xoay, nhưng nếu chính màn hình chính không hỗ trợ xoay màn hình chính thì công việc đó không chỉ lãng phí mà còn góp phần vào giao diện người dùng kém.

Vì vậy, có cách nào để kiểm tra xem trình khởi chạy có hỗ trợ xoay màn hình chính không? Hoặc cách khác, cách xoay vòng của màn hình chính cụ thể có thể được phát hiện và không chỉ xoay vòng màn hình (ví dụ: trong ứng dụng)?

Tôi chỉ có thể tạo tùy chọn bật tính năng xoay này hoặc không, với mặc định tắt, nhưng thực sự tôi muốn mặc định là tính năng được bật ... nếu không người dùng có màn hình chính xoay sẽ xem xét các tiện ích của tôi không phản hồi tốt khi xoay vòng mà không dành thời gian xem xét các tùy chọn để bật tính năng cho thiết bị của họ.

Trả lời

0
boolean autoRotateOn = (android.provider.Settings.System.getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 0) == 1) ; 
+0

Đó không phải là chỉ phát hiện xem xoay (nói chung) có được hỗ trợ/kích hoạt, thay vì xoay màn hình chính ** đặc biệt không? Bạn có thể có các ứng dụng xoay vòng, với màn hình chính luôn được sửa. – drmrbrewer

+0

nếu chúng tôi muốn sửa ứng dụng, chúng tôi có thể sử dụng: setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); trong phương thức Activity.onCreate hoặc đặt AndroidManifest.xml android: configChanges = ”orientation” – TanLingxiao

1

Màn hình chính (hoặc khởi chạy) rất cụ thể và không có phương tiện dứt khoát nào có thể thể hiện định hướng của từng đơn lẻ. Địa ngục, bạn có thể có một màn hình chủ đó là đường chéo!

Vì có một số lượng lớn triển khai màn hình khởi chạy, hành vi trên bất kỳ thiết bị cụ thể nào sẽ không xác định.

Tuy nhiên: Bạn có thể dễ dàng thêm hộp kiểm một số loại trong lần chạy đầu tiên yêu cầu người dùng nếu màn hình chính của họ hỗ trợ thay đổi theo hướng. Điều này sẽ rất dễ dàng để thêm vào, và sẽ không áp đặt quá nhiều rắc rối cho người dùng! :)

Edit: Nếu bạn muốn xác định hoạt động là có định hướng của nó thay đổi, bạn chỉ có thể có được một danh sách tất cả các ứng dụng đang chạy với getRunningAppProcesses và sau đó kiểm tra mỗi kết quả mục của importance cho IMPORTANCE_FOREGROUND. Bằng cách này, bạn sẽ biết liệu người dùng có thay đổi hướng trong khi ứng dụng đang chạy có nền trước hay không và có thể kiểm tra xem ứng dụng đó hay màn hình chính đã gọi là onConfigurationChanged!

1

Câu trả lời này sẽ khiến bạn buồn chán. Nhưng trên thực tế, bạn không thể biết chính xác một trình khởi chạy được hỗ trợ xoay vòng hay không hoặc phát hiện khi trình khởi chạy được xoay.

Trình khởi chạy chỉ là một ứng dụng Android bình thường.Và để đáp ứng yêu cầu của bạn, họ nên:

  1. dữ liệu công khai qua Content Provider: để biết bạn có hỗ trợ xoay hay không. Họ có thể làm gì ... và có một tài liệu nổi tiếng.
  2. gửi sự kiện khi họ xoay vòng qua BroastCastReceiver để bạn có thể nghe sự kiện đó.

Thường thì, chúng không.

+0

Tôi đang phát hiện xoay vòng qua 'onConfigurationChanged (newConfig)' của một 'Service' đang chạy, sau đó xem 'newConfig.orientation' để xem đã có sự thay đổi trong định hướng. Có cách nào để kể từ 'newConfig' những gì' Hoạt động' hoặc ứng dụng đã thay đổi hướng của nó không? – drmrbrewer

0

Bây giờ mặc dù không có cách cụ thể để chỉ phát hiện thay đổi hướng màn hình của màn hình chính, tôi sẽ tiếp cận một cách mù quáng vấn đề này bằng cách phát hiện ứng dụng nào đang ở nền trước trong sự kiện onConfigurationChanged.

How to determine if the foreground app is the launcher?

Phương pháp trong bài viết ở trên lấy tên gói ứng dụng foreground, và so sánh điều đó với những người của các ứng dụng launcher cài đặt trên thiết bị.

0

Bạn nên tìm hiểu xem hệ thống có phải là máy tính bảng hay không. Dưới đây là những phát hiện của tôi:

thiết bị thử nghiệm có thể xoay launcher của họ:

Samsung Galaxy Note 2 -- No 
Galaxy S4 -- No 
Galaxy S5 with Nova Launcher -- No 
Galaxy S6 -- No 
HTC One M7 Sense Launcher -- No 
Kyocera Hydro ICS Launcher -- No 
Galaxy Reverb, Galaxy Centura -- No 
Galaxy Note 4 TW -- No 
LG G3 -- No 
LG G2 -- No 

Tablets: 
Dell Venue 8 -- Yes, Stock Launcher 
Verizon Ellipsis -- Yes 
HP Slate -- Yes 
Galaxy Tab 3 - Yes 
Lenovo Tab - Yes 
Acer Iconia Tab -- Yes 

Để phát hiện một viên thuốc, bạn có thể sử dụng mã này:

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
int width=dm.widthPixels; 
int height=dm.heightPixels; 
int dens=dm.densityDpi; 
double wi=(double)width/(double)dens; 
double hi=(double)height/(double)dens; 
double x = Math.pow(wi,2); 
double y = Math.pow(hi,2); 
double screenInches = Math.sqrt(x+y); 

Các double screenInches có thể được sử dụng chống lại một số , nói, 7 inch, để nói chung phát hiện ra rằng phóng có thể được xoay.

Tôi không nghĩ đây là giải pháp, đây là cách tôi sẽ làm điều đó nếu tôi đang phát triển một ứng dụng.

Hy vọng điều đó sẽ hữu ích!

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