Я попробовал несколько трюков и, наконец, нашли решение.
Элемент FileUpload нуждается в «ValueCallback» после всех этих вызовов методов. Так что «onActivityResult» должен вернуть результат элементу загрузки файла. Но метод «onActivityResult» не может быть вызван, когда пользователь отменяет диалог предупреждения. Это приводит к тому, что элемент fileupload генерирует ошибку.
Я добавил «setOnCancelListener» к моему оповещения диалога, как это:
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
})
Вы должны вернуть по крайней мере, «нулевой» для элемента загрузки файла, чтобы сохранить работу. В противном случае файловые киоски, и это заставляет все javascript останавливаться.
я поймала еще один случай, который делает FileUpload стойло:
- отводы пользователя на FileUpload элемент
- ВЫБИРАЕТ выбор (Cam или Galller не имеет значения)
- Cam или галерея показывает, и пользователь нажимает «Назад Кнопка»
Это возвращает RESULT_CANCELED код к методу «onActivityResult», и вы должны справиться с этим, как это:
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
try {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK
&& intent != null)
mUploadMessage.onReceiveValue(intent.getData());
else
mUploadMessage.onReceiveValue(null);
} catch (Exception e) {
Log.e("Error", e.getLocalizedMessage());
mUploadMessage.onReceiveValue(null);
} finally {
mUploadMessage = null;
}
}
mUploadMessage является защиту ined следующим образом:
private ValueCallback<Uri> mUploadMessage;