我正在考虑开发一个基于爱奥尼亚的埃迪斯顿信标应用程序。我需要确保我能应付这种情况:
用户口袋里有手机和屏幕锁。
2-手机进入信标范围。
3-当用户安装了我的应用程序时,他会收到通知。
假设用户安装了应用程序,那么一旦进入信标区域,就可以在不解锁手机的情况下进行api调用吗?
如果有可能的话有什么建议明星四处看看怎么做吗?
对不起,这么笼统的问题,我已经到处找了,如果有可能的话,再问这个问题。对不起,如果这是一个垃圾问题和我糟糕的英语。

最佳答案

当然可以在android上使用本地代码执行您所描述的操作,使用ioic/cordova从javascript调用api可能是不可能的。
问题在于,ioic和cordova依赖androidWebView来托管调用web服务的javascript。WebView必须位于一个Activity内部,这是一个原生的android构造,承载一个可视屏幕。这样一个可视化的屏幕不能在没有显示的情况下创建,因此没有办法执行javascript代码来进行api调用,除非屏幕实际首先显示给用户。
另一种方法是制作一个混合应用程序,使用本机组件来检测信标和进行api调用,并使用ioic构建应用程序的其余部分。我和其他离子显影剂一起研究过这种溶液。如果你走这条路,我建议在应用程序启动之前使用Android Beacon Library本地检测eddystone信标,然后在信标检测时触发其本地回调的通知,然后进行api调用。
值得注意的是,虽然这个库也有离子绑定,但它们只在应用程序处于前台时才起作用。
以下是使用此库检测到Eddystone信标时如何设置代码以进行API调用:

public class MyApplicationName extends Application implements BootstrapNotifier {
  private static final String TAG = "MyApplicationName";
  private RegionBootstrap regionBootstrap;

  @Override
  public void onCreate() {
    super.onCreate();
    BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
     beaconManager.getBeaconParsers().add(new BeaconParser().
            setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));

    // wake up the app when any beacon is seen (you can specify specific id filers in the parameters below)
    Region region = new Region("match-any-eddystone", null, null, null);
    regionBootstrap = new RegionBootstrap(this, region);
  }

  @Override
  public void didDetermineStateForRegion(int arg0, Region arg1) {
      // Don't care
  }

  @Override
  public void didEnterRegion(Region arg0) {
    Log.d(TAG, "Got a didEnterRegion call");

    // TODO:  MAKE API CALL HERE

  }

  @Override
  public void didExitRegion(Region arg0) {
    // Don't care
  }
}

完全公开:我是android beacon库项目的首席开发人员。

10-07 19:33
查看更多