如何在授予权限后绑定服务?

时间:2018-02-25 19:13:05

标签: android geolocation google-play-services android-location

背景

我在使用前台服务的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中的总菜鸟。

1 个答案:

答案 0 :(得分:0)

通过移除getLastLocation文件中的LocationsUpdateService.java调用,它可以正常运行。显然我必须更好地阅读:

  

在LocationUpdateService.java中,在onCreate()中,删除   getLastLocation()调用。没有它,应用程序运行正常。

     

问题是用户还没有机会授予   位置运行时权限,并在它们执行服务之前绑定   和onCreate()运行,这需要该权限。

https://github.com/googlesamples/android-play-location/issues/91#issuecomment-321841452