Не отображается на экране Android-планшета Cordova

Я абсолютно новый для Кордовы и пытаюсь получить заставку, работающую на Android. Я последовал за несколькими учебниками к письму и рассмотрел здесь вопросы о SO, но он пока не работает.

Я использую подход "Cordova CLI" - вот мой /config.xml:

   <?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.hello" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>HelloWorld</name>

    <preference name="SplashScreen" value="screen" />       
    <preference name="SplashScreenDelay" value="2000" />    

    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="[email protected]" href="#" onclick="location.href='http://cordova.io'; return false;">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <plugin name="cordova-plugin-whitelist" spec="1" />
    <access origin="*" />
    <allow-intent href="#" onclick="location.href='http://*/*'; return false;" />
    <allow-intent href="#" onclick="location.href='https://*/*'; return false;" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">

        <allow-intent href="market:*" />

        <splash src="res/screen/android/splash-logo.png" density="land-hdpi"/>
        <splash src="res/screen/android/splash-logo.png" density="land-ldpi"/>
        <splash src="res/screen/android/splash-logo.png" density="land-mdpi"/>
        <splash src="res/screen/android/splash-logo.png" density="land-xhdpi"/>

        <splash src="res/screen/android/splash-logo.png" density="port-hdpi"/>
        <splash src="res/screen/android/splash-logo.png" density="port-ldpi"/>
        <splash src="res/screen/android/splash-logo.png" density="port-mdpi"/>
        <splash src="res/screen/android/splash-logo.png" density="port-xhdpi"/>     

        <icon density="ldpi" src="res/screen/android/icon.png" />
        <icon density="mdpi" src="res/screen/android/icon.png" />
        <icon density="hdpi" src="res/screen/android/icon.png" />
        <icon density="xhdpi" src="res/screen/android/icon.png" />      
    </platform>

    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
</widget>

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

Я добавил в свой проект плагин-plug-splashscreen.

  cordova plugin add cordova-plugin-splashscreen 

Всплывающее окно все еще не отображается - вместо этого появляется черный экран, когда приложение запускается на эмуляторе. Через пару секунд черный экран исчезнет, ​​и появится экран "Кордова" по умолчанию "устройство".

Я сделал все, что было предложено в других местах - можете ли вы, ребята, понять, что неправильно?

FYI Я смотрел каталог /plataforms, и кажется, что все правильно установлено.

Ниже приведен фрагмент из /platforms/android/res/xml/config.xml:

<splash density="land-hdpi" src="res/drawable-land-xhdpi/screen.png" />
<splash density="land-ldpi" src="res/drawable-land-xhdpi/screen.png" />
<splash density="land-mdpi" src="res/drawable-land-xhdpi/screen.png" />
<splash density="land-xhdpi" src="res/drawable-land-xhdpi/screen.png" />
<splash density="port-hdpi" src="res/drawable-land-xhdpi/screen.png" />
<splash density="port-ldpi" src="res/drawable-land-xhdpi/screen.png" />
<splash density="port-mdpi" src="res/drawable-land-xhdpi/screen.png" />
<splash density="port-xhdpi" src="res/drawable-land-xhdpi/screen.png" />
<icon density="ldpi" src="res/screen/android/icon.png" />
<icon density="mdpi" src="res/screen/android/icon.png" />
<icon density="hdpi" src="res/screen/android/icon.png" />
<icon density="xhdpi" src="res/screen/android/icon.png" />

В каждом каталоге, указанном выше, есть файлы screen.png, поэтому, кажется, Кордова делает свою работу правильно.


Основная деятельность:

package com.example.hello;

import android.os.Bundle;
import org.apache.cordova.*;

public class MainActivity extends CordovaActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml
        loadUrl(launchUrl);
    }
}

Ответ 1

Я слишком долго боролся с этой проблемой и выяснил, что проблема заключается в значениях для SplashScreenDelay и FadeSplashScreenDuration.

Если вы посмотрите SplashScreen.java, вы обнаружите, что функция showSplashScreen выполняет следующее:

final int fadeSplashScreenDuration = getFadeDuration();
final int effectiveSplashDuration = Math.max(0, splashscreenTime - fadeSplashScreenDuration);

В вашей конфигурации вы установили SplashScreenDelay равным 2000 мс.

getFadeDuration ищет элемент FadeSplashScreenDuration и, если не найден (в этом случае), возвращается к умолчанию DEFAULT_SPLASHSCREEN_DURATION, что составляет 3000 мс, что приводит к отрицательному значению для effectiveSplashDuration. По-видимому, это не приведет к отображению всплывающего экрана.

Итак, решения

  • добавьте элемент FadeSplashScreenDuration в конфигурацию со значением, установленным в 0. (или любое число меньше 2000)
  • Увеличьте значение SplashScreenDelay до 4000 (или любое число больше 3000)

Ответ 2

Попробуйте использовать это в файле cofig.xml.

<access origin="*" />
<allow-intent href="#" onclick="location.href='http://*/*'; return false;" />
<allow-intent href="#" onclick="location.href='https://*/*'; return false;" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />

 <feature name="SplashScreen" >
    <param
        name="android-package"
        value="org.apache.cordova.splashscreen.SplashScreen" />
    <param
        name="onload"
        value="true" />
</feature>

это может решить вашу проблему.