如何在安卓系统中获取当前运行环境?

10

我正在尝试获取Android中当前正在运行的上下文,我尝试使用:

<application android:name="com.xyz.MyApplication">

</application>

public class MyApplication extends Application
{
    private static Context context;

    public void onCreate()
    {
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() 
    {
        return MyApplication.context;
    }
}

当我尝试使用MyApplication.getAppContext()时,它会出现以下错误:

AndroidRuntime(14421): android.view.WindowManager$BadTokenException: 无法添加窗口--令牌为空不是应用程序的


如果您尚未创建应用程序,则静态引用将返回null。您只需在对象创建时设置上下文即可。 - cjk
“they don't work correctly”是什么意思?是指出现了错误信息吗?还是出现了一些意外的行为,您能否详细解释一下?那么就会有人可以(并且会)帮助您 :) - basti
2个回答

19

这个对我有效:

public class MyApplication extends Application {

private static Context mContext;

@Override
public void onCreate() {
    super.onCreate();
    mContext = getApplicationContext();
}
public static Context getContext() {
    return mContext;
}
}
你只需要在你的应用程序的任何部分调用MyApplication.getContext()即可。
我假设应用程序XML标签已经在manifest.xml文件中。
<application
    android:name=".MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >

您不需要创建任何 Application 类的实例,它会在您启动应用程序之前被创建。


谢谢您的回复,但仍然无法正常工作,他们给了我这个错误AndroidRuntime(14421):android.view.WindowManager$BadTokenException:无法添加窗口--令牌为空不是应用程序。 - nkarmi
你能发布你的manifest.xml文件并检查一下包名和应用程序类名吗? - Goofyahead
你用静态上下文造成了内存泄漏?!! - Mohamed Ben Romdhane
不要将Android上下文类放在静态字段中,这会导致内存泄漏。 - O-9

1

如果您想获取Application类的实例,可以使用以下方法:

MyApplication Obj = ((MyApplication )getApplicationContext());

如果上下文已经存在,那么getApplicationContext()本身就足够了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接