bra*_*all 17 java android android-service android-binder
我有一个远程服务,外部应用程序可以绑定到该服务.在某些情况下,我可能希望拒绝绑定.根据文件,
将通信通道返回给服务.如果客户端无法绑定到服务,则可能返回null.
@Override
public IBinder onBind(final Intent intent) {
    return null;
}
返回null确实不会返回IBinder对象,因此会阻止连接,但是调用应用程序无法正确接收此"信息".
boolean bound = context.bindService(intent, serviceConnection, flagsHere);
无论是否从服务返回null,这总是返回true?
根据文件,
返回 - 如果已成功绑定到服务,则返回true; 如果未建立连接,则返回false,因此您将不会收到服务对象
我曾假设从onBind返回null 会导致bindService返回false.假设永远不是一个好主意......
但是,返回null确实会阻止ServiceConnection被实例化调用,但是这样做的结果就是没有选项来检查绑定在onServiceConnected中是否实际为null .
所以,我的问题 - 如果绑定请求被拒绝,应用程序如何"知道"?
另外,如果我在飞行中决定对onRebind(先前从onUnbind返回true )的请求应该被拒绝,我似乎无法覆盖行为以防止这种情况:
@Override
public void onRebind(final Intent intent) {
    if (shouldAllowRebind(intent)) {
        super.onRebind(intent);
    } else {
        // ?
    }
}
我希望有人可以为我解释一下.提前致谢.
您可能需要创建一个变通方法.我在这里看到两个选项:
Binder如果请求被拒绝,则返回没有任何功能的a .然后客户端必须检查是否存在所需的功能.Binder,但如果不允许调用,则让每个方法抛出Exception(例如SecurityException).(这也是@CommonsWare在评论中提出的)我个人更喜欢第二种方法,因为它更灵活.(例如,允许每次呼叫许可/拒绝,解决重新绑定后拒绝内容的问题等)
| 归档时间: | 
 | 
| 查看次数: | 1101 次 | 
| 最近记录: |