【发布时间】:2020-07-28 07:04:08
【问题描述】:
我正在尝试从 URL 下载图像并将其保存在 android 中。但是我在这里遇到了一个问题,下载的图像没有在图库中显示。我尝试过以前提出的有关堆栈溢出的问题,但它们对我不起作用。 这是我的代码: API 版本为 30。 请任何帮助将不胜感激。
package com.example.testscripts;
/imports/
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = findViewById(R.id.progressbar);
Button clickbtn = (Button) findViewById(R.id.button);
clickbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText ein = (EditText)findViewById(R.id.urltext);
Content content = new Content();
content.execute(String.valueOf(ein.getText()));
}
});
}
public void downloadFile(String imgurls) throws IOException {
String imageURL = imgurls;
DownloadManager mgr = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
Uri downloadUri = Uri.parse(imgurls);
DownloadManager.Request request = new DownloadManager.Request(downloadUri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false).setTitle("Demo")
.setDescription("someting")
.setDestinationInExternalFilesDir(getApplicationContext(), Environment.DIRECTORY_DOWNLOADS, "hello.jpg");
mgr.enqueue(request);
File fles = new File(Environment.DIRECTORY_DOWNLOADS,"hello.jpg");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(fles.getAbsolutePath())));
}
private class Content extends AsyncTask<String, Void, Void> {
private String val1;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
progressBar.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));
}
@Override
public void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressBar.setVisibility(View.GONE);
progressBar.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_out));
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected Void doInBackground(String... voids) {
try {
val1 = (String) voids[0];
String urls = val1;
downloadFile(urls);
} catch (IOException e){
e.printStackTrace();
}
return null;
}
}
}
我已经更新了我的问题,这是我除了导入之外的完整源代码。
【问题讨论】:
-
图片保存了吗?你能在文件夹中看到它吗?
-
direct.mkdirs();检查mkdirs的返回值,如果失败则不要继续。而是显示一个 toast 来通知用户并返回。 -
你在搞乱 getExternalStorageDirectory() 和 getExternalFilesDir()。
-
@Felix 是的图像保存在文件夹中我可以看到它文件管理器
-
我使用 MediaScannerConnection.scanFile(),看here,它对我来说很好用。
标签: android android-file android-download-manager android-external-storage