PluginRegistry.ActivityResultListener: не получается результат - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать пакет MyBarcodeScanning для Flutter, используя собственный код Android, написанный на Java.Мой пакет не работает должным образом, потому что из класса MyBarcodeScannerPlugin запускается Activity, и когда он заканчивается (например, когда пользователь запрещает разрешение), родительский объект не запускает ActivityResultListener.

вот код родительского MyBarcodeScannerPlugin ...

public class MyBarcodeScannerPlugin implements MethodCallHandler, PluginRegistry.ActivityResultListener {
  /** Plugin registration. */
  private final Activity activity;
  private Result result;

  public static void registerWith(Registrar registrar) {
    final MethodChannel channel = new MethodChannel(registrar.messenger(),    "my_barcode_scanner");

    final MyBarcodeScannerPlugin plugin = new MyBarcodeScannerPlugin(registrar.activity());

    channel.setMethodCallHandler(plugin);
    registrar.addActivityResultListener(plugin);
  }

  private MyBarcodeScannerPlugin(Activity activity) {
    this.activity = activity;
  }


  @Override
  public void onMethodCall(MethodCall call, Result result) {

    if (call.method.equals("scan")) {
      this.result = result;
      showBarcodeView(activity);
    } else {
      result.notImplemented();
    }
  }

  private void showBarcodeView(Activity activity) {
    Intent intent = new Intent(activity, MyBarcodeScannerActivity.class);
    activity.startActivityForResult(intent, 100);
  }

  @Override
  public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
    // IT DOES NOT FIRE !
    if (requestCode == 100) {
      if (resultCode == Activity.RESULT_OK) {
        this.result.success("");
      } else {
        String errorCode = data.getStringExtra("ERROR_CODE");
        this.result.error(errorCode, null, null);
      }
      return true;
    }
    return false;
  }
}

А вот дочернее действие, которое заканчивается, когда пользователь запрещает разрешение ...

public class MyBarcodeScannerActivity extends AppCompatActivity {
    ...
    ...
    private void finishWithError(String errorCode) {
        Intent intent = new Intent();
        intent.putExtra("ERROR_CODE", errorCode);
        setResult(Activity.RESULT_CANCELED, intent);
        finish();
    }
    ...
    public void onRequestPermissionsResult(int requestCode, String 
permissions[], int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CAMERA:
                if (grantResults.length > 0) {
                    boolean cameraAccepted = grantResults[0] == 
PackageManager.PERMISSION_GRANTED;
                    if (cameraAccepted){
                    }else {
                        finishWithError("PERMISSION_NOT_GRANTED");
                    }
                }
                break;
        }
    }
}
...