마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Webview 파일업로드 관련 질문(갤러리와 카메라 앱 동시 보이기)

0 추천
Webview의 <input type="file>파일 올리기 버튼 클릭 시
처음 실행할 때는 갤러리(이미 찍은 사진 보는)와 카메라 앱 동시에 보였는데.. 어느 순간부터 갤러리만 보입니다.
중간에 수정을 많이 해서 뭐가 달라졌는지 알 수가 없네요. 웹뷰에서 파일올리기 버튼 누를 때 갤러리와 카메라 앱 동시에 볼 수 있는 방법이 없을까요?
 

// For Android 3.0+
        public void openFileChooser(ValueCallback<Uri> uploadMsg,String acceptType)
        {
            Log.d("D", "openFileChooser: acceptType " + acceptType);
            Toast.makeText(MainActivity.this, acceptType, 0).show();
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);

        }

 

동시사랑 (240 포인트) 님이 2014년 2월 13일 질문

3개의 답변

+1 추천
웹뷰에서 파일 올리기 버튼을 눌렀을 때 갤러리와 카메라 앱 중 하나를 선택하는 팝업창이 뜨는 것을 구현하고 싶으신거죠?

 

 아래 링크에서 맨 마지막 답변을 참고하세요.

 

http://stackoverflow.com/questions/11724129/android-webview-file-upload
방귀과장 (18,940 포인트) 님이 2014년 2월 14일 답변
AlertDialog를 이용해 보라는 말씀이지요? 한번 해 보겠습니다.
잘 되네요. 감사해요^^
0 추천

Intent 정보를 

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
 
로 바꿔보세요.
코딩인헬 (12,150 포인트) 님이 2014년 2월 14일 답변
제 폰이 LG-LU6200인데 제폰에서는 안되네요. '작업을 수행할 수 있는 애플리케이션이 없습니다'라는 메시지가 뜨네요.
저도 마침 같은 이슈가 생겨 수정을 해야 했습니다. ^^
아래 소스 참고하세요.

Intent pickIntent = new Intent(Intent.ACTION_PICK);
            pickIntent.setType(Images.Media.CONTENT_TYPE);
            pickIntent.setData(Images.Media.EXTERNAL_CONTENT_URI);
           
            Intent takePhotoIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
           
            try {
                FileOutputStream fos = getActivity().openFileOutput(IMG_FILE_NAME, Context.MODE_WORLD_WRITEABLE);
                // 파일 출력 스트림을 닫는다.
                fos.close();

                // 어플리케이션의 고유영역 경로를 File 객체로 얻는다.
                File path = getActivity().getFilesDir();
                // 고유영역에 있는 test_picture.jpg 파일의 객체를 얻는다.
                File file = new File(path, IMG_FILE_NAME);
                
                // File 객체의 URI 를 얻는다.
                imageUri = Uri.fromFile(file);
            } catch (IOException ie) {
                // 파일 입출력에 관한 예외 발생시 예외사항을 출력한다.
            }
           
            
            takePhotoIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
                    imageUri);
           
            String pickTitle = "Select file or take a new Picture";
           
            Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle);
            chooserIntent.putExtra ( Intent.EXTRA_INITIAL_INTENTS, new Intent[] { takePhotoIntent });
            startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
0 추천
// For Android 3.0+
        public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType) {
            mUploadMessage = uploadFile;
            
            showAlertDialog1(); 
            
        }
    private void showAlertDialog1() {
        AlertDialog.Builder alert = new AlertDialog.Builder(this);
 
        alert.setTitle("선택");
 
        final CharSequence[] items = {"Photo", "Gallery"};
        alert.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
 
                dialog.dismiss();
                if( whichButton == 0)
                {
                    Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    File photo = new File(Environment.getExternalStorageDirectory(),  "Pic.jpg");
                    chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
                    mCapturedImageURI = Uri.fromFile(photo);
                    Log.d("DDDD","mCapturedImageURI : " + mCapturedImageURI);
                    startActivityForResult(chooserIntent, CAMERAREQUEST_RESULTCODE);
 
                }
                if( whichButton == 1)
                {
                    Intent chooserIntent = new Intent(Intent.ACTION_GET_CONTENT);
                    chooserIntent.setType("image/*");
                    startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
                }
            }
        });
        alert.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
 
            //here we have to handle BACK button/cancel 
                if ( mUploadMessage!= null ){
                    mUploadMessage.onReceiveValue(null);
                }
                mUploadMessage = null;
                dialog.dismiss();
            }
        });
        alert.create().show();
    }
동시사랑 (240 포인트) 님이 2014년 2월 15일 답변
Webview 업로드 하기 전 이미지를 줄이고 싶은데요.
...