2011-12-14 13 views
16

WindowManager'ı kullanarak Etkinliksiz bir Görünüm yaptım.android hizmetinde getWindow() nasıl yapıldığını bilen var mı?

ama hizmetinde kullanamazsınız

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

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

ama GetWindow()

aşağıda gibi görünüm durumunu değiştirmek zorunda.

bir yolu var mı? UI yok Hizmet gereği

+0

hizmetler UI yok. Neyi başarmaya çalışıyorsun? –

+0

Servisin bir kullanıcı arabirimi bulunamadığını biliyorum. Ama addView() && surfaceView kullanarak yaptım. –

+1

Bu aslında bir kullanıcı arayüzü oluşturmuyor; Sadece birkaç View nesnesi oluşturur. Sorumu tekrar edeceğim: aslında neyi başarmaya çalışıyorsunuz? –

cevap

1

, Sen .. GetWindow() özellik için ondan

etkinlik başlatma Ya Şeffaf aktiviteyi yapmak ya da sadece bitirmek hemen aktiviteyi, GetWindow() başlayıp gerekir. Bence şeffaf bir etkinlik yapmanız gerekiyor.

yapmanız çalıştığımız şey
+0

Cevabınız için teşekkür ederiz. Ancak Etkinliği başlatamıyorum. Sadece Tam <-> modunu tam olarak değiştirmem gerekiyor. –

+0

Eğer Window özniteliğini almak istiyorsanız, o zaman bir şekilde Aktivite kullanmanız gerektiğini düşünüyorum. – user370305

0

, ben toplamak, bir değişiklik, bir faaliyetin görünüş olarak yapılması gerektiğini hizmet sinyaline sahip olan (Bu benim kişisel görüşüm). Bunu yapmanın yolu Context.sendBroadcast(Intent) kullanarak bir niyeti yayınlama servisi için ve onReceive yöntemidir yanıt vermek için etkinlik içindir. this thread'da kabul edilen yanıt, bunun nasıl ayarlanacağı hakkında daha fazla ayrıntı içerir.

6

Sen bir Hizmete açılan pencereden değil edebilirsiniz. Ama Zaten yaptığımız gibi bir görünüm (kök) eklemek için WindowManager kullanabilirsiniz.

Ayrıca görünümü updateViewLayout üzerinden güncelleyebilir, aşağıdaki kodlar gibi pencerenizin durumunu (pencere tipi, bayrak, x, y, w, h, yer çekimi, vb.) Değiştirebilirsiniz.

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

mRootView nasıl alınır? –

+1

@quicklearner mRootView, daha önce mWindowManager.addView() aracılığıyla eklediğiniz kendi görünüm örneğidir. – alfongj

İlgili konular