gpt4 book ai didi

java - 在Android中扩展抽象类: A LocationProvider

转载 作者:行者123 更新时间:2023-12-01 17:29:36 25 4
gpt4 key购买 nike

这可能是一个简单/愚蠢的问题。我找不到任何有关它的文档。我想在 Android 中创建自己的 LocationProviderLocationProvider是一个抽象类,没有构造函数。

import android.location.LocationProvider;

public class provider extends LocationProvider {
public provider() {
}

@Override
public int getAccuracy() {
// TODO Auto-generated method stub
return 0;
}

...

@Override
public boolean supportsSpeed() {
// TODO Auto-generated method stub
return false;
}
}

Eclipse 在这里给我错误:“隐式 super 构造函数 LocationProvider() 不可见。必须显式调用另一个构造函数

但是空的 super 构造函数当然是不可见的 - LocationProvider 没有构造函数。我应该如何创建没有构造函数的抽象类的子类?

例如,这会引发相同的错误:

public abstract class topabstractclass {
private topabstractclass() {
}
}

class mysubclass extends topabstractclass{
mysubclass() {
}
}

我无法修改 Android 的 LocationProvider,因此无法创建公共(public)构造函数。这只是一个本质上不可子类化的类吗? android 是否不希望我们创建 LocationProviders?其他 LocationProvider 是如何完成的?谁能举个例子吗?

最佳答案

你的假设是正确的。 不可能扩展所有构造函数都是私有(private)的抽象类。这正确地意味着 Google 不希望您扩展 LocationProvider

首先,请注意其他项目可能 clone LocationProvider 。然后他们创建subclasses of it ,并可以根据需要使用它们。

现在,我猜您想知道为什么 LocationProvider 以这种方式受到限制。文档对此进行了解释:

Each provider has a set of criteria under which it may be used; for example, some providers require GPS hardware and visibility to a number of satellites; others require the use of the cellular radio, or access to a specific carrier's network, or to the internet. They may also have different battery consumption characteristics or monetary costs to the user. The Criteria class allows providers to be selected based on user-specified criteria.

这里我们必须稍微解读一下字里行间的意思。考虑一下有多少信息直接来自运营商并且是特定于手机的。这意味着在您的应用程序中对其进行篡改可能会导致设备无法运行,因为其提供商不再遵循其深奥的规则。这就是为什么 Android sets up all the providers for us(此链接非常方便保存。它将向您展示如何在没有自己的提供商的情况下访问该位置信息。)

所以,不,您不能隐式*扩展LocationProvider。您必须使用已经存在的产品,因为它们是专门为在运营商、硬件和软件之间工作而设计的。

*如 @Funtik 的答案所示,您可以使用 String, ILocationManager 签名扩展 LocationProvider。然而,它没有文档记录,标有 {@hide},并且在以前的版本中不受支持,因此您可能需要做一些努力才能获得正确的构造方法。

关于java - 在Android中扩展抽象类: A LocationProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com