Я только начинаю с программирования на Android, и я внедрил очень простой удаленный сервис. Я могу привязываться к моей службе из других процессов и отправлять простые сообщения «ping» и «pong» взад и вперед. (Я не использую AIDL, заглушки и т. Д. Я просто прохожу Messages
и используя поле what
.)getCallingPid(), возвращающий мой PID в onBind()
Теперь я изучаю разрешения, и у меня возникла проблема. В моем методе onBind()
checkCallingPermission()
всегда возвращает PERMISSION_DENIED
, даже если вызывающий процесс имеет соответствующее разрешение (подтверждено вызовом checkCallingOrSelfPermission()
в этом процессе). Я подозреваю, что это происходит потому, что Binder.getCallingUid()
возвращает PID серверного процесса, а не вызывающего.
Любая идея, что я могу делать неправильно? checkCallingPermission()
должен работать таким образом в методе onBind()
службы, не так ли?
Спасибо!
Это не будет работать. Система кэширует связующие. Попробуйте несколько раз связываться с разными процессами. 'onBind()' вызывается только один раз. Если вы хотите проверить разрешения, вам необходимо выполнить проверку разрешений в определении метода AIDL связующего. –