如何从我的服务类中获取Display对象?

时间:2011-07-21 08:27:16

标签: android android-layout android-emulator android-widget android-manifest

因为我的许多活动都需要使用以下代码检查屏幕尺寸:

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()。我想知道如何摆脱这个问题,在我的服务类中使用Display实例来扩展Activity类是不必要的?

我希望我的活动可以访问屏幕宽度,如下所示:

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();
    }

}

1 个答案:

答案 0 :(得分:2)

使用屏幕的宽度和高度(以像素为单位)通常不是很好的设计,但是您可以通过简单地将当前活动传递给位于其他类中的静态方法来实现您想要的,这些类可以被应该执行的所有活动访问代码。

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

另一个注意事项是,当它不是一个android Service(它不应该是一个Android服务)时,调用它是很困惑的。