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

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

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

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

Android

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

1回答

6234閲覧

AndroidでのWebviewでinput type="file"が受け取れない(Unity/AngularJS)

sakura_hana

総合スコア11427

Java

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

Android

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2016/03/29 09:49

編集2016/03/29 14:30

GreeのWebViewプラグインを利用し、Unity内でWebViewを実装しています。
https://github.com/gree/unity-webview

通常のWEBページの表示は正常に行われているのですが、input type=“file”が動作しません。
AndroidのWebViewではinput fileが動作しないとのことで、色々なサイトを見ながらカスタマイズを行ってみたのですが、どうしても上手くいきません。どなたかお力をお貸しして頂けないでしょうか。

■動作環境
・Unity 5.3
・Android Studio 1.5.1
・サーバーサイド:AngulerJS

■想定する動き
・inputボタン→画像管理アプリの選択→画像の選択
・選択画像はAngulerJSのdirectiveにより、そのままページ上に表示される
・送信ボタンを押すと選択画像がアップロードされる
※WebViewではなく各端末の標準ブラウザを使用した場合、上記が正常に行われることは確認しています。
※ちなみにiOS端末では、このカスタマイズ無しでも正常に動作しています。

■OS 4.2.2での動作
・inputボタン→画像管理アプリの選択→画像の選択:正常に可能
・選択された画像がページ上に表示されない
・送信ボタンを押すと選択画像がアップロードされる

■OS 4.4.4での動作
・inputボタン→画像管理アプリの選択→画像の選択:正常に可能
・選択された画像がページ上に表示されない
・送信ボタンを押しても選択画像がアップロードされない

なにとぞ宜しくお願い致します。

java

1//カスタマイズしたWebViewPlugin 2 3package net.gree.unitywebview; 4//一部省略 5public class WebViewPlugin 6{ 7//略 8 public void Init(final String gameObject) 9 { 10 final Activity a = UnityPlayer.currentActivity; 11 a.runOnUiThread(new Runnable() {public void run() { 12 a.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 13 a.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 14//略 15 /* 既存のメソッドをコメントアウト 16 mWebView.setWebChromeClient(new WebChromeClient() { 17 public boolean onConsoleMessage(android.webkit.ConsoleMessage cm) { 18 Log.d("Webview", cm.message()); 19 return true; 20 } 21 }); 22 */ 23 24//追記ここから 25 mWebView.setWebChromeClient(new WebChromeClient() { 26 // For Android < 3.0 27 public void openFileChooser(ValueCallback<Uri> uploadFile) { 28 openFileChooser(uploadFile, ""); 29 } 30 31 // For 3.0 <= Android < 4.1 32 public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType) { 33 openFileChooser(uploadFile, acceptType, ""); 34 } 35 36 // For 4.1 <= Android < 5.0 37 public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture) { 38 if(mUploadMessage != null){ 39 mUploadMessage.onReceiveValue(null); 40 } 41 mUploadMessage = uploadFile; 42 43 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 44 intent.addCategory(Intent.CATEGORY_OPENABLE); 45 intent.setType("image/*"); 46 47 a.startActivityForResult(intent, FILECHOOSER_RESULTCODE); 48 } 49 }); 50//追記ここまで 51//以下略 52 }); 53 } 54}

java

1//オーバーライドしたUnityPlayerActivity 2public class OverrideActivity extends UnityPlayerActivity { 3 private final static int FILECHOOSER_RESULTCODE = 1; 4 5 protected void onActivityResult(int requestCode, int resultCode,Intent intent) { 6 if (requestCode != FILECHOOSER_RESULTCODE) { 7 super.onActivityResult(requestCode, resultCode, intent); 8 return; 9 } 10/* どうしてもBuild.VERSION_CODES.LOLIPOPがcannot resolve symbolになるため、とりあえずコメントアウト中 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLIPOP) { 12 if (WebViewPlugin.mFilePathCallback == null) { 13 super.onActivityResult(requestCode, resultCode, intent); 14 return; 15 } 16 Uri[] results = null; 17 18 // Check that the response is a good one 19 if (resultCode == RESULT_OK) { 20 String dataString = intent.getDataString(); 21 if (dataString != null) { 22 results = new Uri[] { Uri.parse(dataString) }; 23 } 24 } 25 26 WebViewPlugin.mFilePathCallback.onReceiveValue(results); 27 WebViewPlugin.mFilePathCallback = null; 28 } else { 29 */ 30 if (WebViewPlugin.mUploadMessage == null) { 31 super.onActivityResult(requestCode, resultCode, intent); 32 return; 33 } 34 35 Uri result = null; 36 37 if (resultCode == RESULT_OK) { 38 if (intent != null) { 39 result = intent.getData(); 40 } 41 } 42 43 WebViewPlugin.mUploadMessage.onReceiveValue(result); 44 WebViewPlugin.mUploadMessage = null; 45 //} 46 } 47}

■3/29 23:25追記
あれから精査したところ、上記コードは正しく動作していたようで、WebView(HTML)によるfileの受け取りは成功していました。
ただ、file.nameは取得出来るものの、file.typeがnullになっています。
(このせいで以後の動作が行われていませんでした)
もう暫く調べてみますが、こちらについて対処方法をご存知の方がいらっしゃいましたら教えて頂けると助かります。

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

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

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

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

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

guest

回答1

0

確認ですReadme.mdより

Notes on Adnroid

Once you built an apk, please copy sample/Temp/StatingArea/AndroidManifest-main.xml to sample/Assets/Plugins/AndroidManifest.xml, edit the latter to add android:hardwareAccelerated="true" to <activity android:name="com.unity3d.player.UnityPlayerActivity" ..., and rebuilt the apk. Although some old/buggy devices may not work well with android:hardwareAccelerated="true", the webview runs very smoothly with this setting.

こちらは試されていますか?

Android実機が古いとだめなようですが
APIは何の実機を使ってのエラーでしょう

投稿2016/03/29 10:53

aja

総合スコア3733

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

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

sakura_hana

2016/03/29 11:14

ご指摘の設定は入っています。 Android StudioのProjectSDKは「Android API 19 Platform」、 端末はOS4.2.2(API17)、OS4.4.4(API19)です。 なお、WebViewのinput file以外の部分は改変前・改変後共に正常に動いています。
aja

2016/03/29 11:55

>端末はOS4.2.2(API17)、OS4.4.4(API19)です。 失礼しました。Android 4.2.2 と Android 4.4.4ですね >This is a well-known issue, unfortunately. Google deliberately disabled it in 4.2, and it's still broken as of 4.4 -- [Issue Tracker](https://code.google.com/p/android/issues/detail?id=62220) だそうですが、workaroundとしてはこちらを試してみてはどうでしょう [Stackoverflow](http://stackoverflow.com/questions/26101065/choose-file-to-upload-on-webview-android-kitkat-4-4-2) This is a well-known issue, unfortunately. Google deliberately disabled it in 4.2, and it's still broken as of 4.4 -- workaroundですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問