В методе службы onBind()
я хотел бы проверить, имеет ли вызывающий абонент определенное разрешение. Для этого мне нужно найти личность вызывающего.Получить идентификатор вызывающего абонента в службе onBind() в Android
Я ожидал, что следующий код вернет имя пакета вызывающего абонента, но вместо этого я получаю имя пакета службы. Что я делаю не так?
Binder.getCallingUid()
String pkg = getPackageManager().getNameForUid(uid);
Вы знаете, что 'onBind' вызывается один раз (за услугу), а не во время транзакции' Binder'? вам нужно вызвать 'Binder.getCallingUid()' во время транзакции «Binder», а не внутри 'onBind', документы говорят: '' 'Вернуть Linux uid, назначенный процессу, который отправил вам текущую транзакцию, которая обрабатывается. Этот uid можно использовать с системными службами более высокого уровня, чтобы определить его личность и проверить разрешения. ** Если текущий поток в настоящий момент не выполняет входящую транзакцию, возвращается его собственный uid. ** '' ' – pskink
"вам известно, что onBind вызывается один раз (за услугу), а не во время транзакции Binder?" - Я думал, что он был вызван один раз на одного клиента. Моя идея состояла в том, чтобы просто вернуть «null», когда клиент не имеет ожидаемого разрешения. – Daniel
, вам нужно сделать это в методе 'Binder # onTransact', это хорошее место для любых удаленных проверок. – pskink