【问题标题】:Worklight App Splash Screen on AndroidAndroid 上的 Worklight 应用程序启动画面
【发布时间】:2013-03-07 23:06:38
【问题描述】:

我正在将 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());
    }       
}

我没有看到启动画面,但该应用程序运行正常。

我看到有人talked about that in IBM forums

还有很多博客文章都在讨论使用 PhoneGap 的 Android 启动画面 herehere,但我在这些帖子中没有看到解决我的问题的方法

以下是崩溃后的应用日志:

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 我编辑了问题,添加了崩溃日志
  • 现在我使用的是 Woklight 6.0.0,这些代码 sn-ps 都没有工作。

标签: android cordova splash-screen ibm-mobilefirst


【解决方案1】:

如果您使用的是 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 上试过了,我现在正在使用,但它不工作
【解决方案2】:

如果您使用的是 6.0+,则无需编写任何本机代码。只需在 android native dir(android/native/res/drawable) 下放置一个名为“splash.png”的资源并删除默认的。启动应用时,Worklight 会自动将该图片显示为启动屏幕。

【讨论】:

    【解决方案3】:

    我不知道它是否会有所帮助,但我的启动画面是这样的。也许你应该试试这个:

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

    【讨论】:

      【解决方案4】:

      您还可以编写自己的 JavaScript 闪屏。 它们不如原生闪屏好,但在我看来值得一提。 他们也可以在 x 平台上工作。这是一个道场的例子。

      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 Fade Animation
            dojo.fadeOut({
                node:"splash",
                onEnd: function(){
                    dojo.style("splash", "display", "none");
                }
            }).play(); 
        }   
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多