Cordova (Ionic) : Splashscreen 只能在 Android 上运行一次

Posted

技术标签:

【中文标题】Cordova (Ionic) : Splashscreen 只能在 Android 上运行一次【英文标题】:Cordova (Ionic) : Splashscreen only works one time on Android 【发布时间】:2016-04-16 20:54:15 【问题描述】:

我使用 Cordova 插件创建了一个 Splashscreen,方法是将插件添加到我的 Ionic 应用程序中:

cordova plugin add org.apache.cordova.splashscreen

当我在我的 android 手机上安装该应用程序并首次运行它时,我看到启动画面正常工作。但是,如果我通过按后退按钮退出应用程序,然后重新打开应用程序,这次我看不到启动屏幕,它直接进入主屏幕。我认为这是因为当我按下后退按钮时,应用程序并未完全关闭(退出)。因此,如果我转到仍在运行的应用程序列表并手动关闭我的应用程序(从正在运行的应用程序列表中),那么下次我打开我的应用程序时,我会再次看到启动画面。

我尝试在按下后退按钮时退出应用程序:

function onLoad() 
    document.addEventListener("deviceready", onDeviceReady, true);


function onDeviceReady() 
    document.addEventListener("backbutton", onBackKeyDown, false);

function onBackKeyDown()

 navigator.app.exitApp();

在我的 javascript 代码中,但没有帮助。 有什么好的解决方案?

【问题讨论】:

【参考方案1】:

启动画面用于在应用加载时显示默认图像,我们不希望用户在应用启动时对黑屏感到沮丧。结果,android 在coldstart(应用程序被杀死时正在启动)上显示启动画面。你通常不需要在hotstart 上显示闪屏,但如果你这样做了,你可以使用闪屏科尔多瓦插件公开的以下 JavaScript 方法:

navigator.splashscreen.show();
navigator.splashscreen.hide();

只需确保在 platformready 时调用这些函数。或者,您可以使用 ngCordova 为您提供可注入的服务 api:http://ngcordova.com/docs/plugins/splashscreen/

处理恢复事件:

document.addEventListener('deviceready', function () 
  document.addEventListener('resume', yourAsyncResumeCallback, false);
);

【讨论】:

感谢您的回答。我尝试在function onDeviceReady() 中添加:navigator.splashscreen.show();,但它仍然不起作用,你知道为什么吗? 在您的情况下,设备是从后台带来的。因此,您可以使用针对该精确场景调用的 cordova 事件生命周期事件 resume。参考:cordova.apache.org/docs/en/4.0.0/cordova/events/…。如果您的问题得到解决,也请接受:) 您能否将完整的解决方案放在答案中。我通过在 onResumeMyApp 函数中添加 navigator.splashscreen.show(); 来尝试您所说的,我也添加了这个 document.addEventListener("resume", onResumeMyApp, false); 。但还是不行。 只有在deviceready 被触发时才应该检查所有的cordova 事件。我已经编辑了上面的代码。【参考方案2】:

您的应用程序的行为很奇怪。即使在后退按钮和重新打开之后,我的应用程序也会再次显示启动画面。这是我的 config.xml 如果您不想弃用版本,则它适用于启动画面

<?xml version="1.0" encoding="UTF-8" ?>
    <widget xmlns="http://www.w3.org/ns/widgets"
        xmlns:gap="http://phonegap.com/ns/1.0"
        id="testaplikacji"
        versionCode="1"
        version="1.0.0">

        <name>Your app name</name>
        <description>Desc</description>
        <author>Author</author>
        <gap:platform name="android">
        </gap:platform>
        <preference name="SplashScreen" value="splash" />
        <preference name="SplashScreenDelay" value="5000" />
        <gap:plugin name="org.apache.cordova.splashscreen" spec="1.0.0" source="pgb" />         
        <gap:splash src="splash.png" gap:platform="android" gap:qualifier="ldpi"   /> 
        <gap:splash src="splash.png" />

    </widget>

splash.png http://imgur.com/jmfxR4t 和 index.html 当然资产(jqmobile1.4.2.css 和 .js 和 jquery1.11.3)是我的本地资产。 \' 或使用 http:... 链接

<html>
    <head>
        <meta charset="UTF-8">
        <link href=".\jquery.mobile-1.4.2.css" rel="stylesheet" type="text/css" />
        <script src=".\jquery-1.11.3.js"></script>
        <script src=".\jquery.mobile-1.4.2.js"></script>

        <script type="text/javascript" charset="utf-8" src="cordova.js"></script>

        <script type="text/javascript" charset="utf-8">

        function init() 
            document.addEventListener("deviceready", onDeviceReady, false);
        

        function onDeviceReady() 
          //do stuff
        

        </script>
    </head>

    <body onload="init()">

    </body>
</html>

【讨论】:

以上是关于Cordova (Ionic) : Splashscreen 只能在 Android 上运行一次的主要内容,如果未能解决你的问题,请参考以下文章

Cordova笔记三:ionic+angular+cordova技术栈

如何将 Ionic Cordova 3 迁移到 Ionic Cordova 5?

ionic cordova build 成功,ionic cordova build --prod 报错

京东支付cordova插件ionic1使用教程

Ionic/Cordova:如何将插件安装到现有项目中?

任务执行失败:processDebugResources [ Cordova / Ionic ]