没有活动的getContext

| 启动任何活动之前是否可以获得设备的长宽比? 我正在尝试根据设备是否被标识为''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;
    }
    
已邀请:
        在执行任何活动之前,将创建您应用的“应用”上下文。应用程序具有有效的上下文,因此您可以使用它来获取所需的任何内容,设置静态变量或成员变量,然后在第一个活动中对其进行引用。 通过添加扩展应用程序的新类并在AndroidManifest.xml中进行小的更改,可以处理应用程序上下文 表现:
<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();
    
        这在哪里执行?我看不到如何执行代码,并且没有实例化从Context继承的内容。服务从上下文继承,并为BroadcastReceiver的onReceive提供上下文。 另外,除了传递Context之外,您还可以从调用此方法的任何地方传递Configuration对象。     
        当您从活动中调用此方法时。您可以将\“ this \”用作getDefaultWidth()方法的参数。然后,您可以将其用作上下文。
public int getDefaultWidth(Context context) { ... }
在activitym中称它为
int width = getDefaultWidth(this)
    

要回复问题请先登录注册