skip to Main Content

i convert my website to webview apk using android studio but the upload and download functionality not working, i added all necessary permission but still facing this issue below is my Mainactivity.java code

`

package com.example.eprepareacademy2o;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.webkit.DownloadListener;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.appcompat.app.AppCompatActivity;


public class MainActivity extends AppCompatActivity {

    String websiteURL = "xyz.com/"; // sets web url

    private WebView webview;


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

        if( ! CheckNetwork.isInternetAvailable(this)) //returns true if internet available
        {
            //if there is no internet do this
            setContentView(R.layout.activity_main);

            new AlertDialog.Builder(this) //alert the person knowing they are about to close
                    .setTitle("No internet connection available")
                    .setMessage("Please Check you're Mobile data or Wifi network.")
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    })
                    .show();

        }
        else
        {
            //Webview stuff
            webview = findViewById(R.id.webView);
            webview.getSettings().setJavaScriptEnabled(true);
            webview.getSettings().setAllowFileAccess(true);
            webview.getSettings().setAllowFileAccess(true);
            webview.getSettings().setAllowFileAccessFromFileURLs(true);
            webview.getSettings().setAllowUniversalAccessFromFileURLs(true);
            webview.setWebChromeClient(new WebChromeClient() {
                public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
                    // Handle file upload
                    return true;
                }
            });

            webview.setDownloadListener(new DownloadListener() {
                public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                    // Handle file download
                }
            });

            webview.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView webView, String url) {
                    if (url.endsWith(".pdf")) {
                        // Handle PDF file download
                        return true;
                    }
                    // Handle other types of file downloads
                    return false;
                }
            });

            webview.loadUrl("xyz.com/");

            webview.getSettings().setDomStorageEnabled(true);
            webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
            webview.loadUrl(websiteURL);
            webview.setWebViewClient(new WebViewClientDemo());
            webview.setWebChromeClient(new WebChromeClient() {


                @Override
                public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
                    // Handle file upload
                    return true;
                }
            });


        }
    }






    private class WebViewClientDemo extends WebViewClient {
        @Override
        //Keep webview in app when clicking links
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("http:") || url.startsWith("https:")) {
                view.loadUrl(url);
                return true;
            } else {
                //Handle internal links
                view.loadUrl(websiteURL + url);
                return true;
            }
        }


    }



    @Override
    public void onBackPressed() { //if user presses the back button do this
        if (webview.isFocused() && webview.canGoBack()) { //check if in webview and the user can go back
            webview.goBack(); //go back in webview
        } else { //do this if the webview cannot go back any further

            new AlertDialog.Builder(this) //alert the person knowing they are about to close
                    .setTitle("EXIT")
                    .setMessage("Are you sure. You want to close this app?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    })
                    .setNegativeButton("No", null)
                    .show();
        }
    }




}

class CheckNetwork {

    private static final String TAG = CheckNetwork.class.getSimpleName();

    public static boolean isInternetAvailable(Context context)
    {
        NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

        if (info == null)
        {
            Log.d(TAG,"no internet connection");
            return false;
        }
        else
        {
            if(info.isConnected())
            {
                Log.d(TAG," internet connection available...");
                return true;
            }
            else
            {
                Log.d(TAG," internet connection");
                return true;
            }



        }
    }

    private class WebViewClientDemo extends WebViewClient {
        @Override
        //Keep webview in app when clicking links
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            // Enable full screen for embedded items
            view.loadUrl("javascript:(function() { " +
                    "var videos = document.getElementsByTagName('video'); " +
                    "for(var i=0;i<videos.length;i++) { " +
                    "videos[i].setAttribute('webkit-playsinline', ''); " +
                    "videos[i].setAttribute('playsinline', ''); " +
                    "videos[i].setAttribute('controls', ''); " +
                    "videos[i].setAttribute('style', 'max-width:100%; height:auto;'); " +
                    "}" +
                    "var iframes = document.getElementsByTagName('iframe');" +
                    "for(var i=0;i<iframes.length;i++){" +
                    "if(iframes[i].src.includes('youtube') || iframes[i].src.includes('vimeo')) {" +
                    "iframes[i].setAttribute('frameborder', '0');" +
                    "iframes[i].setAttribute('allowfullscreen', '');" +
                    "iframes[i].setAttribute('webkitallowfullscreen', '');" +
                    "iframes[i].setAttribute('mozallowfullscreen', '');" +
                    "iframes[i].setAttribute('style', 'width:100%; height:100%;');" +
                    "}" +
                    "}" +
                    "})()");

        }




    }




}
`

also here is Androidminifist folder which contain necessary permission
`

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


<application
    android:usesCleartextTraffic="true"
    android:allowBackup="true"
    android:dataExtractionRules="@xml/data_extraction_rules"
    android:fullBackupContent="@xml/backup_rules"
    android:icon="@drawable/ic_launcher_foreground"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/Theme.EprepareAcademy2O"
    tools:targetApi="31">
    <activity
        android:name=".MainActivity"
        android:exported="false" />
    <activity
        android:name=".SplashActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

`

i convert my website to a webview apk using android studio, it working properly but the upload and download files button not working.
tried more than 50+ videos on youtube and many articles but still issue with these

2

Answers


  1. If you are using android 13, make sure you add READ_MEDIA_IMAGES permissions.

    Login or Signup to reply.
  2. using android 13 same issu not open storage ,
    add permission in manifest

    uses-permission android:name= android.permission.READ_MEDIA_IMAGES
    

    uses-permission android:name= android.permission.READ_MEDIA_VIDEO
    uses-permission android:name= android.permission.READ_MEDIA_AUDIO

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search