我正在考虑开发一个基于爱奥尼亚的埃迪斯顿信标应用程序。我需要确保我能应付这种情况:
用户口袋里有手机和屏幕锁。
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库项目的首席开发人员。