2
respostas

Duvida sobre o plugin BarcodeScanner e o thread

Gostaria de tirar a duvida como posso colocar o plugin BarcodeScanner em background?

Porque quando executo no Xcode aparece essa mensagem:

[984:147062] THREAD WARNING: ['BarcodeScanner'] took '63.757080' ms. Plugin should use a background thread.

E encaminhei o apk para um colega meu que tem android e ele informou que a camera esta lento, levando a crer que possa ser um problema de thread.

Pesquisei na internet mas não encontrei uma resposta satisfatória para essa duvida então gostaria de saber o que posso fazer para corrigir esse erro?

PS. Para o iOS10 já fiz o comando solicitado para a descrição no arquivo info.

cordova plugin add phonegap-plugin-barcodescanner --variable CAMERA_USAGE_DESCRIPTION="To scan barcodes"
2 respostas

Fellipe, tudo bem ?

Pelo que vi em vários fóruns e a galera da comunidade a melhor forma e mais usada é essa : https://stackoverflow.com/questions/22382260/how-to-run-cordova-plugins-in-the-background

Obrigado! Mas sou meio leigo no assunto, tipo no Xcode tenho o arquivo CDVBarcodeScanner.mm e tenho a função:

- (void)scan:(CDVInvokedUrlCommand*)command {
    CDVbcsProcessor* processor;
    NSString*       callback;
    NSString*       capabilityError;

    callback = command.callbackId;

    NSDictionary* options;
    if (command.arguments.count == 0) {
      options = [NSDictionary dictionary];
    } else {
      options = command.arguments[0];
    }

    BOOL preferFrontCamera = [options[@"preferFrontCamera"] boolValue];
    BOOL showFlipCameraButton = [options[@"showFlipCameraButton"] boolValue];
    BOOL showTorchButton = [options[@"showTorchButton"] boolValue];
    BOOL disableAnimations = [options[@"disableAnimations"] boolValue];
    BOOL disableSuccessBeep = [options[@"disableSuccessBeep"] boolValue];

    // We allow the user to define an alternate xib file for loading the overlay.
    NSString *overlayXib = options[@"overlayXib"];

    capabilityError = [self isScanNotPossible];
    if (capabilityError) {
        [self returnError:capabilityError callback:callback];
        return;
    } else if ([self notHasPermission]) {
        NSString * error = NSLocalizedString(@"Access to the camera has been prohibited; please enable it in the Settings app to continue.",nil);
        [self returnError:error callback:callback];
        return;
    }

    processor = [[[CDVbcsProcessor alloc]
                initWithPlugin:self
                      callback:callback
          parentViewController:self.viewController
            alterateOverlayXib:overlayXib
            ] autorelease];
    // queue [processor scanBarcode] to run on the event loop

    if (preferFrontCamera) {
      processor.isFrontCamera = true;
    }

    if (showFlipCameraButton) {
      processor.isShowFlipCameraButton = true;
    }

    if (showTorchButton) {
      processor.isShowTorchButton = true;
    }

    processor.isSuccessBeepEnabled = !disableSuccessBeep;

    processor.isTransitionAnimated = !disableAnimations;

    processor.formats = options[@"formats"];

    [processor performSelector:@selector(scanBarcode) withObject:nil afterDelay:0];
}

Dentro da estrutura do -(void) scan colocaria o [self.commandDelegate runInBackground:^{ ...?