2

因爲我的很多活動都需要用下面的代碼來檢查屏幕尺寸:如何從我的服務類獲取Display對象?

Display display = getWindowManager().getDefaultDisplay(); 
int screenWidth = display.getWidth(); 
int screenHeight = display.getHeight(); 

我決定從每個活動類此代碼移到服務類,這樣的代碼可以在一個地方被定義並由每個活動類調用。

所以,我做我的服務類象下面這樣:

public class MyService { 

    private Display display; 
    public int screenWidth, screenHeight; 

    public MyService(){ 
     display = getWindowManager().getDefaultDisplay(); //Error here 

     screenWidth = display.getWidth(); 
     screenHeight = display.getHeight(); 

    } 

    public int getScreenWidth(){ 
      return this.screenWidth; 
    } 
} 

因爲我的服務類沒有擴展Activity,我不能直接使用getWindowManager()。我想知道如何擺脫這個問題在我的服務類中有沒有必要擴展Activity類的Display實例?

這就是我想我的活動可以訪問屏幕寬度類似以下內容:

public class MyActivity extends Activity{ 

    MyService service; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     service= new MyService(); 

     int sWidth = service.getScreenWidth(); 
    } 

} 

回答

2

以像素爲單位使用屏幕的寬度和高度通常不是很好的設計,但只需將當前活動傳遞給靜態方法,即可以執行所有應該執行的活動代碼。

public class MyService { 
    static public int getScreenWidth(Activity activity){ 
     return activity.getWindowManager().getDefaultDisplay().getWidth(); 
    } 
} 

另一個值得注意的是,這是混淆稱之爲服務時,它不是一個Android Service(它不應該是一個機器人服務)

+0

@ getekha,如果使用像素寬度和高度不是一個好的設計,我想知道什麼是更好的方法?例如,如果我想定義我的佈局組件以佔用屏幕高度的1/3。 – Mellon

+0

閱讀http://developer.android.com/guide/practices/screens_support.html和http://developer.android.com/guide/topics/ui/layout-objects.html。如果您製作遊戲或其他需要更好地控制各個像素以創建所需效果的遊戲,則使用屏幕尺寸可能是正確的方法,但通常不會 – getekha

-1

你不能。 Android中的Services不瞭解顯示特性,無法訪問顯示。唯一可以做到這一點的方法是將呼叫Activity傳遞給該服務,並以此方式呼叫getWindowManager()

+0

是的,我意識到這一點的解決方法我張貼這個問題後。 – Mellon

+13

這是不正確的,你可以通過調用訪問服務中的Display對象: ((WindowManager)getSystemService(Context.WINDOW_SERVICE))。getDefaultDisplay(); – harbinja

+0

Harbinja,你的評論幫助我很多:)。謝謝。 –

相關問題