Android 在后台输入位置时 Eddystone 调用 api
Android Eddystone call to api when enter location on background
我正在考虑在 ionic 上开发一个基于 eddyston beacon 的应用程序。我需要确保我可以涵盖这种情况:
1- 用户口袋里有phone和屏幕锁。
2- phone 到达信标范围。
3- 当用户安装了我的应用程序时,他会收到通知。
假设用户已经安装了应用程序,是否可以在不解锁phone的情况下进入信标区域后进行api呼叫?
如果可以的话有什么建议可以给star环顾四周的方法吗?
抱歉这么笼统的问题,问这个问题之前我已经到处看了看是否可以。对不起,如果这是一个转储问题并且我的英语不好。
当然可以用 Android 上的本机代码执行您描述的操作,可能无法从 JavaScript 调用 API 使用Ionic/Cordova.
问题是 Ionic 和 Cordova 依赖 Android WebView
来托管 JavaScript 调用网络服务。 WebView
必须驻留在 Activity
内,它是承载可视屏幕的原生 Android 结构。如果不显示它就无法创建这样的可视屏幕,因此无法执行您的 JavaScript 代码来进行 API 调用,除非该屏幕实际上首先显示给用户。
另一种方法是制作一个混合应用程序,该应用程序使用本机组件来检测信标并进行 API 调用,然后使用 Ionic 构建应用程序的其余部分。我与其他 Ionic 开发人员就此解决方案进行了合作。如果你走这条路,我建议使用 Android Beacon Library 甚至在应用程序启动之前本地检测 Eddystone 信标,然后在信标检测时从其本地回调触发通知,然后让你的 API 呼叫.
值得注意的是,虽然此库也有 Ionic 绑定,但它们仅在应用程序位于前台时才有效。
以下是设置代码以在使用此库检测到 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 图书馆项目的首席开发人员。
我正在考虑在 ionic 上开发一个基于 eddyston beacon 的应用程序。我需要确保我可以涵盖这种情况:
1- 用户口袋里有phone和屏幕锁。
2- phone 到达信标范围。
3- 当用户安装了我的应用程序时,他会收到通知。
假设用户已经安装了应用程序,是否可以在不解锁phone的情况下进入信标区域后进行api呼叫?
如果可以的话有什么建议可以给star环顾四周的方法吗?
抱歉这么笼统的问题,问这个问题之前我已经到处看了看是否可以。对不起,如果这是一个转储问题并且我的英语不好。
当然可以用 Android 上的本机代码执行您描述的操作,可能无法从 JavaScript 调用 API 使用Ionic/Cordova.
问题是 Ionic 和 Cordova 依赖 Android WebView
来托管 JavaScript 调用网络服务。 WebView
必须驻留在 Activity
内,它是承载可视屏幕的原生 Android 结构。如果不显示它就无法创建这样的可视屏幕,因此无法执行您的 JavaScript 代码来进行 API 调用,除非该屏幕实际上首先显示给用户。
另一种方法是制作一个混合应用程序,该应用程序使用本机组件来检测信标并进行 API 调用,然后使用 Ionic 构建应用程序的其余部分。我与其他 Ionic 开发人员就此解决方案进行了合作。如果你走这条路,我建议使用 Android Beacon Library 甚至在应用程序启动之前本地检测 Eddystone 信标,然后在信标检测时从其本地回调触发通知,然后让你的 API 呼叫.
值得注意的是,虽然此库也有 Ionic 绑定,但它们仅在应用程序位于前台时才有效。
以下是设置代码以在使用此库检测到 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 图书馆项目的首席开发人员。