Android 从应用程序下载文件时写入外部存储的运行时权限。?

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

当我从应用程序下载文件时,有人能帮我请求
写外部存储的运行时权限吗。?在android中使用我的
Webview
,显示我的网站,我在其中有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);
    myWebView.loadUrl("https://learntatatrusts.org/");
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setDownloadListener(new DownloadListener() {

        public void onDownloadStart(String url, String userAgent, String 
        contentDisposition, String mimetype, long contentLength) {


            DownloadManager.Request request = new 
            DownloadManager.Request(Uri.parse(url));

            CookieManager cookieManager = CookieManager.getInstance();
            String cookie = 
            cookieManager.getCookie("https://learntatatrusts.org/");
            request.addRequestHeader("Cookie", cookie);
            request.allowScanningByMediaScanner();
            Environment.getExternalStorageDirectory();
            getApplicationContext().getFilesDir().getPath(); //which returns 
            the internal app files directory path

            request.setNotificationVisibility(DownloadManager.Request.
            VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setDestinationInExternalPublicDir(Environment.
            DIRECTORY_DOWNLOADS, "download");
            DownloadManager dm = (DownloadManager) 
            getSystemService(DOWNLOAD_SERVICE);
            dm.enqueue(request);
        }

        });
    }

    @Override
    public void onBackPressed() {
        if (myWebView.canGoBack()) {
            myWebView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}

首先将此行添加到清单文件中

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

嘿,谢谢你的帮助,但是如果(!hasPermissions(context,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE})请帮我一下,我会得到一个红色的标记来连接这个地方。嘿,代码运行得很好,谢谢你的帮助。。!!你解决红色标记了吗??如果不读这些评论的话,是的,我已经解决了所有的问题,并向你寻求帮助。。!!
public class MainActivity extends AppCompatActivity {
    private WebView myWebView;

 // Function for check permission already granted or not 
    public static boolean hasPermissions(Context context, String... permissions) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }

    @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);

 //  Permission check
        if (!hasPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE})) {
        // Permission ask
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 111);
        } else {
// if permission is already granted than load url
            loadUrl();
        }

    }

    @Override
    public void onBackPressed() {
        if (myWebView.canGoBack()) {
            myWebView.goBack();
        } else {
            super.onBackPressed();
        }
    }

    public void loadUrl() {
        myWebView.loadUrl("https://learntatatrusts.org/");
        myWebView.setWebViewClient(new WebViewClient());
        myWebView.setDownloadListener(new DownloadListener() {

            public void onDownloadStart(String url, String userAgent, String
                    contentDisposition, String mimetype, long contentLength) {


                DownloadManager.Request request = new
                        DownloadManager.Request(Uri.parse(url));

                CookieManager cookieManager = CookieManager.getInstance();
                String cookie =
                        cookieManager.getCookie("https://learntatatrusts.org/");
                request.addRequestHeader("Cookie", cookie);
                request.allowScanningByMediaScanner();
                Environment.getExternalStorageDirectory();
                getApplicationContext().getFilesDir().getPath(); //which returns the internal app files directory path

                request.setNotificationVisibility(DownloadManager.Request.
                        VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                request.setDestinationInExternalPublicDir(Environment.
                        DIRECTORY_DOWNLOADS, "download");
                DownloadManager dm = (DownloadManager)
                        getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
            }

        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == 111) {
            if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                loadUrl();
            }
        }
    }

}