【问题标题】:Cordova splashscreen not being displayed on AndroidCordova 闪屏未在 Android 上显示
【发布时间】:2016-02-05 12:39:44
【问题描述】:

我是 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="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <plugin name="cordova-plugin-whitelist" spec="1" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <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>

我知道我应该为每种密度设置不同的图像尺寸,但这是一个测试项目,所以请忽略它。

我已将 cordova-plugin-splashscreen 添加到我的项目中。

  cordova plugin add cordova-plugin-splashscreen 

启动画面仍未显示 - 当应用在模拟器上运行时出现黑屏。几秒钟后,黑屏消失,出现默认的“设备就绪”Cordova 屏幕。

我已经完成了其他地方建议的所有操作 - 你们能找出问题所在吗?

仅供参考,我正在查看 /plataforms 目录,似乎设置正确。

下面的sn-p来自/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 文件 - 因此 Cordova 似乎在正常工作。


主要活动:

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);
    }
}

【问题讨论】:

  • 你能发布主要活动代码吗?
  • Err.... 也许吧。我在哪里可以找到它? :) 我认为活动内容是特定于 Android 的,因为我使用的是 Cordova CLI,所以我不应该干预它。
  • 在您的 android 项目 src 文件夹中的主要活动 java 文件将是他们的。
  • 您的主要活动看起来很完美,但您是否正确添加了闪屏插件?
  • 您使用的是哪个插件版本?该版本可以在cordova plugins 输出中看到。按照@jaydroider 的建议尝试cordova plugin rm splashscreen &amp;&amp; cordova plugin add https://github.com/apache/cordova-plugin-splashscreen。或者尝试将&lt;preference name="FadeSplashScreenDuration" value="500"/&gt; 添加到config.xml

标签: android cordova


【解决方案1】:

我也为这个问题苦苦挣扎了一段时间,发现问题出在SplashScreenDelayFadeSplashScreenDuration 的值上。

如果您查看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 的数字)

【讨论】:

  • 多么好的发现!在我看来这是一个糟糕的决定——他们应该计算 FadeSplashScreenDuration 的值(例如,splashscreenTime 的 20%)而不是设置默认值 3K。我现在已经放弃了 Cordova 并正在使用 Ionic - 但我在我的旧项目中将持续时间设置为 10K 并且它有效 - 所以我接受你的回答是正确的。非常感谢你:)
  • 什么鬼……非常感谢!这花了我半天时间。现在完美运行!
【解决方案2】:

尝试在你的 cofig.xml 文件中使用它。

<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<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>

这可能会解决您的问题。

【讨论】:

  • 反对的选民请说明这个答案有什么问题。
  • 谢谢。这些元素存在于 /platforms/android/res/xml/config.xml - 它们是由 Cordova 自动添加的。它仍然无法正常工作:(
  • 但您发布的 config.xml 不包含该内容,因此您也可以手动添加。
  • 因为那是我根目录下的config.xml。 Cordova 为 Android 生成的 config.xml 确实包含这些元素。
  • 使用命令 cordova remove 卸载你的插件一次,然后尝试使用 git url cordova plugin add github.com/apache/cordova-plugin-splashscreen.git 安装
猜你喜欢
  • 2014-12-13
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多