いくつかのトリックを試し、最終的に解決策を見つけました。
FileUpload 要素には、これらすべてのメソッド呼び出しの後に「ValueCallback」が必要です。そのため、「onActivityResult」は結果を fileupload 要素に返す必要があります。ただし、ユーザーが警告ダイアログをキャンセルした場合、「onActivityResult」メソッドを呼び出すことはできません。これにより、fileupload 要素でエラーが生成されます。
次のようにアラート ダイアログに「setOnCancelListener」を追加しました。
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
})
動作を継続するには、ファイル アップロード要素に少なくとも「null」を返す必要があります。そうしないと、ファイルのアップロードが停止し、これによりすべての JavaScript が停止します。
fileupload が停止する別のケースも見つけました:
- ユーザーが fileupload 要素をタップします
- 選択肢を選択します (Cam または Galler は関係ありません)
- Cam または Gallery が表示され、ユーザーが「戻るボタン」を押し
ます これは 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 は次のように定義されます。
private ValueCallback<Uri> mUploadMessage;