【发布时间】:2014-09-17 05:13:22
【问题描述】:
我需要区分我的 Phonegap Android 应用是否正在运行
A) 在模拟器或手机中通过 USB 调试模式
B) 通常在手机中
有可能吗?你知道什么诀窍吗?我需要这个用于开发和生产之间的自动配置切换......谢谢。
【问题讨论】:
标签: android cordova configuration
我需要区分我的 Phonegap Android 应用是否正在运行
A) 在模拟器或手机中通过 USB 调试模式
B) 通常在手机中
有可能吗?你知道什么诀窍吗?我需要这个用于开发和生产之间的自动配置切换......谢谢。
【问题讨论】:
标签: android cordova configuration
是的,一些平台允许在运行时进行包自省。
在 Android 上,本机库是链接到文档的 PackageManager。无论您是否可以从界面中获得所需的信息,都将(希望)记录在案
目前没有插件或 api 可以从 phonegap javascript 环境中访问此信息。但是,这很容易实现。
我可能愿意把这样的插件放在一起。这将是相对简单且可能有用的。或者我可以帮助您完成整个过程。
编辑 是的,这个信息是可用的,这是一个sn-p:
if ((ctx.getPackageManager().getPackageInfo(
ctx.getPackageName(), 0).applicationInfo.flags &
ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
//Debug and development mode
BASE_SERVICE_URL = "http://qa.example.com";
}
我在MOBIARCH BLOG上找到了上面的代码
【讨论】:
使用Ace plugin,您可以调用任意API。所以 Lorenzo 的代码可以用你的 JavaScript 编写如下:
var ctx = ace.android.getContext();
ctx.invoke("getPackageManager", function (pm) {
ctx.invoke("getPackageName", function (name) {
pm.invoke("getPackageInfo", name, 0, function (info) {
info.getField("applicationInfo", function (appInfo) {
ace.NativeObject.getField("android.content.pm.ApplicationInfo", "FLAG_DEBUGGABLE", function(DEBUGGABLE) {
appInfo.getField("flags", function (flags) {
if (flags & DEBUGGABLE != 0) {
// Debug and development mode
BASE_SERVICE_URL = "http://qa.example.com";
}
});
});
});
});
});
});
【讨论】: