我为我的离子cordova项目运行ionic cordova run android
。在这个时候,我的手机通过USB连接到电脑。因此,当我运行该命令时,它会在我的真实设备android redmi note 6 PRO上安装应用程序。但真正发生的事情是当应用程序打开时,只显示白屏,没有任何其他内容。首先它显示启动画面,然后永远显示白屏。为什么会出现这种情况?我在某处阅读,我认为有些人因为离子4而有这个问题。请帮助。
我点击应用程序在Android模拟器上打开后显示logcat日志的pastebin链接(它在android模拟器上显示白屏)。
这里是。 https://pastebin.com/nLiY8w0b
chrome调试器显示 - https://pastebin.com/EzdyV3Tw
我已经通过在config.xml上设置正确的参数解决了这个问题
<preference name="AutoHideSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="10000" />
<preference name="FadeSplashScreenDuration" value="1000" />
<preference name="SplashScreen" value="screen" />
<preference name="ShowSplashScreen" value="true" />
<preference name="ShowSplashScreenSpinner" value="false" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="FadeSplashScreen" value="true" />
然后,在我的platform.ready() instruction all I do is Splashscreen.hide();
上
然后在android上运行项目使用
ionic cordova run android
找到解决方案问题发生在cordova-plugin-android-permissions。在android 6+(也许是android 5,我的设备上没有它)用户应该手动接受权限。在应用程序权限请求看起来像警报视图。此警报会自动停止启动画面(即使您没有自动隐藏启动画面,也不会调用隐藏方法)并打破淡出动画。此权限请求也会破坏启动画面,即使已添加权限也是如此。
所以解决方案是在超时延迟等于淡出超时后,在splashScreen.hide()之后请求权限。
例: config.xml中
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="FadeSplashScreenDuration" value="1000" />
<preference name="SplashScreenDelay" value="30000" />
<preference name="ShowSplashScreenSpinner" value="false" />
<preference name="AutoHideSplashScreen" value="false" />
<preference name="FadeSplashScreen" value="true" />
<preference name="ShowSplashScreen" value="true" />
在app.components.ts中
initializeApp() {
this.platform.ready().then(() => {
setTimeout(() => {
this.splashScreen.hide();
}, 1000);
}
}
风陵渡! setTimeout延迟应该等于config.xml中的FadeSplashScreenDuration参数值
结论:上面的代码从Splash屏幕平滑过渡,会顺利淡出到你的启动页面。根本没有显示白屏。希望这会有所帮助。
把它放在你的config.xml文件中
<preference name="ScrollEnabled" value="false" />
<preference name="android-minSdkVersion" value="19" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="SplashScreen" value="screen" />
<preference name="AutoHideSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="3000" />
然后运行这个命令:ionic cordova build android它会在这里生成一个apk文件:your_project_folder / platforms / android / app / build / outputs / apk / debug / app-debug.apk
这应该可以在启动画面后没有白屏卡住
调试你的应用程序,并检查它是否显示任何错误应用程序卡在白屏幕主要是因为应用程序中的错误
我也遇到过这个问题,但在我的情况下,问题出在默认路由上。
当App初始化时,它尝试在默认路由上打开,这是一个空路由,我们进一步重定向到实际工作路由,在我的情况下,空路由被重定向到“/ dashboard”。
示例代码
const routes: Routes = [
{
path: '',
redirectTo: 'dashboard',
pathMatch: 'full'
},
{
path: 'dashboard',
canActivate: [AuthGuard],
loadChildren: './home/home.module#HomePageModule'
},
{
path: 'login',
loadChildren: './public/login/login.module#LoginPageModule'
}
]
在上面的代码中,我的空路由重定向到[AuthGuard]处于活动状态的仪表板,并且它停留在流通中,所以我决定将其重定向到[AuthGuard]未激活的路由,在我的情况下是“/ login” 。通过重定向到登录[Authgaurd]未激活的位置更新代码。
const routes: Routes = [
{
path: '',
redirectTo: 'login',
pathMatch: 'full'
},
{
path: 'dashboard',
canActivate: [AuthGuard],
loadChildren: './home/home.module#HomePageModule'
},
{
path: 'login',
loadChildren: './public/login/login.module#LoginPageModule'
}
]
在为Android构建项目后,该应用程序成功运行。
Justed发布了答案,如果有人在同样的问题上有这样的问题和我一样。