2016-07-15 10 views
1

Ich habe ein Cordova-Plugin, die einen Barcode scannt, mit einem Dienst namens "com.hyipc.core.service.barcode.BarcodeService2D". Dies geschieht durch Registrierung eines Empfängers mit Broadcast Receiver.Verwenden Sie callbackContext in BroadcastReceiver

Der Scan-Vorgang wird erfolgreich ausgeführt, aber ich möchte das Scan-Ergebnis an meine cordova-App zurücksenden, was ich mit callbackContext.success(strBarcode) gemacht habe. Das Problem ist, dass ich das nicht in meiner BarcodeReceiverClass verwenden kann. Gibt es eine Möglichkeit, Daten von innerhalb onReceive zurück zu meiner App zu senden?

public class Scanner extends CordovaPlugin { 

    private BroadcastReceiver mReceiver = new BarcodeReceiver(); 
    private Intent intentService = new Intent("com.hyipc.core.service.barcode.BarcodeService2D"); 
    public static final String ACTION_BARCODE_SERVICE_BROADCAST = "action_barcode_broadcast"; 
    public static final String KEY_BARCODE_STR = "key_barcode_string"; 
    private String strBarcode = ""; 

    @Override 
    public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException { 

     if (action.equals("scan")) { 
      scan(); 
      return true; 
     } else { 
      return false; 
    } 
} 

    public void scan() { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(ACTION_BARCODE_SERVICE_BROADCAST); 

     cordova.getActivity().startService(intentService); 
     cordova.getActivity().registerReceiver(mReceiver, filter); 
    } 

    public class BarcodeReceiver extends BroadcastReceiver { 
     public void onReceive(Context ctx, Intent intent) { 
      if (intent.getAction().equals(ACTION_BARCODE_SERVICE_BROADCAST)) { 
       strBarcode = intent.getExtras().getString(KEY_BARCODE_STR); 
       callbackContext.success(strBarcode); 
      } 
     } 
    } 
} 

Antwort

3

Sie müssen den Rückruf Kontextparameter Sie BarcodeReceiver Klasse weitergeben müssen:

public class Scanner extends CordovaPlugin { 
    .... 
    private BroadcastReceiver mReceiver = null; 

    @Override 
    public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException { 
     .... 
     mReceiver = new BarcodeReceiver(callbackContext); 
     .... 
    } 
    .... 
} 

public class BarcodeReceiver extends BroadcastReceiver { 

    private CallbackContext callbackContext; 

    public BarcodeReceiver (CallbackContext callbackContext) { 
     this.callbackContext = callbackContext; 
    } 

    public void onReceive(Context ctx, Intent intent) { 
     if (intent.getAction().equals(ACTION_BARCODE_SERVICE_BROADCAST)) { 
      strBarcode = intent.getExtras().getString(KEY_BARCODE_STR); 
      callbackContext.success(strBarcode); 
     } 
    } 
} 
+0

ich einen Fehler Build erhalten: illegal Beginn des Ausdrucks privaten BroadcastReceiver mReceiver = new BarcodeReceiver (Callbackcontext); –

+0

Sorry, überprüfen Sie meine Bearbeitung in Code, der Geltungsbereich ist send Parameter callbackContext zu BarcodeReceiver-Klasse. Um das zu machen, müssen Sie dies im Konstruktor von BarcodeReceiver hinzufügen und dann übergeben, wenn diese Klasse aus der CordovaPlugin-Kindklasse instanziiert wird. – Frix33

+0

Ja, jetzt funktioniert es, danke. Ich werde Ihr Kopfgeld in 21 Stunden vergeben (stackoverflow lässt es mich bis dahin nicht tun) –

Verwandte Themen