Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
webview上的LoadURL在android 10上不起作用_Android - Fatal编程技术网

webview上的LoadURL在android 10上不起作用

webview上的LoadURL在android 10上不起作用,android,Android,我对这个脚本有问题 公共类MainActivity扩展AppCompatActivity实现SwipeRefreshLayout.OnRefreshListener{ private WebView webView; private SwipeRefreshLayout refreshLayout; private ValueCallback<Uri> mUploadMessage; public ValueCallback<Uri[]>

我对这个脚本有问题

公共类MainActivity扩展AppCompatActivity实现SwipeRefreshLayout.OnRefreshListener{

    private WebView webView;
    private SwipeRefreshLayout refreshLayout;

    private ValueCallback<Uri> mUploadMessage;
    public ValueCallback<Uri[]> uploadMessage;
    public static final int REQUEST_SELECT_FILE = 100;
    private final static int FILECHOOSER_RESULTCODE = 1;

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

        webView = (WebView) findViewById(R.id.webView1);

        WebSettings mWebSettings = webView.getSettings();
        mWebSettings.setJavaScriptEnabled(true);
        mWebSettings.setSupportZoom(false);
        mWebSettings.setAllowFileAccess(true);
        mWebSettings.setAllowFileAccess(true);
        mWebSettings.setAllowContentAccess(true);

        webView.setWebViewClient(new MyBrowser());
        webView.loadUrl("http://www.mypage.com");

        webView.setWebChromeClient(new WebChromeClient() {
            protected void openFileChooser(ValueCallback uploadMsg, String acceptType)
            {
                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");
                startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);
            }


            // For Lollipop 5.0+ Devices
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)
            {
                if (uploadMessage != null) {
                    uploadMessage.onReceiveValue(null);
                    uploadMessage = null;
                }

                uploadMessage = filePathCallback;

                Intent intent = fileChooserParams.createIntent();
                try
                {
                    startActivityForResult(intent, REQUEST_SELECT_FILE);
                } catch (ActivityNotFoundException e)
                {
                    uploadMessage = null;
                    Toast.makeText(MainActivity.this.getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show();
                    return false;
                }
                return true;
            }

            //For Android 4.1 only
            protected void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
            {
                mUploadMessage = uploadMsg;
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("image/*");
                startActivityForResult(Intent.createChooser(intent, "File Browser"), FILECHOOSER_RESULTCODE);
            }

            protected void openFileChooser(ValueCallback<Uri> uploadMsg)
            {
                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");
                startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
            }
        });

    }

    @Override
    public void onRefresh() {
        webView.reload();
        refreshLayout.setRefreshing(false);
    }

    private class MyBrowser extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            view.loadData("Page not found", "text/html", "utf-8");
            super.onReceivedError(view, request, error);
        }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
            webView.goBack();
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            if (requestCode == REQUEST_SELECT_FILE)
            {
                if (uploadMessage == null)
                    return;
                uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));
                uploadMessage = null;
            }
        }
        else if (requestCode == FILECHOOSER_RESULTCODE)
        {
            if (null == mUploadMessage)
                return;
            Uri result = intent == null || resultCode != MainActivity.RESULT_OK ? null : intent.getData();
            mUploadMessage.onReceiveValue(result);
            mUploadMessage = null;
        }
        else
            Toast.makeText(MainActivity.this.getApplicationContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show();
    }
}
private-WebView-WebView;
私人交换机布局刷新布局;
private ValueCallback mUploadMessage;
公共价值回调上传消息;
公共静态最终整数请求\u选择\u文件=100;
private final static int FILECHOOSER_RESULTCODE=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView=(webView)findViewById(R.id.webView1);
WebSettings mWebSettings=webView.getSettings();
mWebSettings.setJavaScriptEnabled(true);
mWebSettings.setSupportZoom(假);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowContentAccess(true);
setWebViewClient(新的MyBrowser());
webView.loadUrl(“http://www.mypage.com");
setWebView.WebChromeClient(新WebChromeClient(){
受保护的void openFileChooser(ValueCallback uploadMsg,String acceptType)
{
mUploadMessage=上传消息;
意向i=新意向(意向.行动\u获取\u内容);
i、 addCategory(意图。类别可打开);
i、 setType(“image/*”);
startActivityForResult(Intent.createChooser(i,“文件浏览器”),FILECHOOSER\u结果代码);
}
//用于棒棒糖5.0+设备
@RequiresApi(api=Build.VERSION\u code.LOLLIPOP)
公共布尔onShowFileChooser(WebView mWebView、ValueCallback filePathCallback、WebChromeClient.FileChooseParams FileChooseParams)
{
if(uploadMessage!=null){
uploadMessage.onReceiveValue(null);
uploadMessage=null;
}
uploadMessage=filePathCallback;
Intent Intent=fileChooserParams.createIntent();
尝试
{
startActivityForResult(意图、请求、选择文件);
}捕获(ActivityNotFounde异常)
{
uploadMessage=null;
Toast.makeText(MainActivity.this.getApplicationContext(),“无法打开文件选择器”,Toast.LENGTH_LONG.show();
返回false;
}
返回true;
}
//仅适用于Android 4.1
受保护的void openFileChooser(ValueCallback uploadMsg、字符串接受类型、字符串捕获)
{
mUploadMessage=上传消息;
意向意向=新意向(意向.行动\u获取\u内容);
intent.addCategory(intent.CATEGORY\u可打开);
intent.setType(“image/*”);
startActivityForResult(Intent.createChooser(Intent,“文件浏览器”),FILECHOOSER\u RESULTCODE);
}
受保护的void openFileChooser(ValueCallback uploadMsg)
{
mUploadMessage=上传消息;
意向i=新意向(意向.行动\u获取\u内容);
i、 addCategory(意图。类别可打开);
i、 setType(“image/*”);
startActivityForResult(Intent.createChooser(i,“文件选择器”)、文件选择器\u结果代码);
}
});
}
@凌驾
公共void onRefresh(){
reload();
refreshLayout.setRefreshing(false);
}
私有类MyBrowser扩展了WebViewClient{
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
view.loadUrl(url);
返回true;
}
@凌驾
接收错误时公共无效(WebView视图、WebResourceRequest请求、WebResourceError错误){
view.loadData(“未找到页面”、“文本/html”、“utf-8”);
super.onReceivedError(查看、请求、错误);
}
@凌驾
公共布尔onKeyDown(int-keyCode,KeyEvent事件){
if((keyCode==KeyEvent.keyCode_BACK)&&webView.canGoBack()){
webView.goBack();
返回true;
}
返回super.onKeyDown(keyCode,event);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图)
{
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP)
{
if(requestCode==请求\选择\文件)
{
if(uploadMessage==null)
返回;
uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode,intent));
uploadMessage=null;
}
}
else if(requestCode==FILECHOOSER\u RESULTCODE)
{
if(null==mUploadMessage)
返回;
Uri result=intent==null | | resultCode!=MainActivity.result_OK?null:intent.getData();
mUploadMessage.onReceiveValue(结果);
mUploadMessage=null;
}
其他的
Toast.makeText(MainActivity.this.getApplicationContext(),“未能上载图像”,Toast.LENGTH_LONG.show();
}
}

当我在android 8下运行它时,它运行得很好。但是如果我在android 10下运行,它总是显示一个找不到的错误页面。有人可以告诉我为什么loadUrl在这种情况下不起作用?在…之前感谢您的帮助。

尝试以下代码:

    public class Website extends AppCompatActivity {
        WebView webView;
        private ProgressDialog pDialog;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            webView = findViewById(R.id.webview);
            webView.setWebViewClient(new myWebclient());
            webView.getSettings().setJavaScriptEnabled(true);
            webView.setWebChromeClient(new WebChromeClient());
    
            webView.loadUrl("https://yourURL.com/");
    
//check permission in case downloading file from webview
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        == PackageManager.PERMISSION_DENIED) {
                    Log.d("permission", "permission denied to WRITE_EXTERNAL_STORAGE - requesting it");
                    String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
                    requestPermissions(permissions, 1);
                }
            }
    
//method for downloading file to internal storage Download folder
            webView.setDownloadListener(new DownloadListener()
            {
                @Override
                public void onDownloadStart(String url, String userAgent,
                                            String contentDisposition, String mimeType, long contentLength) {
                    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
                    request.setMimeType(mimeType);
                    String cookies = CookieManager.getInstance().getCookie(url);
                    request.addRequestHeader("cookie", cookies);
                    request.addRequestHeader("User-Agent", userAgent);
                    request.setDescription("Downloading File...");
                    request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
                    request.allowScanningByMediaScanner();
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimeType));
                    DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                    dm.enqueue(request);
                    Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
                }});
        }
    
        public class myWebclient extends WebViewClient {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                pDialog = new ProgressDialog(Website.this);
                pDialog.setMessage("Please Wait");
                pDialog.setCancelable(false);
                pDialog.show();
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                if (pDialog.isShowing())
                    pDialog.dismiss();
        
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
    
                view.loadUrl(url);
                return true;
            }
        }
    
        //method to go back to previous page on click back button
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
    
            if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
                webView.goBack();
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    }

我认为这是你的网址的问题

在android 9上,它需要使用https的url,如果您使用http,它将被拒绝

例如:

   webView.loadUrl("https://www.mypage.com");
或者您可以在清单上添加权限
android:usesCleartextTraffic=“true”
,但这不是保证的工作,值得一试

manifest.xml


<manifest>

    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"> 

          <activity> your code </activity>
    </application>
</manifest>
manifest.xml
你的代码

您的问题不是很具体。请提供一个简单的示例()。此外,您还可以