Плагин Cordova для Android Beam с помощью intent-filter перезапускает веб-просмотр - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть приложение Cordova, и я хотел бы поделиться файлом между двумя устройствами, используя Android Beam. Я бы хотел, чтобы принимающее устройство продолжало и не запускало новый Activity, который перезапускает WebView.

Однако после использования Android Beam намерение обрабатывается методом onNewIntent(), а приложение cordova по-прежнему перезапускается и сбрасывает состояние приложения.

Я настроил свой Плагин Cordova для внедрения фильтра намерений в AndroidManifest в MainActivity приложения Cordova, например:

<application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true">
    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/activity_name" android:launchMode="singleTask" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
        <intent-filter android:label="@string/launcher_name">
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <!--  Injected by my plugin  -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:host="*" android:mimeType="application/json" />
        </intent-filter>
    </activity>
</application>

Я пытался использовать разные Launchmodes для android. Только singleInstance и singleTask передадут намерение методу onNewIntent().

Я переопределяю CordovaPlugin onNewIntent() следующим образом:

@Override
public void onNewIntent(Intent intent) {
    handleViewIntent(intent);
}

В handleViewIntent я обрабатываю переданный файл и отправляю результат обратно в приложение cordova:

PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, jsonstr);
pluginResult.setKeepCallback(true);
this.callbackContext.sendPluginResult(pluginResult);

После запуска этого кода приложение cordova получит данные, однако WebView перезагрузится. Государство потеряно. Я не понимаю, почему действие с WebView уничтожается после того, как я обработал новое намерение. Что я могу сделать, чтобы изменить это поведение?

...