android - 下载的图像未显示在画廊 android
问题描述
我正在尝试从 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;
}
}
}
我已经更新了我的问题,这是我除了导入之外的完整源代码。
解决方案
似乎问题在于您在将下载请求排入队列后恰好调用了媒体扫描仪。由于图像尚未下载,您应该注册一个BroadcastReceiver
以了解下载何时完成,然后运行媒体扫描仪。
看到这个:Android下载管理器完成
编辑:
如果目标 api 级别是29
,请注意Environment.getExternalStorageDirectory()
已弃用且不使用。(参考)
推荐阅读
- r - 增加R中子图标题的字体大小?
- java - 在 Android 中调用隐藏的 API,例如“createCustomCaptureSession”
- html - 如何在 IE 的列中显示 ul 列表?
- python - 将 Numpy 索引数组与 Numba DeviceNDArray 一起使用
- google-cloud-platform - Google Cloud Run 的默认存储空间是什么?
- objective-c - Xcode 没有为 Objective-C 代码正确格式化文档注释
- android - 如何从 firebase 获取其他用户数据?
- java - 理解java多线程中的公平锁
- oracle - 用于 weblogic 的 Docker 映像与另一个用户/组创建外部卷
- soundcloud - 如何使用 SoundCloud API 搜索特定用户的曲目?