没有 Activity 的Android Context?和其他无 Activity 编程?

标签 android android-activity gps location android-context

我会努力把它变成一个综合性的问题:

我正在编写一个方法来获取包含 Android 设备城市名称的字符串,该名称由 LocationManagergetLastKnownLocation() 以及所有这些确定。

然后我意识到我需要在另一个 Activity 中再次做同样的事情,所以为什么不创建一个完全独立的类 (LocationFinder) 可以在我的程序中使用,而不是编写到处都是重复代码?

但我遇到了让我困惑的问题。例如,如果我创建这个类 (LocationFinder),它是否应该扩展 Activity,即使它从未真正可视化?这个类所要做的就是拥有各种 getter,例如 getLastKnownCity()getCurrentCity() 并返回字符串。我认为它不必扩展 Activity 类,因为它实际上不是一个 Activity 。

然后我用什么上下文:

Geocoder geocoder = new Geocoder(Context context, Locale locale)

?

这让我认为它必须是一项 Activity 。于是我扩展了Activity,并将构造函数替换为

@Override
protected void onCreate(..............

但由于某种原因,它永远不会被调用,即使我放了

String city = new LocationFinder().getLastKnownCity();

我的 LocationFinderonCreate() 的第一行是

System.out.println("HEY!")

它甚至从来没有达到过。我在 android.internal.os.LoggingPrintStream.println() 和其他东西处得到一个空指针。

另外,还有很多来自 Activity 类的系统常量。例如,我需要访问 LOCATION_SERVICE,这是一个字符串,如果不扩展 Activity,我将无法获得它。当然,我可以作弊并只输入文字字符串,但这感觉不对。

最佳答案

编辑:如果可能,请使用 frogmanx 的答案。这应该只在他的答案不可能使用时使用。 (即,需要立即获得上下文的单例。)

听起来你应该扩展 Application而不是 Activity 。

使您的应用程序如下所示:

public class MyApplication extends Application {
    private static MyApplication instance;

    public MyApplication() {
        instance = this;
    }

    public static MyApplication getInstance() {
         return instance;
    }

然后将此属性添加到 list 的应用程序标签中:

 <application android:name=".your.package.MyApplication" ... />

毕竟,您可以通过从任何地方调用 MyApplication.getInstance() 来获取上下文。

关于没有 Activity 的Android Context?和其他无 Activity 编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441295/

相关文章:

android - 一些 GSM 设备在 Android 上因 CDMA SignalStrength 错误而崩溃

android - 使用 ContentProvider 插入到多个表

android - ContextWrapper 中的 NullPointer 异常

android - 在 phonegap 应用程序中将加速度计轴重新定向到汽车轴

java - 获取/发送短信时如何获取GPS坐标?

Android DDMS GPS位置已插入,但系统中的任何地方都没有反应

java - 解析错误 - Android java

android - 嵌套的 Recyclerview 自行滚动

android - 如果应用程序已经在运行,它会启动吗?

android - editTexts 在旋转设备时更改其值