2013-11-20 92 views
1

我在Titanium Studio 3.1.3中有一個應用程序,它掃描QR碼以處理它。我做這種方式:scan_qr.js在Titanium完成後立即獲取意圖結果

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 也許我沒有完成活動或意圖。

我試圖通過從此代碼獲取窗口參數來完成活動,但它關閉了整個應用程序。我能做什麼?

+0

最後,我發現問題......主要活動創建爲「重量級窗口」,在Android中創建一個新的活動。 而這個新窗口是作爲一個子活動創建的,所以直到主活動完成,** startActivityForResult **回調纔會被執行。 解決方法是將主窗口創建爲「輕量級窗口」,並將此窗口(掃描一個)創建爲其他輕量級窗口,以便它可以在意圖之後完成並執行回調函數。 查看[鏈接](http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.Android.Activity)以獲取進一步說明。 –

回答

0

我建議把這個代碼的startActivityForResult函數中,也許你得到了一些錯誤,帶來一些光您的問題:

if (e.error) { 
     Ti.API.info('Error: '+e.error); 
     Ti.UI.createAlertDialog({ 
      title:'Error!', 
      message:e.error 
     }).show();  
    } 

還有一個titanium module to scan barcodes,看看如何安裝模塊上鈦here。使用此模塊的示例可以在here找到。