我正在构建一个使用gps定位用户的android应用程序。我有一个名为LocationService的类,它扩展了Service并实现了LocationListener。在我的活动中,我有以下代码。当我想打开服务并侦听位置时,我调用了startLocationService()方法。这一切都很好。
然后我将此活动放在tabhost的选项卡中。现在当我调用startLocationService()时,没有任何反应,甚至没有调用LocationService中的onCreate()方法。我检查了行中的“this”引用 Intent i = new Intent(this,LocationService.class); 它指的是正确的活动,而不是TabActivity。
我无法解释为什么没有启动LocationService。我很感激任何人都可以解决这个问题。
感谢, 保罗
private LocationService service = null;
private ServiceConnection svcConn = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
service = (LocationService)binder;
try {
service.registerCallback(cbListener);
service.enableProximityPoints();
} catch (Throwable t) {
Log.e("MyPath", "Exception in call to registerAccount()", t);
}
}
public void onServiceDisconnected(ComponentName className) {
service = null;
}
};
private void startLocationService(){
Intent i = new Intent(this, LocationService.class);
bindService(i, svcConn, 0);
startService(i);
}
答案 0 :(得分:1)
看起来其他人遇到了类似的问题:http://www.mail-archive.com/android-beginners@googlegroups.com/msg08047.html
他们通过将服务连接移动到TabActivity类来解决他们的问题。
答案 1 :(得分:0)
我检查了“this”中的参考 line Intent i = new Intent(this, LocationService.class);它指的是 正确的活动,而不是 TabActivity。
这可能是问题所在 - 我发现活动的标签内容与我有时的预期略有不同。
在作为“标签内容”活动的活动中,尝试定义类实例成员...
private Context parent = null;
然后在onCreate()
...
parent = this.getParent(); // Gets the TabActivity context
然后在startLocationService()
中使用...
Intent i = new Intent(parent, LocationService.class);
不确定它是否有用但值得一试。我目前正在开发一个基于TabActivity的应用程序,我不得不在“标签内容”活动中的各个地方做这样的事情,以使事情正常工作。