Я реализую всплывающий мост, как описано здесь: https://github.com/braintree/popup-bridge-android
Пример проекта работает нормально, но у меня проблемы с получением моста для работы в моем приложении. Я следовал инструкциям и добавил следующий необходимый код в мой AndroidManifest.xml
файл.
<activity android:name="com.braintreepayments.popupbridge.PopupBridgeActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="${applicationId}.popupbridge" />
</intent-filter>
</activity>
Дело в том, что работает на одном эмуляторе, но не на любых других устройствах . Я попытался очистить кэш и перезапустить Android Studio и стереть данные эмуляторов, с которыми он не работает.
После некоторой отладки я обнаружил, что библиотека popup-bridge-android
зависит от библиотеки browser-switch-android
: https://github.com/braintree/browser-switch-android
Ниже приведена часть кода, где он работает неправильно. В эмуляторе, где работает мост, mContext.getPackageManager().queryIntentActivities(intent, 0)
находит 1 действие, а на других устройствах - 0. Я не понимаю, почему он не находит никаких действий. Он должен соответствовать активности, которую я установил в манифесте, и найти ее.
private boolean isReturnUrlSetup() {
Intent intent = new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse(getReturnUrlScheme() + "://"))
.addCategory(Intent.CATEGORY_DEFAULT)
.addCategory(Intent.CATEGORY_BROWSABLE);
return availableActivities(intent).size() == 1;
}
private List<ResolveInfo> availableActivities(Intent intent) {
return mContext.getPackageManager()
.queryIntentActivities(intent, 0);
}
Подводя итог: Проблема в том, что queryIntentActivities(intent, 0)
возвращает разные результаты для одного и того же кода.
Что может быть причиной этого? Большое вам спасибо за ваше время.