$ ionicPlatform.ready在部署到真实设备时未触发

时间:2016-10-03 10:37:08

标签: android cordova ionic-framework

我有这个奇怪的问题,我正在使用离子框架开发一个Android应用程序并使用cordova插件来访问本机android函数。 当$ ionicPlatform.ready事件被触发时,应该调用cordova文档建议的那些插件,所以我将包含cordova函数的代码括在:

$ionicPlatform.ready(function(){
// some cordova plugin code e.g $cordovaVibration.vibrate([100]);
})

奇怪的行为是每当我使用此命令在真实设备上测试我的应用程序时:

$ ionic run android -c -l 

所有功能完美无误地运行。 现在,当我构建并签署我的应用程序时,将其部署到同一个真实设备

$ionicPlatform.ready(function(){
//some code
})

只在angular.module(....)内执行一次.run(...){...} 只有在我锁定屏幕然后解锁之后。

中的所有代码
$ionicPlatform.ready(function(){
//some code
})

不起作用。 这是app.js中的代码:

angular.module('conFusion', ['ionic', 'ngCordova', 'app.controllers','app.services'])
.run(function($ionicPlatform, $rootScope, $ionicLoading, $cordovaSplashscreen, $timeout) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if (window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);

    }
    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }
    $timeout(function() {
      $cordovaSplashscreen.hide();
    }, 3000);
  });
// the rest of code goes here

你可以看到$ cordovaSplashscreen.hide();除非触发$ ionicPlatform.ready,否则无法执行。事情是只有当我锁定屏幕然后解锁它时才会隐藏启动画面,但是从不执行属于其他插件的代码。

更新

将侦听器格式$ ionicPlatform.ready更改为

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

无济于事。

使用

测试应用时
$ cordova run android

$ ionic run android

侦听器函数中包含的代码将不会执行。 但是在使用命令测试应用程序时:

$ ionic run android -c -l

该应用程序运作正常

2 个答案:

答案 0 :(得分:0)

$string_custom_attr_values = 'S|M|L|XL';
$arr_custom_attr_values = explode("|", $string_custom_attr_values);
$total_variations = count($arr_custom_attr_values);
$variation_post_id = $post_id;
for($i = 1; $i <= $total_variations; $i++) {
    $variation_post_id += $i;
    $variation_post = array(
        'post_title' => 'Variation #' . $variation_post_id . ' of ' . $item['termek'],
        'post_name'     => 'product-' . $variation_post_id . '-variation',
        'post_status'   => 'publish',
        'post_parent'   => $post_id,
        'post_type'     => 'product_variation',
        'guid'          =>  home_url() . '/product_variation/product-' . $variation_post_id . '-variation',
        'menu_order'    =>  $i
 );

    // Insert the variation post into the database
    $variation_post_id = wp_insert_post( $variation_post );
    update_post_meta( $variation_post_id, 'attribute_'.$custom_attribute_name, $arr_custom_attr_values[$i-1]);

    /*Rest of the post_meta like in the base product*/

}//end for

尝试在$ ionicPlatform.ready函数中使用此事件侦听器。也许这会对你有所帮助:)()

答案 1 :(得分:0)

经过大量检查后,我终于能够确定原因并加以解决。

问题在于这个确切的cordova插件:

https://github.com/katzer/cordova-plugin-local-notifications.git

我刚把它删除了,瞧!一切正常,没有更奇怪的行为。

我找到的一个有用的工具就是这个chrome插件https://chrome.google.com/webstore/detail/adb/dpngiggdglpdnjdoaefidgiigpemgage 它允许使用console.log()进行远程调试; Ionic app中的说明。