Android 单击下载按钮时请求许可

Android 单击下载按钮时请求许可,android,android-webview,android-permissions,android-download-manager,Android,Android Webview,Android Permissions,Android Download Manager,我正在Android studio中使用webView制作一个应用程序。它只包含图片,所以我的应用程序中还有一个集成的下载按钮。在android棉花糖版本中,您必须请求权限,我在onCreate中有一个权限代码,如下所示: int check = ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE); if (check == PackageManager.

我正在Android studio中使用webView制作一个应用程序。它只包含图片,所以我的应用程序中还有一个集成的下载按钮。在android棉花糖版本中,您必须请求权限,我在onCreate中有一个权限代码,如下所示:

int check = ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (check == PackageManager.PERMISSION_GRANTED) {
        //Do something
    } else {
        requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1024);
    }
<a href="url">Download</a>
 @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.endsWith(".jpg")) {
                    Uri source = Uri.parse(url);
                    // Make a new request pointing to the .apk url
                    DownloadManager.Request request = new DownloadManager.Request(source);
                    // appears the same in Notification bar while downloading
                    request.setDescription("Description for the DownloadManager Bar");
                    request.setTitle("PunjabiDharti.jpg");
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                        request.allowScanningByMediaScanner();
                        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    }
                    // save the file in the "Downloads" folder of SDCARD
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "PunjabiDharti.jpg");
                    // get download service and enqueue file
                    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                    manager.enqueue(request);
但它会在应用程序启动时弹出,我想在用户单击下载按钮时弹出

html中的“我的下载”按钮如下所示:

int check = ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (check == PackageManager.PERMISSION_GRANTED) {
        //Do something
    } else {
        requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1024);
    }
<a href="url">Download</a>
 @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.endsWith(".jpg")) {
                    Uri source = Uri.parse(url);
                    // Make a new request pointing to the .apk url
                    DownloadManager.Request request = new DownloadManager.Request(source);
                    // appears the same in Notification bar while downloading
                    request.setDescription("Description for the DownloadManager Bar");
                    request.setTitle("PunjabiDharti.jpg");
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                        request.allowScanningByMediaScanner();
                        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    }
                    // save the file in the "Downloads" folder of SDCARD
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "PunjabiDharti.jpg");
                    // get download service and enqueue file
                    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                    manager.enqueue(request);

当用户点击下载按钮时,如何弹出请求权限?

您可以通过以下方式实现:

public class WebViewActivity extends AppCompatActivity {

    public static final int DOWNLOAD_REQUEST_CODE= 1024;
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
    ...
    webView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.endsWith(".jpg")) {
                int check = ActivityCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
                if (check == PackageManager.PERMISSION_GRANTED) {
                //DO the download stuff here
                } else {
                  requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},DOWNLOAD_REQUEST_CODE);
                }
            }
        }
     });
   }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if(requestCode == DOWNLOAD_REQUEST_CODE && grantResults[0] == PackageManager.PERMISSION_GRANTED){
           //DO the download stuff here
        }
    }
}
如果您使用的是
webview
,那么..,也可以使用
HTML5
来实现,而不是使用android代码来请求权限,然后检查是否授予权限,然后保存到某个位置,然后


你能做的是。。设置
webview
大多数属性,如
javascript
,还有更多可以在
开发者文档官方谷歌网站上找到的属性


现在,您的
webview
是一个
ble,可以做浏览器可以做的大部分事情
,因此:


仅通过以下方式直接在HTML中单击/触摸下载图片:

<!DOCTYPE html>
<html>
<body>

<p>Click on the w3schools logo to download the image:<p>

<a href="/images/myw3schoolsimage.jpg" download>
<img border="0" src="/images/myw3schoolsimage.jpg" alt="W3Schools" width="104" height="142">
</a>

<p><b>Note:</b> The download attribute is not supported in Edge version 12, IE, Safari 10 (and earlier), or Opera version 12 (and earlier).</p>

单击w3schools徽标下载图像:
注意:Edge版本12、IE、Safari 10(及更早版本)或Opera版本12(及更早版本)不支持下载属性

你可以在这里找到它



不要忘记设置
webview
的设置,使其能够像浏览器一样工作;设置

因为您在onCreate中请求权限。单击按钮时,您需要调用ActivityCompat.checkSelfPermission。假设ur按钮位于WebView->中。或者把它称为你的责任。