質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1797閲覧

AndroidStudio バージョン4.4.4 WebView input type=file で一度しか判定してくれない

ludolf

総合スコア39

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/11/15 09:46

いつもお世話になっております。

早速ですがWebViewのアプリを作成しておりますが、バージョン4.4.4のタブレットで、input type=fileに画像をアップロードしようとしたところ一度しか呼ばれない、かつ画像が反映されない不具合が発生しています。
色々調べたところ下記のURLでGoogleが対応していないという記事を見つけました。

URL:https://sakura-bird1.hatenablog.com/entry/2016/06/23/234306

この記事ではJavaScriptInterfaceかChromiumエンジンを使用して対応できると書いてあるのですが、自分の場合一度は選択できるので一度選択したら二度は入らないみたいなプログラムになっているのかなと感じています。
もしそうだった場合上記以外のやり方でやりたいと思っております、(工程が長いため)

上記のやり方も試していない状況でお聞きするのは失礼だとは存じますが、既存のやり方でできる方法はありますでしょうか?

下記コードはinput file で開かれる処理です。
足りなければ追記いたします。

private ValueCallback<Uri> mUploadMessage; private final static int FILECHOOSER_RESULTCODE=1;     //バージョン5以上対象 public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { //カメラ・ストレージの許可が取れていない場合中に入る if (PermissionChecker.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && PermissionChecker.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { //mFilePathCallback if (mFilePathCallback != null) { mFilePathCallback.onReceiveValue(null); } mFilePathCallback = filePathCallback; mCameraPhotoPath = null; Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { //プライマリ共有/外部ストレージの宣言 String filename = Environment.getExternalStorageDirectory() + "/dummy.jpg"; //デファルトの初期サイズを宣言 ContentValues values = new ContentValues(); //valueに値をセット values.put(MediaStore.Images.Media.TITLE, filename); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); Uri uri = getActivity().getApplicationContext().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); UriList.add(uri); // INIファイルにURIリストの情報を書き込む for (int i = 0; i < UriList.size(); i++) { editor.putString("uri" + i, UriList.get(i).toString()); } editor.putInt("count", UriList.size()); editor.apply(); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); mCameraPhotoPath = uri.toString(); } Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); contentSelectionIntent.setType("image/*"); contentSelectionIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); Intent[] intentArray; if (takePictureIntent != null) { intentArray = new Intent[]{takePictureIntent}; } else { intentArray = new Intent[0]; } chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); chooserIntent.putExtra(Intent.EXTRA_TITLE, "画像ファイルを選択"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE); return true; } else { //メソッド パーミッションチェック読み込み permissionCheck(); return false; } } // For Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg) { Log.d("","入りました! ver 3"); mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); WebagreView.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FILECHOOSER_RESULTCODE); } // For Android 3.0+ public void openFileChooser( ValueCallback uploadMsg, String acceptType ) { Log.d("","入りました! ver 3+"); mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("*/*"); WebagreView.this.startActivityForResult( Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); } <!--タブレット4.4.4で入っている箇所--> //For Android 4.1 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){ Log.d("","入りました! ver 4.1"); mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); //送付するタイプは画像 i.setType("image/*"); WebagreView.this.startActivityForResult( Intent.createChooser( i, "ファイル選択が間違っています。" ), WebagreView.FILECHOOSER_RESULTCODE ); }
//カメラ・ストレージ表示 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d("","requestCode" + requestCode); Log.d("","resultCode" + resultCode); Log.d("","INPUT_FILE_REQUEST_CODE" + INPUT_FILE_REQUEST_CODE); Log.d("","mFilePathCallback" + mFilePathCallback); if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) { super.onActivityResult(requestCode, resultCode, data); return; } Uri[] results = null; //4.4.4のタブレットが入るところ if(requestCode==FILECHOOSER_RESULTCODE) { if (null == mUploadMessage) return; Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; } if (resultCode == RESULT_OK) { if (data == null) { if (mCameraPhotoPath != null) { // カメラ results = new Uri[]{Uri.parse(mCameraPhotoPath)}; } } else { String dataString = data.getDataString(); if (dataString != null) { // 単一選択 results = new Uri[]{Uri.parse(dataString)}; } else { ClipData clipData = data.getClipData(); if (clipData == null) { // カメラ results = new Uri[]{Uri.parse(mCameraPhotoPath)}; } else { // 複数選択 results = new Uri[clipData.getItemCount()]; for (int i = 0; i < clipData.getItemCount(); i++) { results[i] = clipData.getItemAt(i).getUri(); } } } } } mFilePathCallback.onReceiveValue(results); mFilePathCallback = null; return; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

この投稿をみて回答してくださろうとしてくださった皆様申し訳ございません、、
色々試行錯誤して入れていた変数が邪魔をしていたみたいで、Version5以上のやり方をそのまま4.4.4のところに記述したら動きました、、
大変失礼いたしました。
次もよろしくお願いいたします!

投稿2019/11/18 04:21

ludolf

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問