Я реализую службу и имею класс оболочки поверх этой службы, локально привязанной к ней. Теперь, когда я экспортирую службу как банку и ссылаюсь на нее из другого приложения (это приложение создает экземпляр класса оболочки). При запуске приложения, я получаю ClassCastException: android.os.BinderProxy не может быть приведен к ххх $ LocalBinder , вызванные локальной привязки в классе обертке:
service = ((LocalBinder) binder).getService();
Связующее здесь типа BinderProxy вместо локального замка и, следовательно, аварии.
Единственным способом, с которым работает это приложение, является то, что имя пакета приложения совпадает с именем пакета услуг (я предполагаю, что android считает, что служба является локальной).
private final IBinder localBinder = new LocalBinder();
public class LocalBinder extends Binder {
xxxService getService() {
return xxxService.this;
}
}
и
public IBinder onBind(Intent intent) {
IBinder result = null;
result = localbinder;
return result;
}
Тогда в моем классе обертке onServiceConnected:
public void onServiceConnected(ComponentName name, IBinder binder) {
xxxService = ((LocalBinder) binder).getService();
Наконец мой обертка конструктор класса:
public xxxServiceManager(Context context) throws Exception {
this.context = context;
xxxServiceManagerIntent = new Intent("providerAPI");
xxxServiceManagerIntent.setClassName("com.yyy", "com.yyy.xxxService");
context.startService(xxxServiceManagerIntent);
context.bindService(xxxServiceManagerIntent, serviceConnection, Context.BIND_AUTO_CREATE);
Затем в главном приложении, которое использует этот jar, если yo u установить имя пакета
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yyy.provider" //the same as the service (which does not make sense)
все работает, но, очевидно, я хочу установить другое имя пакета. Есть ли способ редизайна или сделать эту работу?
спасибо!
Дополнительный код будет полезен. Ваш сервис (особенно метод 'onBind()' и ваш класс 'LocalBinder') и ваш код привязки могут показать многое о причине проблемы. –
Было бы лучше добавить свой код к исходному вопросу. Это было бы более читаемым, и вам не нужно будет беспокоиться о лимите символов для комментариев. –
Надеюсь, теперь станет ясно. Спасибо за помощь! –