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

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

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

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

3538閲覧

android webView側のinput type="file"でファイルアップロードをkotlinで実装したい

JJ_Naga

総合スコア0

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/07/01 11:24

前提・実現したいこと

お世話になります。
android kotlin 初心者です。
webサイト側で実装ずみのinput type="file"で写真画像をUPしたいのですが
inputタグが反応しません。
kotlinで実装したいです。
javaコードを参照してみましたが、エラーが取れきれません。
kotlinで実装された方、ご教授ください。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

kotlin

package jp.hogehoge.fileup

import android.os.Bundle
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity

class WebSite : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_web_site)

val myWebView: WebView = findViewById(R.id.webSiteView) myWebView.webViewClient = WebViewClient() myWebView.loadUrl("https://mySiteUrl.jp/login") myWebView.settings.javaScriptEnabled = true val goBackMainButton = findViewById(R.id.goBackMainBtn) as Button goBackMainButton.setOnClickListener { finish() } }

}

試したこと

https://teratail.com/questions/196998
など参照いたしました。
いろいろ試しすぎて収集つかなくなりました。
初期のコード(遷移するだけ)から追記したいです。
よろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

hoshi-takanori

2021/07/06 01:17

Java コードを .kt ファイルに貼り付ければ、Android Studio が Kotlin に変換してくれると思いますが、どの辺でエラーが出ますか?
JJ_Naga

2021/07/07 09:04

ありがとうございます。 古いコードが多いのでしょうか。どれも1、2個エラーが残ります。 Cannot resolve symbol Create class など。 現状、kotlinで記載されたコードがあったので組み込みましたが、そのままではWebViewが空になり別ブラウザが起動してました。ブラウザを起動しないよう対応してアップロード可能となりましたが、1ファイルしか選択できません。今、複数ファイル対応のコードを探しています。
guest

回答1

0

javaからKotlinに変換されたコードを見つけ組み込みました。
WebViewでUploadは可能ですが、1ファイルしか選択できません。
どなたか、複数ファイル対応の方法をご存知ないでしょうか。
よろしくお願い致します。

package jp.hogehoge.test import android.content.ActivityNotFoundException import android.content.Intent import android.net.Uri import android.os.Build import android.os.Bundle import android.util.Log import android.webkit.* import android.widget.Button import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity private var mUploadMessage: ValueCallback<Uri>? = null var uploadMessage:ValueCallback<Array<Uri>>? = null val REQUEST_SELECT_FILE = 100 val FILECHOOSER_RESULTCODE = 1 class WebSite : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_web_site) val myWebView: WebView = findViewById(R.id.webSiteView) myWebView?.webChromeClient = object:WebChromeClient() { override fun onJsAlert(view: WebView, url: String, message: String, result: JsResult): Boolean { Log.d("alert", message) val dialogBuilder = AlertDialog.Builder(this@WebSite) dialogBuilder.setMessage(message) .setCancelable(false) .setPositiveButton("OK") { _, _ -> result.confirm() } val alert = dialogBuilder.create() alert.show() return true } // For 3.0+ Devices (Start) // onActivityResult attached before constructor fun openFileChooser(uploadMsg : ValueCallback<Uri>, acceptType:String) { mUploadMessage = uploadMsg val i = Intent(Intent.ACTION_GET_CONTENT) i.addCategory(Intent.CATEGORY_OPENABLE) i.type = "image/jpeg" startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE) } // For Lollipop 5.0+ Devices override fun onShowFileChooser(mWebView:WebView, filePathCallback:ValueCallback<Array<Uri>>, fileChooserParams:WebChromeClient.FileChooserParams):Boolean { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ if (uploadMessage != null) { uploadMessage?.onReceiveValue(null) uploadMessage = null } uploadMessage = filePathCallback val intent = fileChooserParams.createIntent() try { startActivityForResult(intent, REQUEST_SELECT_FILE) } catch (e: ActivityNotFoundException) { uploadMessage = null Toast.makeText(getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show() return false } return true }else{ return false } } //For Android 4.1 only fun openFileChooser(uploadMsg:ValueCallback<Uri>, acceptType:String, capture:String) { mUploadMessage = uploadMsg val intent = Intent(Intent.ACTION_GET_CONTENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.type = "image/jpeg" startActivityForResult(Intent.createChooser(intent, "File Browser"), FILECHOOSER_RESULTCODE) } fun openFileChooser(uploadMsg:ValueCallback<Uri>) { //filePermission() mUploadMessage = uploadMsg val i = Intent(Intent.ACTION_GET_CONTENT) i.addCategory(Intent.CATEGORY_OPENABLE) i.type = "image/jpeg" startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE) } } // これがないとwebView内でなくブラウザが起動してしまう myWebView.setWebViewClient(object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { return false } }) myWebView.loadUrl("https://hogehoge.jp/login") myWebView.settings.javaScriptEnabled = true val goBackMainButton = findViewById(R.id.goBackMainBtn) as Button goBackMainButton.setOnClickListener { finish() } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (requestCode == REQUEST_SELECT_FILE) { if (uploadMessage != null) { uploadMessage?.onReceiveValue( WebChromeClient.FileChooserParams.parseResult( resultCode, data ) ) uploadMessage = null } } } else if (requestCode == FILECHOOSER_RESULTCODE) { if (mUploadMessage != null) { var result = data?.data mUploadMessage?.onReceiveValue(result) mUploadMessage = null } } else { Toast.makeText( this, "Failed to open file uploader, please check app permissions.", Toast.LENGTH_LONG ).show() super.onActivityResult(requestCode, resultCode, data) } } }

投稿2021/07/07 09:12

JJ_Naga

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問