在Tizen wearables中从web应用程序启动本机应用程序

在Tizen wearables中从web应用程序启动本机应用程序,tizen,tizen-web-app,tizen-native-app,Tizen,Tizen Web App,Tizen Native App,我想创建一个TizenWearable应用程序,在这里我可以通过点击按钮从TizenWeb应用程序调用本机服务。 在过去的一周里,我一直在寻找这个问题,但无法回避这个问题。有人能帮我写代码吗? 谢谢我相信您正在寻求开发“混合”tizen应用程序。 根据tizen.org Tizen平台允许您创建混合应用程序包,它将Web UI应用程序与一个或多个本机服务或小部件应用程序组合在一起 还有一个示例应用程序可以实现这一点。 下面是关于如何打包的更多信息。 这是可能的。这是我从你的房间里找到的 服务代

我想创建一个TizenWearable应用程序,在这里我可以通过点击按钮从TizenWeb应用程序调用本机服务。 在过去的一周里,我一直在寻找这个问题,但无法回避这个问题。有人能帮我写代码吗?
谢谢

我相信您正在寻求开发“混合”tizen应用程序。 根据tizen.org

Tizen平台允许您创建混合应用程序包,它将Web UI应用程序与一个或多个本机服务或小部件应用程序组合在一起

还有一个示例应用程序可以实现这一点。

下面是关于如何打包的更多信息。
这是可能的。这是我从你的房间里找到的

服务代码

#include <tizen.h>
#include <service_app.h>
#include <bundle.h>
#include <message_port.h>
#include "messageportnativeservicesend.h"

#define TAG "xyz"

void
sendMessage(char *remote_app_id,char *remote_port,bundle *reply){

    int ret = message_port_send_message(remote_app_id, remote_port, reply);

    if (ret != MESSAGE_PORT_ERROR_NONE)
        dlog_print(DLOG_ERROR, TAG, "message_port_check_remote_port error: %d", ret);
    else
        dlog_print(DLOG_INFO, TAG, "Send message done");

    dlog_print(DLOG_INFO, TAG, "Send message was called");
}

void
test_check_remote_port(char *remote_app_id,char *remote_port,bool result)
{
    int ret;
    ret = message_port_check_remote_port(remote_app_id,remote_port,&result);
    if (ret != MESSAGE_PORT_ERROR_NONE)
        dlog_print(DLOG_ERROR, TAG, "message_port_check_remote_port error: %d", ret);
}

void msgPort()
{
    char *remote_app_id="mRLmiKfKmV.MessagePortWebReceiver";
    char *remote_port="CrossPort";
    bool result;

    test_check_remote_port(remote_app_id,remote_port,result);
    dlog_print(DLOG_DEBUG, TAG ,"Remote port exists: %s", result ? "true" : "false");

    bundle *reply;
    reply=bundle_create();

    char *array[] = {"XY","YZ","ZX","AB"};

    bundle_add_str(reply,"test","A");
    bundle_add_str_array(reply,"service",array, 4);

    dlog_print(DLOG_DEBUG, TAG, "Bundled Successfully");


    if (result){
        sendMessage(remote_app_id,remote_port,reply);
        bundle_free(reply);
    }

}

bool service_app_create(void *data)
{
    msgPort();
    return true;
}

void service_app_terminate(void *data)
{
    // Todo: add your code here.
    return;
}

void service_app_control(app_control_h app_control, void *data)
{
    // Todo: add your code here.
    return;
}

static void
service_app_lang_changed(app_event_info_h event_info, void *user_data)
{
    /*APP_EVENT_LANGUAGE_CHANGED*/
    return;
}

static void
service_app_region_changed(app_event_info_h event_info, void *user_data)
{
    /*APP_EVENT_REGION_FORMAT_CHANGED*/
}

static void
service_app_low_battery(app_event_info_h event_info, void *user_data)
{
    /*APP_EVENT_LOW_BATTERY*/
}

static void
service_app_low_memory(app_event_info_h event_info, void *user_data)
{
    /*APP_EVENT_LOW_MEMORY*/
}

