gpt4 book ai didi

java - 远程服务拒绝权限 onBind

转载 作者:IT老高 更新时间:2023-10-28 23:24:51 26 4
gpt4 key购买 nike

我有一个远程服务,外部应用程序可以绑定(bind)到该服务。在某些情况下,我可能希望拒绝绑定(bind)。 According to the documentation ,

Return the communication channel to the service. May return null if clients can not bind to the service.

@Override
public IBinder onBind(final Intent intent) {
return null;
}

返回 null 确实不返回 IBinder对象并因此阻止连接,但是调用应用程序没有正确接收此“信息”。

boolean bound = context.bindService(intent, serviceConnection, flagsHere);

无论是否从Service返回null,this总是返回true?

According to the documentation ,

Returns - If you have successfully bound to the service, true is returned; false is returned if the connection is not made so you will not receive the service object

我假设从 onBind 返回 null会导致 bindService 返回 false。假设从来都不是一个好主意...

返回 null 但是会阻止 ServiceConnection从被 instantiated 调用,但是这样做的结果是没有选项来检查绑定(bind)器是否实际上在 onServiceConnected 中为空.

所以,我的问题 - 应用程序如何“知道”绑定(bind)请求是否已被拒绝?

此外,如果我即时决定向 onRebind 发出请求(之前从 onUnbind 返回 true )应该被拒绝,我似乎无法覆盖该行为以防止这种情况:

@Override
public void onRebind(final Intent intent) {

if (shouldAllowRebind(intent)) {
super.onRebind(intent);
} else {
// ?
}
}

我希望有人可以为我提供一些启示。提前致谢。

最佳答案

您可能必须创建一个解决方法。我在这里看到两个选项:

  • 如果请求被拒绝,则返回一个没有任何功能的 Binder。然后,客户端必须检查所需的功能是否存在。
  • 始终返回相同的 Binder,但如果不允许调用,则让每个方法抛出 Exception(例如 SecurityException)。 (@CommonsWare 在评论中也提出了这一建议)

我个人更喜欢第二种方法,因为它更灵活。 (例如,允许 per-call 允许/拒绝,解决重新绑定(bind)后拒绝内容的问题等)

关于java - 远程服务拒绝权限 onBind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36136082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com