webviewで画像アップロード

1,346 views
Skip to first unread message

星祐介

unread,
Nov 5, 2015, 10:48:55 PM11/5/15
to 日本Androidの会
よろしくお願いいたします。

現在、Androidアプリでwebviewでアプリを公開しておりますが

htmlの

<input type="file" name="hoge" />

がandroidバージョン4.4.2のみ反応しません。
ボタンを押しても何も反応しない状態になります。
それ以外のバージョンは画像ライブラリが立ち上がる状態です。

アプリのソースは下記になっています。


ここにコードをweb.setWebChromeClient(new WebChromeClient() {                                                                                                                                                                                                                                                                                                                 
               // /Android 4.1以上                                                                                                                                                                                                                                                                                                                                        
               public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {                                                                                                                                                                                                                                                             
                   Log.d("ms","アンドロイド画像アップスタート");                                                                                                                                                                                                                                                                                                          
                   Log.d("ms","uploadMsg : "+uploadMsg);                                                                                                                                                                                                                                                                                                                  
                   mUploadMessage = uploadMsg;                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                          
                   if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT){                                                                                                                                                                                                                                                                                               
                       Log.d("ms","Android 4.4未満");                                                                                                                                                                                                                                                                                                                     
                       Intent i = new Intent(Intent.ACTION_PICK,                                                                                                                                                                                                                                                                                                          
                           android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);                                                                                                                                                                                                                                                                                
                       i.setAction(Intent.ACTION_GET_CONTENT);                                                                                                                                                                                                                                                                                                            
                       i.addCategory(Intent.CATEGORY_OPENABLE);                                                                                                                                                                                                                                                                                                           
                       i.setType("image/*");                                                                                                                                                                                                                                                                                                                              
                       startActivityForResult(i, FILECHOOSER_RESULTCODE);                                                                                                                                                                                                                                                                                                 
                   } else {                                                                                                                                                                                                                                                                                                                                               
                       Log.d("ms","Android 4.4以上");                                                                                                                                                                                                                                                                                                                     
                       Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT,                                                                                                                                                                                                                                                                                                 
                           android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);                                                                                                                                                                                                                                                                                
                       i.addCategory(Intent.CATEGORY_OPENABLE);                                                                                                                                                                                                                                                                                                           
                       i.setType("image/*");                                                                                                                                                                                                                                                                                                                              
                       startActivityForResult(i, FILECHOOSER_RESULTCODE);                                                                                                                                                                                                                                                                                                 
                   }                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                          
               }                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                        
               // Android 3.0以上                                                                                                                                                                                                                                                                                                                                         
               public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {                                                                                                                                                                                                                                                                             
                   Log.d("ms","Android 3.0以上");                                                                                                                                                                                                                                                                                                                         
                   //startActivityForResult(Intent.createChooser(i, "画像選択"), FILECHOOSER_RESULTCODE);                                                                                                                                                                                                                                                                 
                  openFileChooser( uploadMsg, acceptType ,"");                                                                                                                                                                                                                                                                                                            
               }                                                                                                                                                                                                                                                                                                                                                          
               // Android 3.0未満                                                                                                                                                                                                                                                                                                                                         
               public void openFileChooser(ValueCallback<Uri> uploadMsg) {                                                                                                                                                                                                                                                                                                
                   Log.d("ms","Android 3.0未満");                                                                                                                                                                                                                                                                                                                         
                   openFileChooser(uploadMsg, "", "");                                                                                                                                                                                                                                                                                                                    
               }                                                                                                                                                                                                                                                                                                                                                          
           }); 

入力...

inputを押した際のログには下記のようになります。

I/chromium﹕ [INFO:aw_web_contents_delegate.cc(218)] File Chooser result: mode = 0, file paths 


上記のログは4.4.2のxpediaでは出ますがGalaxyでは出ません。
ただ、動作としては両方、無反応です。

SDKのバージョンは21です。

ご教授頂ければ幸いです。

よろしくお願いいたします。

yuuki tsuji

unread,
Dec 9, 2015, 10:48:55 PM12/9/15
to 日本Androidの会
同様につまずきました。

ググると4.4 KITKAT 19(のみ)は、このやり方、onFileChooser()は対応していないようです。(えって感じですが)

なので、Nativeで作るなど別の方法で実現する必要があります。
なお、5.0からは、onShowFileChooser()関数で、できるようになりました。

2015年11月6日金曜日 12時48分55秒 UTC+9 星祐介:

noxi

unread,
Dec 9, 2015, 11:59:36 PM12/9/15
to android-g...@googlegroups.com
noxiです。

最近Qiitaにそんな記事が上がっていたので参考までに。
http://qiita.com/futabooo/items/4706a0767c8ed2330752

2015年12月10日 12:13 yuuki tsuji <apps.yuu...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> android-group-j...@googlegroups.com にメールを送信してください。
> このグループに投稿するには android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
Reply all
Reply to author
Forward
0 new messages