【发布时间】:2013-11-20 17:47:45
【问题描述】:
我在 Titanium Studio 3.1.3 中有一个应用程序可以扫描二维码来处理它。我这样做:scan_qr.js
function scan_qr() {
var Window = Ti.UI.createWindow({
backgroundColor: '#000',
navBarHidden : false,
exitOnClose : false
});
function scan(callback){
var intent = Ti.Android.createIntent({
action: 'com.google.zxing.client.android.SCAN'
});
intent.putExtra('SCAN_MODE', 'QR_SCAN_MODE');
var activity = Ti.Android.currentActivity;
activity.startActivityForResult(intent, function(e) {
if (e.resultCode == Ti.Android.RESULT_OK) {
var contents = e.intent.getStringExtra('SCAN_RESULT'),
format = e.intent.getStringExtra('SCAN_RESULT_FORMAT');
qr_content = contents;
callback(qr_content);
} else if (e.resultCode == Ti.Android.RESULT_CANCELED) {
qr_content = 'canceled';
}
});
};
return{
scan: scan
};
}
module.exports = scan_qr;
以及调用函数:
QR = require('scan_qr')
qr = new QR();
qr.scan(function(qr_code){alert(qr_code)});
但永远不会抛出警报(qr_code);它甚至没有设置 qr_content 也许我没有完成活动或意图。
我试图通过从此代码中获取窗口参数来完成活动,但它关闭了整个应用程序。我能做什么?
【问题讨论】:
-
最后我发现了问题......主要活动被创建为“重量级窗口”,它在android中创建了一个新活动。并且这个新窗口被创建为子活动,所以直到主活动完成,startActivityForResult 回调被执行。解决方法是将主窗口创建为“轻量级窗口”,并将该窗口(扫描窗口)创建为另一个轻量级窗口,这样它就可以在intent之后完成并执行回调函数。检查link 以获得进一步的解释。
标签: android android-intent titanium