我在使用前台服务的Android播放位置的Google示例应用中遇到了一个已知问题。
在https://github.com/googlesamples/android-play-location/issues/91中,解释了
在授予权限之前,不应绑定服务。
与bindService
底部的onStart()
行(151)相关:
bindService(new Intent(this, LocationUpdatesService.class), mServiceConnection,
Context.BIND_AUTO_CREATE);
如何在运行bindService
之前确保已授予权限?
我试过把它放在这样的条件中:
if (checkPermissions()) {
// Bind to the service. If the service is in foreground mode, this signals to the service
// that since this activity is in the foreground, the service can exit foreground mode.
bindService(new Intent(this, LocationUpdatesService.class), mServiceConnection,
Context.BIND_AUTO_CREATE);
}
但现在我收到了这个错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void blah.blah.LocationUpdatesService.requestLocationUpdates()' on a null object reference
我假设是因为mService.requestLocationUpdates();
函数onClick
正在运行而没有绑定服务。
感谢任何帮助!
PS:我是Android中的总菜鸟。
答案 0 :(得分:0)
通过移除getLastLocation
文件中的LocationsUpdateService.java
调用,它可以正常运行。显然我必须更好地阅读:
在LocationUpdateService.java中,在onCreate()中,删除 getLastLocation()调用。没有它,应用程序运行正常。
问题是用户还没有机会授予 位置运行时权限,并在它们执行服务之前绑定 和onCreate()运行,这需要该权限。
https://github.com/googlesamples/android-play-location/issues/91#issuecomment-321841452