我想选择在Android中启用的LocationProvider.项目构建目标是Android 2.1.
这就是我在onCreate()中所做的.
// ...
LocationManager locationMgr = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.NO_REQUIREMENT);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
criteria.setCostAllowed(false);
String bestProvider = locationMgr.getBestProvider(criteria, true);
Toast.makeText(getApplicationContext(), "Provider = " + bestProvider + " enabled= " + locationMgr.isProviderEnabled(bestProvider), Toast.LENGTH_LONG).show();
// ...
Run Code Online (Sandbox Code Playgroud)
现在,我关闭每个网络接口并在我的设备上设置飞行模式(HTC Desire,Android 2.2).我断开设备与USB的连接.显然没有提供者活着,他们实际上可以向设备提供位置数据.我特别要求getBestProvider用于启用的提供程序,所以我希望它在这种情况下返回null或空字符串.我希望isProviderEnabled返回false.
实际结果是getBestProvider返回"network"并且isProviderEnabled报告它"启用"."网络"总是"启用"即使不是吗?
在许多Android方法中,尤其是构造函数和重写方法,您应该甚至必须使用super()调用父类方法.当您使用Eclipse Source> Override/Implement Methods ...时,您可以从包含TODO标签的模板中获取代码,如下所示:
public MyCanvas(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
}
Run Code Online (Sandbox Code Playgroud)
我不太了解超类在每种情况下的作用,所以我总是在// TODO标签的确切位置插入我的代码.在这个例子中,我会在构造函数中的代码之前和onDraw()中的代码之后调用super().
我是否可以始终在生成的代码中依赖这些代码插入位置?调用super()时是否有简单的规则/解释?