Всплывающий экран приложения Worklight на Android
Я использую Worklight для приложения Android,
Когда я пытаюсь добавить заставку
public class MyApp extends WLDroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl(getWebMainFilePath(),2000);
}
}
Я вижу заставку, но затем у меня черный экран, и приложение дает сбой, чтобы быть точным, он показывает черный экран, и когда я нажимаю на кнопку настроек, он падает
Когда я снимаю "2000"
public class MyApp extends WLDroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl(getWebMainFilePath());
}
}
Я не вижу заставку, и приложение работает.
Я вижу, что кто-то говорил об этом на форумах IBM
И есть много постов в блогах, говорящих о splashsccreens для Android с PhoneGap здесь и здесь, но я не вижу решения в этих постах моей проблемы
Вот журнал приложения после сбоя:
I/SurfaceFlinger( 93): [SurfaceFlinger] frames:2, duration:2.262000, fps:0.883908
I/InputDispatcher( 246): channel '426b7be0 NavigationBar (server)' ~ finishDispatchCycle - 4.8ms since event, 3.0ms since dispatch, handled=true
E/AndroidRuntime(15615): FATAL EXCEPTION: main
E/AndroidRuntime(15615): java.lang.NullPointerException
E/AndroidRuntime(15615): at com.worklight.androidgap.WLDroidGap.onPrepareOptionsMenu(WLDroidGap.java:163)
E/AndroidRuntime(15615): at com.worklight.androidgap.WLDroidGap.onCreateOptionsMenu(WLDroidGap.java:159)
E/AndroidRuntime(15615): at android.app.Activity.onCreatePanelMenu(Activity.java:2458)
E/AndroidRuntime(15615): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:389)
E/AndroidRuntime(15615): at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:770)
E/AndroidRuntime(15615): at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1435)
E/AndroidRuntime(15615): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1824)
E/AndroidRuntime(15615): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3492)
E/AndroidRuntime(15615): at android.view.ViewRootImpl.handleFinishedEvent(ViewRootImpl.java:3464)
E/AndroidRuntime(15615): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2601)
E/AndroidRuntime(15615): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(15615): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(15615): at android.app.ActivityThread.main(ActivityThread.java:4524)
E/AndroidRuntime(15615): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(15615): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(15615): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
E/AndroidRuntime(15615): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
E/AndroidRuntime(15615): at dalvik.system.NativeStart.main(Native Method)
4 ответа
Если вы используете Worklight 5.0.5.x, попробуйте это:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl(getWebMainFilePath()); // yes, this is an extra invocation
super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl(getWebMainFilePath(), 5000);
}
Если вы используете Worklight 5.0.6.x, попробуйте это:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.setIntegerProperty("splashscreen", R.drawable.splash);
super.bindBrowser(appView);
super.loadUrl(getWebMainFilePath(), 5000);
}
Если вы используете 6.0+, вам не нужно писать какой-либо нативный код. Просто поместите ресурс с именем "splash.png" в директорию android native dir(android/native/res/drawable) и удалите файл по умолчанию. Worklight автоматически покажет эту картинку в качестве заставки при запуске приложения.
Я не знаю, поможет ли это, но я сделал мой экран-заставку вот так. Может быть, вы должны попробовать это:
setContentView(R.layout.splash_screen);
Handler handler = new Handler();
// 3 seconds later splashscreen will open
handler.postDelayed(new Runnable() {
public void run() {
finish();
// to pass main screen
Intent intent = new Intent(SplashScreen.this, AnaMenuActivity.class);
SplashScreen.this.startActivity(intent);
}
}, 3000);
Вы также можете написать свой собственный экран-заставку JavaScript. Они не так хороши, как родные заставки, но, на мой взгляд, стоит упомянуть. Они также работают на X-платформе. Вот пример додзё.
Создайте DIV в своем HTML:
<div id="splash"></div>
Создать Styleclass для элемента DIV:
#splash { width:100%; height:100%; margin:0; padding:0; background-color: red !important; position:absolute; z-index:999; }
Скрыть DIV после события dojo.ready:
function dojoInit() { require([ "dojo", ...modules... ], function(dojo) { dojo.ready(function() { hideSplash(); }); }); } function hideSplash(){ // Dojo Fade Animation dojo.fadeOut({ node:"splash", onEnd: function(){ dojo.style("splash", "display", "none"); } }).play(); }