2011-12-14 60 views
16

Tôi đã tạo Chế độ xem không có Hoạt động bằng cách sử dụng WindowManager.có ai biết làm thế nào để getWindow() phục vụ trên Android?

nhưng tôi phải thay đổi trạng thái của quan điểm như dưới đây

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN); 

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

nhưng GetWindow() không thể sử dụng trong dịch vụ.

có cách nào không?

+0

Dịch vụ không có giao diện người dùng. Bạn đang cố gắng để thực hiện? –

+0

Tôi biết dịch vụ không thể có giao diện người dùng. Nhưng tôi đã thực hiện nó bằng cách sử dụng addView() && surfaceView. –

+1

Điều đó không thực sự tạo ra một giao diện người dùng; nó chỉ tạo ra một vài đối tượng View. Tôi sẽ lặp lại câu hỏi của tôi: bạn đang thực sự cố gắng làm gì? –

Trả lời

1

Theo Dịch vụ không có giao diện người dùng, bạn phải bắt đầu hoạt động từ nó để GetWindow() thuộc tính ..

Hoặc làm một hoạt động trong suốt hoặc chỉ bắt đầu hoạt động, GetWindow() và ngay lập tức hoàn thành nó. Tôi nghĩ bạn phải tạo ra một hoạt động minh bạch. (Đây là ý kiến ​​cá nhân của tôi)

+0

Cảm ơn bạn đã trả lời. Nhưng tôi không thể bắt đầu Hoạt động. Tôi chỉ cần thay đổi chế độ Full <-> không đầy đủ trong dịch vụ. –

+0

Nếu bạn muốn lấy thuộc tính Window thì tôi nghĩ dù sao thì bạn cũng phải sử dụng Activity .. – user370305

0

Những gì bạn đang cố gắng thực hiện, tôi thu thập, có tín hiệu dịch vụ rằng một sự thay đổi sẽ được thực hiện khi có hoạt động. Cách để làm điều này là để dịch vụ phát sóng ý định sử dụng Context.sendBroadcast(Intent) và để hoạt động của bạn phản hồi theo phương pháp onReceive. Câu trả lời được chấp nhận trong this thread có thêm chi tiết về cách thiết lập điều này.

6

Bạn không thể nhận một cửa sổ trong Dịch vụ. Nhưng bạn có thể sử dụng WindowManager để thêm chế độ xem (gốc) như bạn đã làm.

Và bạn cũng có thể cập nhật chế độ xem qua updateViewLayout, bạn có thể thay đổi trạng thái cửa sổ (loại cửa sổ, cờ, x, y, w, h, trọng lực, v.v ...) như mã bên dưới.

private WindowManager mWindowManager; 
private WindowManager.LayoutParams mLayoutParams; 
.......... 

//let's assume that an event occurred 
if(mConfiguration.orientation==Configuration.ORIENTATION_LANDSCAPE){ 
    mLayoutParams.screenOrientation=Configuration.ORIENTATION_PORTRAIT; 
} 
mLayoutParams.softInputMode=WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN; 

mLayoutParams.gravity = Gravity.TOP|Gravity.CENTER; 
int flag=0 
      |WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN 
      |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM 
      ; 
mLayoutParams.flags=flag; 

mWindowManager.updateViewLayout(mRootView, mLayoutParams); 
+0

làm thế nào để có được mRootView? –

+1

@quicklearner mRootView là trường hợp xem của riêng bạn mà bạn đã thêm trước đó qua mWindowManager.addView() – alfongj

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