跨包访问Android GpsService遇LocalBinder方法权限问题求助
解决跨包访问Service LocalBinder方法的权限问题
这问题我之前开发Android服务时也碰到过,本质就是方法的访问权限设置不对导致的!
你看你packageShared里的LocalBinder类中的getService()方法,没有加任何访问修饰符——在Java里,这种默认的权限是「包私有(package-private)」,意思是只有同一个包(也就是packageShared)里的类才能调用这个方法,跨包的packageClient自然就会被拒绝访问,这就是你看到错误的原因。而同一个包内的类能正常运行,也正好验证了这一点。
修复方案很简单:给getService()加上public修饰符
修改packageShared里的LocalBinder代码:
public class LocalBinder extends Binder { // 添加public修饰符,允许跨包访问 public GpsService getService() { return GpsService.this; } }
修改之后,packageClient里的binder.getService()调用就能正常通过编译了,因为现在这个方法对外公开了,其他包的类可以合法访问它。
内容的提问来源于stack exchange,提问作者Carlos
相关产品推荐
相关产品推荐

