Android Получить размеры экрана из службы

Я получил размер экрана, используя следующее из упражнения:

Display display = getWindowManager().getDefaultDisplay();

Но то же самое не работает из службы (по очевидным причинам, я знаю!), Но мне отчаянно нужно получить размер дисплея из службы. Не могли бы вы объяснить мне какой-либо другой способ получения ScreenSize ??

Так что, насколько я понимаю, мы не можем получить размер экрана из службы. Что я сделал на данный момент, это запустить действие по крайней мере 1ce по умолчанию и сохранить фактический размер экрана в пикселях в общих настройках. Я использую общие настройки, чтобы получить значение при запуске службы.

Это единственный выход ??? Неужели мы никак не можем получить размер экрана из сервиса ??


person JaVadid    schedule 09.07.2010    source источник
comment
проверьте это: stackoverflow.com/ вопросы / 3166501 /   -  person Praveen    schedule 09.07.2010
comment
привет, Правин, спасибо за ваш ответ, но, как я объяснил выше, getWindowsManager () - это функция, которая требует активности в качестве контекста! и я пытаюсь сделать то же самое в сервисе! Приведенная выше ссылка не помогает получить размер дисплея от службы. И в дополнение к этому ваш вопрос о плотности, а мне нужны пиксели ...   -  person JaVadid    schedule 10.07.2010
comment
оба находятся в моих ссылках. Я должен вам сказать, что высота и ширина - это номера пикселей. проверьте этот ответ на мой вопрос: stackoverflow.com/questions/3166501/   -  person Praveen    schedule 12.07.2010
comment
Еще раз спасибо, чувак !!! Но я полагаю, вы не прочитали мой комментарий полностью, как я уже упоминал в своем комментарии, getWindowManager (). GetDefaultDisplay (). GetMetrics (dm); функция может быть вызвана только из активности, попробуйте вызвать ее из службы, она не работает! Ему нужна активность как контекст! Надеюсь, вы поняли мою мысль!   -  person JaVadid    schedule 14.07.2010
comment
Я не пробовал, но, просто просмотрев документацию, похоже, что вы можете получить оконный менеджер через Service.getSystemService(WINDOW_SERVICE);   -  person MatrixFrog    schedule 20.07.2010
comment
извините, MatrixFrog тоже не сработало ... Думаю, так не пойдет ...   -  person JaVadid    schedule 10.08.2010


Ответы (4)


есть способ получить его из службы:

    WindowManager window = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
    Display display = window.getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
person RJ M    schedule 31.03.2011
comment
+1 за этот хороший и подробный ответ. Я искал, как позвонить Display.getRotation() из службы. Большое спасибо. - person eternay; 23.10.2012

У меня это сработало!

DisplayMetrics metrics = getApplicationContext().getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;

Вам нужно было только понять контекст.

person Mane    schedule 06.03.2012

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

person Hamy    schedule 10.08.2010
comment
Хорошо, спасибо большое, Хами, но служба больше запланирована ... Я не решаю, когда она запускается, пользователь определяет время ... Следовательно, не могу передать информацию в намерениях ... Спасибо за ваш ответ, приятель .. ... очень хотелось услышать от кого-нибудь1, кроме меня, об идеях, которые я могу реализовать! - person JaVadid; 10.08.2010
comment
во-вторых, поправьте меня, если я ошибаюсь, но я слышал, что в случае услуг дополнительные функции намерения не могут быть получены ... не знаю, правда ли, что он никогда не пробовал ... - person JaVadid; 10.08.2010

Попробуй это:

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

DisplayMetrics displayMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(displayMetrics);

int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
person prashant17    schedule 13.08.2018
comment
Из службы ... не из Activity. - person pookie; 24.01.2020