getContext без активности - PullRequest
4 голосов
/ 22 июня 2011

Можно ли получить соотношение сторон устройства перед запуском какого-либо действия?

Я пытаюсь настроить ширину в зависимости от того, определено ли мое устройство как «long» или «not_long».Это должно быть доступно задолго до запуска действия, но я не уверен, где я могу получить эту переменную.Активность НЕ доступна во время выполнения этого метода.Также, чтобы избежать утечек памяти, я не хочу передавать действия в класс, который содержит следующий метод:

Вот метод вызова с ошибками:

public int getDefaultWidth() { 
        Configuration myConfig = new Configuration();
        myConfig.setToDefaults();
        myConfig = getResources().getConfiguration();

        switch (myConfig.screenLayout & Configuration.SCREENLAYOUT_LONG_MASK) {

            case Configuration.SCREENLAYOUT_LONG_NO: {
                return this._defaultWidth;
            }
            case Configuration.SCREENLAYOUT_LONG_YES: {
                return this._defaultWidthLong;
            }
            case Configuration.SCREENLAYOUT_LONG_UNDEFINED: {
                return this._defaultWidth;
            }
        }
        return this._defaultWidth;
    }

Ответы [ 3 ]

0 голосов
/ 22 июня 2011

Когда вы вызываете этот метод из действия.вы можете передать this в качестве параметра для метода getDefaultWidth ().Затем вы можете использовать его в качестве контекста.

public int getDefaultWidth(Context context) { ... }

и в Activitym назвать его как

int width = getDefaultWidth(this)
0 голосов
/ 22 июня 2011

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

Контекст приложения можно обработать, добавив новый класс, расширяющий Application, и внеся небольшое изменение в AndroidManifest.xml

Manifest:

<application android:enabled="true"...
   android:name=".Foo">
...
</application>

Добавьте новый класс в ваш проект, который расширяет Application:

public class Foo extends Application {

private int mWidth;

@Override
public void onCreate() {
    super.onCreate();
    // do stuff to set mWidth using the Application context like:
    // mWidth = getResources().getConfiguration().blahblahblah
}   

public int getWidth() {
    return mWidth;
}

Из вашей деятельности просто сделайте это, чтобы получить ширину:

int width = ((Foo)getApplication()).getWidth();
0 голосов
/ 22 июня 2011

Где это выполняется?Я не понимаю, как вы могли бы выполнять код и не создавать что-то, что наследуется от Context.Служба наследуется от Context, а onReceive BroadcastReceiver предоставляется Context.

Кроме того, вместо передачи Context вы можете просто передать объект Configuration из любого места, где вызывается этот метод.

...