int main(int argc, char* argv[])
{
    char ad[50] = {0,};
    service_app_lifecycle_callback_s event_callback;
    app_event_handler_h handlers[5] = {NULL, };

    event_callback.create = service_app_create;
    event_callback.terminate = service_app_terminate;
    event_callback.app_control = service_app_control;

    service_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, service_app_low_battery, &ad);
    service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, service_app_low_memory, &ad);
    service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &ad);
    service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &ad);

    return service_app_main(argc, argv, &event_callback, ad);
}
#包括
#包括
#包括
#包括
#包括“messageportnativeservicesend.h”
#定义标记“xyz”
无效的
sendMessage(字符*远程应用程序id,字符*远程端口,捆绑包*回复){
int ret=消息\端口\发送\消息(远程\应用程序\ id、远程\端口、回复);
如果(ret!=消息\u端口\u错误\u无)
dlog_打印(dlog_错误,标记,“消息\u端口\u检查\u远程\u端口错误:%d”,ret);
其他的
dlog_打印(dlog_信息,标签,“发送消息完成”);
dlog_打印(dlog_信息,标签,“调用发送消息”);
}
无效的
测试检查远程端口(字符*远程应用程序id,字符*远程端口,布尔结果)
{
int ret;
ret=消息\端口\检查\远程\端口(远程\应用程序\ id、远程\端口和结果);
如果(ret!=消息\u端口\u错误\u无)
dlog_打印(dlog_错误,标记,“消息\u端口\u检查\u远程\u端口错误:%d”,ret);
}
void msgPort()
{
char*remote_app_id=“mRLmiKfKmV.MessagePortWebReceiver”;
char*remote_port=“CrossPort”;
布尔结果;
测试检查远程端口(远程应用程序id、远程端口、结果);
dlog_打印(dlog_调试,标记“远程端口存在:%s”,结果为“真”:“假”);
捆绑*回复;
reply=bundle_create();
字符*数组[]={“XY”、“YZ”、“ZX”、“AB”};
捆绑(回复“测试”、“A”);
bundle\u add\u str\u数组(回复“service”,数组,4);
dlog_打印(dlog_调试,标记,“捆绑成功”);
如果(结果){
sendMessage(远程应用程序id、远程端口、回复);
免费捆绑(回复);
}
}
bool服务应用程序创建(无效*数据)
{
msgPort();
返回true;
}
无效服务应用程序终止(无效*数据)
{
//Todo:在此处添加代码。
返回;
}
无效服务应用控制(应用控制应用控制,无效*数据)
{
//Todo:在此处添加代码。
返回;
}
静态空隙
服务\应用\语言\更改(应用\事件\信息\事件\信息,无效*用户\数据)
{
/*应用程序\事件\语言\更改*/
返回;
}
静态空隙
服务\应用\区域\已更改(应用\事件\信息\事件\信息,无效*用户\数据)
{
/*应用程序\事件\区域\格式\更改*/
}
静态空隙
服务\应用\电池电量不足(应用\事件\信息\事件\信息,无效*用户\数据)
{
/*应用程序事件电池电量低*/
}
静态空隙
服务应用程序内存不足(应用程序事件信息事件信息无效*用户数据)
{
/*应用程序\u事件\u内存不足\u*/
}
int main(int argc,char*argv[])
{
char ad[50]={0,};
服务\应用\生命周期\回调\事件\回调;
app_event_handler_h handlers[5]={NULL,};
event_callback.create=服务_app_create;
event_callback.terminate=服务_app_terminate;
event_callback.app_control=服务_app_control;
服务\应用\添加\事件\处理程序(&处理程序[应用\事件\低电量]、应用\事件\低电量、服务\应用\低电量和广告);
服务应用程序添加事件处理程序(&处理程序[应用程序事件低内存]、应用程序事件低内存、服务应用程序低内存和广告);
服务添加事件处理程序(和处理程序[应用事件语言更改]、应用事件语言更改、服务应用语言更改和广告);
服务\应用\添加\事件\处理程序(&处理程序[应用\事件\区域\格式\更改]、应用\事件\区域\格式\更改、服务\应用\区域\更改,&ad);
返回服务应用程序主(argc、argv和事件回调、ad);
}
网络代码:

window.onload = function () {
    // TODO:: Do your initialization job

    // add eventListener for tizenhwkey
    document.addEventListener('tizenhwkey', function(e) {
        if(e.keyName === "back") {
            try {
                tizen.application.getCurrentApplication().exit();
            } catch (ignore) {
            }
        }
    });



    /* MessagePortCallback instance */
    function onReceived(data, remoteMsgPort) {
        console.log("Local port Listener Called");

        for (var i = 0; i < data.length; i++){
            var keyX = data[i].key;
            console.log("key:" + keyX);

            for (var j = 0; j < data[i].value.length; j++){
                var valueX = data[i].value[j];
                console.log("value:" + valueX);        
            }
       }

    }

    function messagePort(){
         var localPort = tizen.messageport.requestLocalMessagePort("CrossPort");
         localPort.addMessagePortListener(onReceived);
         console.log("Local port Listener Registered");
    }

    // Sample code
    var textbox = document.querySelector('.contents');
    textbox.addEventListener("click", function(){
        messagePort();
        var box = document.querySelector('#textbox');
        box.innerHTML = (box.innerHTML === "Basic") ? "Sample" : "Basic";
    });

};
window.onload=函数(){
//TODO::执行初始化工作
//为Tizenwkey添加eventListener
文件.附录列表器('Tizenwkey',函数(e){
如果(例如,keyName==“back”){
试一试{
tizen.application.getCurrentApplication().exit();
}捕获(忽略){
}
}
});
/*MessagePortCallback实例*/
函数onReceived(数据,remoteMsgPort){
log(“调用的本地端口侦听器”);
对于(变量i=0;i
演示:


您是否尝试过消息端口通信?是否尝试过?有很多资源可以解决此问题。