0

私はウェブビューでアプリを開発しています。fileupload 要素があり、アプリで「openfilechooser」メソッドで AlertDialog を表示して「カメラ」または「ギャラリー」を選択できるようにしています。私がやっていることは次のとおりです:

-fileupload 要素をタップします
-AlertDialog がポップアップして、「カメラ」または「ギャラリー」の選択を読み上げます -
気が変わって、ファイルの選択をあきらめ、「Android の戻るボタン」をクリックします

戻るボタンをクリックすると、すべての JavaScript が停止し、ページが応答しなくなります。

JavaScriptが停止する理由はありますか? 前もって感謝します

4

2 に答える 2

0

いくつかのトリックを試し、最終的に解決策を見つけました。

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;
于 2013-09-25T14:39:05.613 に答える