自定义cordova插件(Windows 10):调用本机代码

时间:2016-12-09 15:23:18

标签: cordova ionic-framework windows-phone ionic2 cordova-plugins

我一直在为我的Ionic 2应用程序编写一个小的自定义插件,以便在上次系统启动后获得设备正常运行时间。

它在Android和iOS上运行良好,但我很难在Windows Phone 10上运行。

尝试调用Windows运行时组件时出现以下错误:

  

使用命令调用native的异常:: Uptime :: getUptime :: exception = ReferenceError:'Environment'未定义

这是Windows运行时Cmponent(C#),它是在Uptime.winmd文件中编译的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Uptime
{
    public sealed class Uptime
    {
        public static string getUptime()
        {
            return (Environment.TickCount & Int32.MaxValue).ToString();
        }
    }
}

在Plugin.xml中引用了Uptime.winmd(以及iOS和Android的其他本机实现,以及其他js脚本):

<?xml version='1.0' encoding='utf-8'?>
<plugin id="cordova-plugin-uptime" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android="http://schemas.android.com/apk/res/android">
    <name>Uptime</name>
    <js-module name="Uptime" src="www/Uptime.js">
        <clobbers target="cordova.plugins.Uptime"/>
    </js-module>
    <platform name="android">
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="Uptime">
                <param name="android-package" value="cordova.plugin.uptime.Uptime"/>
            </feature>
        </config-file>
        <config-file parent="/*" target="AndroidManifest.xml"/>
        <source-file src="src/android/Uptime.java" target-dir="src/cordova-plugin-uptime/Uptime"/>
    </platform>
    <platform name="ios">
        <config-file parent="/*" target="config.xml">
            <feature name="Uptime">
                <param name="ios-package" value="Uptime"/>
            </feature>
        </config-file>
        <source-file src="src/ios/Uptime.m"/>
    </platform>
    <platform name="windows">
        <js-module src="src/windows/UptimeProxy.js" name="UptimeProxy">
            <merges target="" />
        </js-module>
        <framework src="src/windows/Uptime.winmd" custom="true" target="phone"/>
    </platform>
</plugin>

从UptimeProxy.js调用Uptime.winm:

cordova.commandProxy.add("Uptime",{
    getUptime:function(successCallback, errorCallback, strInput) {
        var res = Uptime.Uptime.getUptime();
        if(res.indexOf("Error") == 0) {
            errorCallback(res);
        }
        else {
            successCallback(res);
        }
    }
});

这是从Uptime.js调用的:

var exec = require('cordova/exec');

exports.getUptime = function() {
    return new Promise(function(success, error) {
        exec(success, error, "Uptime", "getUptime", []);
    })
};

这是从我的应用程序调用的(来自(click)事件,因此它不是尚未加载依赖项的问题。)

Uptime.js适用于Android和iOS。

UptimeProxy.js肯定被调用,因为我可以在

之前看到日志

var res = Uptime.Uptime.getUptime();

我使用Ionic / cordova CLI生成项目,然后使用VS2015在我的设备上部署。

离子信息:

Your system information:

Cordova CLI: 6.4.0
Ionic Framework Version: 2.0.
Ionic CLI Version: 2.1.14
Ionic App Lib Version: 2.1.7
Ionic App Scripts Version: 0.
ios-deploy version: Not insta
ios-sim version: Not installe
OS: Windows 10
Node Version: v6.9.1
Xcode version: Not installed

插件和应用程序的编译设置为“Debug - any CPU”。

我肯定做错了什么,但是我使用C#代码检查了WP10的其他插件并没有发现差异。

由于cordova文档远非详尽无遗,我对该怎么做没有任何线索。

有什么想法吗?

提前致谢,如果您需要有关我的设置的更多信息,请不要犹豫。

0 个答案:

没有答案