2013-12-10 2 views
0

Я разрабатываю приложение для Android, чтобы читать штрих-код с помощью плагина Zxing Barcode reader.Попытка вызова функции JavaScript из Java Исходный код

В плагине есть объект с именем window.plugins.barcodeScanner, с помощью которого мы кодируем/декодируем штрих-код.

Я не хочу использовать HTML для вызова вещей вместо того, чтобы вместо Javascript-функции вызываться из Java [при щелчке изображения - вызывается функция ниже).

function scanCode(){ 
    window.plugins.barcodeScanner.scan(
     function(result){ 
      alert("Scanned Code: " + result.text 
       + ". Format: " + result.format 
       + ". Cancelled: " + result.cancelled); 
     }, 
     function(error){ 
      alert("Scan failed: " + error); 
     } 
    ); 
} 

Пожалуйста, дайте мне знать, как достичь этого.

+1

Есть библиотеки для запуска JavaScript в Java. На ум приходит носорог. Тем не менее, я сомневаюсь, что вы когда-либо будете работать с файлами 'windows.', поскольку в поле« окно »нет области, поскольку это происходит из браузера. Другим вариантом может быть использование виджета Java-браузера каким-то образом, чтобы ИТ-сервер загружал страницу от имени приложения. – CodeChimp

+0

Является ли ваше приложение приложением для телефонных разговоров или вы пытаетесь использовать только плагин в строго родном приложении? –

+0

@UnchartedSpace: Это строго собственное приложение и использование только плагина. –

ответ

1

допущениях:

  • вы уже настроили LibararyProject от https://github.com/wildabeast/BarcodeScanner/tree/master/src/android.
  • Ваша деятельность не распространяется на CordovaActivity, но распространяется на Activity.
  • Ваша основная цель - просто использовать сканер. Вы просто пытались найти легкий/быстрый способ сделать это и подумали, что плагин PG может сделать трюк.

Все, что вам нужно сделать, это вытащить методы сканирования и onActivityResult и некоторые вспомогательные строки из https://github.com/wildabeast/BarcodeScanner/blob/master/src/android/com/phonegap/plugins/barcodescanner/BarcodeScanner.java и поместить их в вашу деятельность. Вам нужно будет заменить ссылки на кордову своей собственной деятельностью.

Конечный результат может выглядеть примерно так:

public static final int REQUEST_CODE = 0x0ba7c0de; 
private static final String SCAN_INTENT = "com.google.zxing.client.android.SCAN"; 

public void scan() { 
    Intent intentScan = new Intent(SCAN_INTENT); 
    intentScan.addCategory(Intent.CATEGORY_DEFAULT); 
    this.startActivityForResult(intentScan, REQUEST_CODE); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == REQUEST_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 
      String barcode = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      //Do whatever you need with the barcode here 
     } else if (resultCode == Activity.RESULT_CANCELED) { 
      // handle a canceled scan 
     } else { 
      // throw an error or something 
     } 
    } 
} 

Если это работает для вас, то вам не нужно даже Кордову как зависимостях.

+0

Да. Это помогает, и это то, чего я ожидал. Большое спасибо!! Очень благодарен вам. –

0

Вы можете вызвать Javascript-код с родной стороны на Android, используя функцию sendJavascript, определенную в CordovaWebView.

В вашем случае вы бы сделали что-то подобное. Учитывая то, что вы хотите, чтобы вызвать следующую функцию:

function scanSuccessCallback(result) { //do something }

на родной стороне в плагине:

this.webView.sendJavascript("scanSuccessCallback('the result');");

Смежные вопросы