Я расширил класс InputMethodService
, чтобы создать свой собственный IME. Тем не менее, я изо всех сил пытаюсь написать действительные контрольные примеры инструментов для проверки поведения. Ранее Service
можно было проверить с помощью ServiceTestCase<YourServiceClass>
. Но, похоже, это устарело, и новый формат выглядит как this . Сейчас в данных рекомендациях я борюсь с этим фрагментом:
CustomKeyboardService service =
((CustomKeyboardService.LocalBinder) binder).getService();
Поскольку я расширяю InputMethodService
, он уже абстрагировал IBinder
, как я могу получить LocalBinder
, чтобы запустить этот фрагмент? В настоящее время этот фрагмент создает следующее исключение:
java.lang.ClassCastException:
android.inputmethodservice.IInputMethodWrapper не может быть приведен к
com.osrc.zdar.customkeyboard.CustomKeyboardService $ LocalBinder
Расширенный класс выглядит так:
public class CustomKeyboardService extends InputMethodService {
// Some keyboard related stuff
public class LocalBinder extends Binder {
public CustomKeyboardService getService() {
// Return this instance of LocalService so clients can call public methods.
return CustomKeyboardService.this;
}
}
// Some keyboard related stuff
}
Как я могу расширить свой пользовательский класс, чтобы CustomKeyboardService service
= ((CustomKeyboardService.LocalBinder) binder).getService();
не возвращал ошибку?
Вот мой код теста:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest2 {
@Rule
public final ServiceTestRule mServiceRule = new ServiceTestRule();
@Test
public void testWithBoundService() throws TimeoutException {
// Create the service Intent.
Intent serviceIntent =
new Intent(InstrumentationRegistry.getTargetContext(), CustomKeyboardService.class);
// Bind the service and grab a reference to the binder.
IBinder binder = mServiceRule.bindService(serviceIntent);
// Get the reference to the service, or you can call public methods on the binder directly.
// This Line throws the error
CustomKeyboardService service =
((CustomKeyboardService.LocalBinder) binder).getService();
}
}
Вы также можете проверить OimeKeyboard на Github для получения полного исходного кода и отправить PR с действительным контрольно-измерительным прибором.