Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android web视图中的文件上载不工作_Android_File_Webview_Upload - Fatal编程技术网

Android web视图中的文件上载不工作

Android web视图中的文件上载不工作,android,file,webview,upload,Android,File,Webview,Upload,我正在尝试通过网络视图上传文件,但目前还没有,我正在查看,下面是我的 MainActivity.java package ...; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.webkit.ValueCallback; import android.webkit.WebChromeClien

我正在尝试通过网络视图上传文件,但目前还没有,我正在查看,下面是我的

MainActivity.java

package ...;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    private ValueCallback<Uri> mUploadMessage;
    private final static int FILECHOOSER_RESULTCODE = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView wv = (WebView) findViewById(R.id.webView);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.setWebViewClient(new WebViewClient());
        wv.setWebChromeClient(new WebChromeClient() {
            //The undocumented magic method override
            //Eclipse will swear at you if you try to put @Override here
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                MainActivity.this.showAttachmentDialog(uploadMsg);
            }

            // For Android > 3.x
            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
                MainActivity.this.showAttachmentDialog(uploadMsg);
            }

            // For Android > 4.1
            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
                MainActivity.this.showAttachmentDialog(uploadMsg);
            }
        });

        wv.loadUrl("http://www.tizag.com/phpT/fileupload.php");

    }

    private void showAttachmentDialog(ValueCallback<Uri> uploadMsg) {
        this.mUploadMessage = uploadMsg;

        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
        i.addCategory(Intent.CATEGORY_OPENABLE);
        i.setType("*/*");

        this.startActivityForResult(Intent.createChooser(i, "Choose type of attachment"), FILECHOOSER_RESULTCODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == FILECHOOSER_RESULTCODE) {
            if (null == this.mUploadMessage) {
                return;
            }
            Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
            this.mUploadMessage.onReceiveValue(result);
            this.mUploadMessage = null;
        }
    }
}
包。。。;
导入android.app.Activity;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.webkit.ValueCallback;
导入android.webkit.WebChromeClient;
导入android.webkit.WebView;
导入android.webkit.WebViewClient;
公共类MainActivity扩展了活动{
private ValueCallback mUploadMessage;
private final static int FILECHOOSER_RESULTCODE=1;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv=(WebView)findviewbyd(R.id.WebView);
wv.getSettings().setJavaScriptEnabled(true);
setWebViewClient(新的WebViewClient());
wv.setWebChromeClient(新WebChromeClient(){
//未记录的magic方法重写
//如果您试图在此处放置@Override,Eclipse将对您发牢骚
public void openFileChooser(ValueCallback uploadMsg){
MainActivity.this.showAttachmentDialog(uploadMsg);
}
//对于Android>3.x
public void openFileChooser(ValueCallback uploadMsg,String acceptType){
MainActivity.this.showAttachmentDialog(uploadMsg);
}
//对于Android>4.1
public void openFileChooser(ValueCallback uploadMsg、字符串接受类型、字符串捕获){
MainActivity.this.showAttachmentDialog(uploadMsg);
}
});
wv.loadUrl(“http://www.tizag.com/phpT/fileupload.php");
}
私有void showAttachmentDialog(ValueCallback uploadMsg){
this.mUploadMessage=uploadMsg;
意向i=新意向(意向.行动\u获取\u内容);
i、 addCategory(意图。类别可打开);
i、 集合类型(“*/*”);
this.startActivityForResult(Intent.createChooser(i,“选择附件类型”)、FILECHOOSER\u RESULTCODE);
}
@凌驾
ActivityResult上受保护的void(int-requestCode、int-resultCode、Intent-Intent){
if(requestCode==FILECHOOSER\u RESULTCODE){
if(null==this.mUploadMessage){
返回;
}
Uri result=intent==null | | resultCode!=result_OK?null:intent.getData();
此.mUploadMessage.onReceiveValue(结果);
this.mUploadMessage=null;
}
}
}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="....MainActivity">

    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webView"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>

和权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="...">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


</manifest>

如果您设置这3个文件并运行它,我已经将webview url设置为包含文件输入的页面,您将看到它不起作用。我使用的是API版本19+


我很快就要哭了。

所以我遇到了这个GIT回购协议,我认为它会有帮助-

请看“输入文件示例”

我在Build.Gradle上遇到了问题,并在这里找到了解决方案-


希望这有帮助

所以我发现了这个GIT回购协议,我认为它将有助于-

请看“输入文件示例”

我在Build.Gradle上遇到了问题,并在这里找到了解决方案-


希望这有帮助

我忘了什么时候了,但是Android团队在4.x之后的某个时候删除了未记录的
openFileChooser
方法。我们让它普遍工作的方法是实现一个JavaBridge来调用文件选择器,并通过服务上传文件。然后,表单接收UUID,服务器可以使用该UUID解析上载的文件。它很复杂,但不管SDK或设备的WebView如何,它都能工作。@323好吧,有什么资源可以让我完成这个过程吗?所有的部分都在那里,但你必须自己把它们粘在一起。哦,为了将GUID注入到表单中,我们在
loadUrl
调用中使用了javascript。通过Android的“活动暂停/恢复”使表单处于活动状态是另一个问题——导航到文件选择器很可能会重置表单数据,除非您将其持久化。可以说,这不是小事。把客户机代码放在一起,删除专有代码需要一段时间,而我就是没有时间。此外,我甚至不知道我是否仍然可以访问服务器端代码。我忘记了什么时候了,但是Android团队在4.x之后的某个时候删除了未记录的
openFileChooser
方法。我们让它普遍工作的方法是实现一个JavaBridge来调用文件选择器,并通过服务上传文件。然后,表单接收UUID,服务器可以使用该UUID解析上载的文件。它很复杂,但不管SDK或设备的WebView如何,它都能工作。@323好吧,有什么资源可以让我完成这个过程吗?所有的部分都在那里,但你必须自己把它们粘在一起。哦,为了将GUID注入到表单中,我们在
loadUrl
调用中使用了javascript。通过Android的“活动暂停/恢复”使表单处于活动状态是另一个问题——导航到文件选择器很可能会重置表单数据,除非您将其持久化。可以说,这不是小事。把客户机代码放在一起,删除专有代码需要一段时间,而我就是没有时间。此外,我甚至不知道我是否仍然可以访问服务器端代码。虽然这些链接可能会回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。虽然这些链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则仅链接的答案可能无效。