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();
}
}
}
}