2015-04-08 2 views
2

Я пытаюсь загрузить файл в приложение webview с помощью намерения ACTION_SEND. У меня уже есть работа, если они хотят загрузить файл, когда он находится внутри приложения, используя openFileChooser, но мне нужно, чтобы он работал, когда они щелкают, например, из документов или приложений галереи. Итак, мне очень нужно BYPASS openFileChooser, потому что файл, который уже выбран, и это Uri находится внутри моего намерения, мне просто нужно его загрузить. Я хотел бы отбросить путь openFileChooser, но не знаю, как это сделать.Как загрузить файл в веб-просмотр через намерение ACTION_SEND

Я думаю, что мое самое большое препятствие не знает, как получить/создать/проигнорировать ValueCallback uploadMsg, если, конечно, не существует способа избежать этого полностью.

Вот мое намерение и openFileChooser, но мне нужно обойти, что при получении от намерения поэтому у меня есть

intent = getActivity().getIntent(); 
    if(intent != null){ 
     intentAction = intent.getAction(); 
     if(!TextUtils.isEmpty(intentAction)){ 
      if(intentAction.equalsIgnoreCase(Intent.ACTION_SEND)){ 
       if(intent.getExtras()!=null){ 
        //get file from extra and piggyback off upload handler used in openFileChooser 
       } 
      } 
     } 

и мой openFileChooser, который работает отлично, с пользовательским вводом, но мне нужно, чтобы быть в состоянии сделать это без вмешательства пользователя при получении от намерения

WebChromeClient chromeClient = new WebChromeClient() { 
     @Override 
     public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, 
            String capture) { 
       mUploadHandler = new UploadHandler(WebFragment.this); 
       mUploadHandler.openFileChooser(uploadMsg, acceptType, capture); 
     } 

поэтому мне нужно каким-то образом получить действительный ValueCallback Uri, чтобы установить в качестве сообщения загрузки для создания openFileChooser так, что когда я делаю mUploadMessage.onReceiveValue (результат) (взято из пакета webkit google) здесь

void onResult(int resultCode, Intent intent) { 

    if (resultCode == Activity.RESULT_CANCELED && mCaughtActivityNotFoundException) { 
     mCaughtActivityNotFoundException = false; 
     return; 
    } 

    Uri result = intent == null || resultCode != Activity.RESULT_OK ? null 
      : intent.getData(); 
    if (result == null && intent == null && resultCode == Activity.RESULT_OK) { 
     File cameraFile = new File(mCameraFilePath); 
     if (cameraFile.exists()) { 
      result = Uri.fromFile(cameraFile); 
      mController.getActivity().sendBroadcast(
        new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result)); 
     } 
    } 

    mUploadMessage.onReceiveValue(result); 
    mHandled = true; 
    mCaughtActivityNotFoundException = false; 
} 

Так, Короче говоря, мне нужен действительный ValueCallback<Uri>, чтобы контрейлерных прочь Android/WebKit в onReceiveValue (результат) обработчика загрузки/WebView, и я не знаю, как получить его без пользовательского ввода откройте загрузку с устройства.

+0

Если вы добавите код на свой вопрос, вам будет легче помочь. – Philip

+0

Хорошо, я отредактировал комментарий. Дайте мне знать, если у вас есть идеи. –

ответ

0

Как говорится в первом комментарии к вашему вопросу, больше кода поможет диагностировать это, но общий способ получения ACTION_SEND заключается в следующем.

Настройте ACTION_SEND как Intent Filter в Android Manifest для вашей деятельности.

<application> 
... 
    <activity> 
    ... 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" />  
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 

Вы можете дополнительно установить ряд <data android:mimeType=XXX> элементов, если вы хотите принимать только определенные типы файлов.

Затем в вашей деятельности вы можете использовать методы getIntent() и Intent.getData() для обработки входящего намерения отправки.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent intent = getIntent(); 
    Uri sharedFile = intent.getData(); 
    // We can now use the URI of the file/item in 
    // the WebView. Probably want to do this after onCreate 
    // so that the WebView has fully initialised. 
} 
Смежные вопросы