安卓平台上的Worklight应用启动画面

5
我是使用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论坛上谈论此事
还有许多博客文章谈论使用PhoneGap在Android上的启动画面这里这里,但我没有在这些文章中找到解决我的问题的方法。
以下是应用程序崩溃后的日志:
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)

请提供崩溃日志,好吗? - Alécio Carvalho
@Alécio 我修改了问题,并添加了崩溃日志。 - WiPhone
现在我正在使用 Woklight 6.0.0,但是这些代码片段都无法工作。 - WiPhone
4个回答

6
如果你使用的是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);
}

我已经尝试过使用现在正在使用的Worklight 6.0.0,但它并没有起作用。 - WiPhone

1
如果您使用的是6.0+版本,您不需要编写任何本地代码。只需将名为“splash.png”的资源放置在android本地目录(android/native/res/drawable)下并删除默认的图片。启动应用程序时,Worklight将自动显示该图片作为闪屏屏幕。

0

我不确定这是否有帮助,但我是这样制作我的启动画面的。也许你应该试一下:

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

-1
你还可以编写自己的JavaScript启动屏幕。虽然它们不如本机启动屏幕那样好看,但在我看来也值得一提。它们也可以跨平台使用。这里有一个dojo示例。
  1. 在你的HTML中创建DIV:

    <div id="splash"></div>
    
  2. 为DIV元素创建样式类:

    #splash {
        width:100%;   height:100%;    margin:0;   padding:0;
        background-color: red !important;
        position:absolute;
        z-index:999;
    }
    
  3. 在dojo.ready事件后隐藏DIV:

    function dojoInit() {
        require([ "dojo", ...modules... ], function(dojo) {
            dojo.ready(function() {
                hideSplash();
            });
        });
    }
    
    function hideSplash(){
        // Dojo淡出动画
        dojo.fadeOut({
            node:"splash",
            onEnd: function(){
                dojo.style("splash", "display", "none");
            }
        }).play(); 
    }   
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接