这是新的更新代码,但仍然给我错误“未经授权。您没有此操作的权限”我想知道为什么这个错误谢谢。我已经实施了推荐的答案仍然没有用。
public class TipsActivity extends AppCompatActivity {
private WebView mWebView;
private static final int REQUEST_CODE_PERMISSION = 2;
private static String[] PERMISSIONS_REQ = {
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private static boolean verifyPermissions(Activity activity) {
// Check if we have write permission
int WritePermision = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (WritePermision != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_REQ,
REQUEST_CODE_PERMISSION
);
return false;
} else {
return true;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tips);
mWebView = (WebView) findViewById(R.id.webView7);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.loadUrl("http://www.example.com");
mWebView.setWebViewClient(new WebViewClient());
mWebView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimeType,
long contentLength) {
if (verifyPermissions(TipsActivity.this)) {
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();
} else {
//prompt user for permission
}
}
});
}
@Override
public void onBackPressed() {
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
}
这是新的更新代码,但仍然给我错误“未经授权。您没有此操作的权限”我想知道为什么这个错误谢谢。我已经实施了推荐的答案仍然没有用。
答案 0 :(得分:2)
注意!添加在清单中写入外部存储的权限,并获取用户对lolipop api设备后的运行时权限
对于运行时持久性检查此Document Link
您的活动中的首先将此声明为字段(GLOBAL VARIABLE)
private static final int REQUEST_CODE_PERMISSION = 2;
private static String[] PERMISSIONS_REQ = {
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private static boolean verifyPermissions(Activity activity) {
// Check if we have write permission
int WritePermision = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (WritePermision != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_REQ,
REQUEST_CODE_PERMISSION
);
return false;
} else {
return true;
}
}
在您的下载管理器中使用上述方法,有点像
mwebView.setDownloadListener(new DownloadListener()
{
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimeType,
long contentLength) {
if(verifyPermissions(yourActivity.this)){
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();
}else{
//prompt user for permission
}
}});
了解更多支票this
答案 1 :(得分:0)
你可以尝试 -
mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});