Как получить объект Display из моего класса обслуживания? - PullRequest
2 голосов
/ 21 июля 2011

Поскольку во многих моих действиях необходимо проверить размер экрана с помощью следующего кода:

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 Ответ

2 голосов
/ 21 июля 2011

Использование ширины и высоты экрана в пикселях обычно не очень хороший дизайн, но вы можете достичь желаемого, просто передав текущую активность статическому методу, расположенному в каком-либо другом классе, доступном для всех действий, которые должны выполнять код.

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

еще одно замечание: путать его с сервисом, когда он не является андроидом Сервис (это не должен быть сервис андроид)

...