android Webview中的写入权限

android Webview中的写入权限,android,android-permissions,Android,Android Permissions,从我的应用程序下载文件时,有人能帮我请求写外部存储的运行时权限吗?在安卓系统中使用myWebview显示我的网站,我的网站中有PDF文件,因此我需要运行时权限才能允许在我的应用程序中访问存储 以下是我的示例代码: public class MainActivity extends AppCompatActivity { private WebView mywebView; @Override protected void onCreate(Bundle savedI

从我的应用程序下载文件时,有人能帮我请求
写外部存储的运行时权限吗?在安卓系统中使用
myWebview
显示我的网站,我的网站中有PDF文件,因此我需要运行时权限才能允许在我的应用程序中访问存储

以下是我的示例代码:

public class MainActivity extends AppCompatActivity {

    private WebView mywebView;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mywebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings= mywebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        mywebView.getSettings().setLoadWithOverviewMode(true);
        mywebView.getSettings().setUseWideViewPort(true);
        mywebView.getSettings().setBuiltInZoomControls(true);
        mywebView.getSettings().setPluginState(WebSettings.PluginState.ON);
        mywebView.setWebChromeClient(new WebChromeClient());
        mywebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mywebView.loadUrl("https://moh.org.in/");// Line of Code for opening links in app
        mywebView.setWebViewClient(new WebViewClient());
        getSupportActionBar().hide();
        mywebView.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);
                //------------------------COOKIE!!------------------------
                String cookies = CookieManager.getInstance().getCookie(url);
                request.addRequestHeader("cookie", cookies);
                //------------------------COOKIE!!------------------------
                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);
                String fileName = URLUtil.guessFileName(url, contentDisposition, mimeType);
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
                DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
                Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
            }
        });
    }


    //Code For Back Button
    @Override
    public void onBackPressed() {
        if(mywebView.canGoBack()) {
            mywebView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}

解决方案

步骤1。将权限添加到您的AndroidManifest.xml中

AndroidManifest.xml


解决方案

步骤1。将权限添加到您的AndroidManifest.xml中

AndroidManifest.xml


谢谢你,真是太棒了@贾斯普里钦很高兴听到这一点,顺便说一句,如果这个答案解决了问题,那么你可以标记是一个答案。这将有助于我今后改进我的答案。快乐编码=))非常感谢,它成功了@贾斯普里钦很高兴听到这一点,顺便说一句,如果这个答案解决了问题,那么你可以标记是一个答案。这将有助于我今后改进我的答案。快乐编码=))
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.kotlinapp">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:requestLegacyExternalStorage="true" 
        android:roundIcon="@mipmap/ic_launcher_round"
        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>

</manifest>
public class MainActivity extends AppCompatActivity {

    private static final int WRITE_EXTERNAL_STORAGE_RC = 100;

    private WebView mywebView;
    private String url, userAgent, contentDisposition, mimeType;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mywebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = mywebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        mywebView.getSettings().setLoadWithOverviewMode(true);
        mywebView.getSettings().setUseWideViewPort(true);
        mywebView.getSettings().setBuiltInZoomControls(true);
        mywebView.getSettings().setPluginState(WebSettings.PluginState.ON);
        mywebView.setWebChromeClient(new WebChromeClient());
        mywebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mywebView.loadUrl("https://moh.org.in/");// Line of Code for opening links in app
        mywebView.setWebViewClient(new WebViewClient());
        getSupportActionBar().hide();
        mywebView.setDownloadListener(new DownloadListener() {
            @Override
            public void onDownloadStart(String url, String userAgent, String contentDisposition,
                                        String mimeType, long contentLength) {
                MainActivity.this.url = url;
                MainActivity.this.userAgent = userAgent;
                MainActivity.this.contentDisposition = contentDisposition;
                MainActivity.this.mimeType = mimeType;

                String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
                if (ActivityCompat.checkSelfPermission(MainActivity.this, permission)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.this,
                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                            WRITE_EXTERNAL_STORAGE_RC);
                } else {
                    downloadFile();
                }
            }
        });
    }

    private void downloadFile() {
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

        request.setMimeType(mimeType);
        //------------------------COOKIE!!------------------------
        String cookies = CookieManager.getInstance().getCookie(url);
        request.addRequestHeader("cookie", cookies);
        //------------------------COOKIE!!------------------------
        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);
        String fileName = URLUtil.guessFileName(url, contentDisposition, mimeType);
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
        DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        dm.enqueue(request);

        Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == WRITE_EXTERNAL_STORAGE_RC) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                downloadFile();
            }
        }
    }

    //Code For Back Button
    @Override
    public void onBackPressed() {
        if (mywebView.canGoBack()) {
            mywebView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}