是否有可能以显示设置页面,并使用Pebble.js和CloudPebble电话沟通?(Is it p

2019-10-23 06:10发布

是否有可能在手机上获得用户输入并用它做什么,然后显示一些结果在仅使用Pebble.js和CloudPebble卵石手表?

对于这种情况,我认为我会需要PebbleKit JS或PebbleKit的Android / iOS版,以便和手机之间的通信看..对不对?

Answer 1:

Pebble.js使用PebbleKit JS制作的,所以任何你可以用PebbleKit JS做可以Pebble.js进行,包括设置的页面。



Answer 2:

要使用CloudPebble,你必须对您的配置页进行一些更改。 首先,你在网络上,你有定期应用主机的页面。 但是,对于Pebble.js和CloudPebble的测试,您需要使用从CloudPebble传递给你的return_to查询字符串值的配置数据发回给你的模拟器。

下面是一个例子(在脚本节的配置网页上在顶部)

function getQuerystring(key, default_) {
  if (default_ == null) default_ = "";
  key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
  var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if (qs == null)
    return default_;
  else
    return qs[1];
}

// set this value from the "options" query string value.
// This is the value of the options that you'll receive from your app
var optionsString = getQuerystring("options", "{username:''}");
var options = JSON.parse(optionsString);

// get the return to value from query string. Set it to blank if it's not there
var returnTo = getQuerystring("return_to","");

function sendConfigData() {

    var options = { username: txtUsername.value };
    if (returnTo != '') {
        document.location = returnTo + JSON.stringify(options);
    }
    else {
        document.location = 'pebblejs://close#' + encodeURIComponent(JSON.stringify(options));
    }
}

function cancel() {
    if (returnTo != '') {
        document.location = returnTo;
    }
    else {
        document.location = "pebblejs://close";
    }
}

然后,在你的形式,将提交按钮来调用相应功能。

<input type="text" id="txtUsername" placeholder="User Name" />
<input type="button" value="Save" onclick="sendConfigData()" />
<input type="button" value="Cancel" onclick="cancel()" />

在你的配置Web表单的底部,把下面的JavaScript:

txtUsername.value = options.username;

在CloudPebble你app.js文件,这里是你如何调用的配置屏幕:

var options = { username : 'default' };
var OPTIONS_SETTING_KEY = 0;

function showConfiguration(){
  console.log("showing configuration");
  Pebble.openURL('http://yourwebsite.com/PebbleConfig?options=' + encodeURIComponent(JSON.stringify(options)));
}

Pebble.addEventListener("showConfiguration", function() {
  showConfiguration();
});

Pebble.addEventListener("webviewclosed", function(e) {
  console.log("configuration closed");
  // webview closed
  //Using primitive JSON validity and non-empty check
  console.log('response: ' + e.response);
  if (e.response.charAt(0) == "{" && e.response.slice(-1) == "}" && e.response.length > 5) {
    options = JSON.parse(decodeURIComponent(e.response));
    // Write a key with associated value
    localStorage.setItem(OPTIONS_SETTING_KEY, JSON.stringify(options));

    console.log("Options = " + JSON.stringify(options));
  } else {
    console.log("Cancelled");
  }
});

var optionString = localStorage.getItem(OPTIONS_SETTING_KEY);
if(optionString === null || optionString === ''){
  console.log('Using default username');
}
else {
  options = JSON.parse(optionString);
  console.log('Set username: ' + options.username);
}

现在你可以使用你的选择在你的应用程序。 当你部署这个应用到生产上的应用程序商店,网页将检测到的return_to查询字符串丢失,将使用相应的关闭装置( document.location = 'pebblejs://close#' + encodeURIComponent(JSON.stringify(options)); ),并发送配置回你的手表。



文章来源: Is it possible to display a settings page and communicate with a phone using Pebble.js and CloudPebble?