从 url 下载文件后刷新图库
Refresh gallery after download file from url
我有imageView,如果用户点击imageView,应用程序会在url设置的地方下载图片。之后,如果文件夹存在,图像将下载到“/sdcard/koen”,然后图像将转到那里,如果不存在,则将创建文件夹。
我可以下载文件,我从应用程序中查看 'fileManager'。我在该文件夹中下载了图片。但是当我查看图库时,我看不到图像。
但是,如果我将图像从该文件夹移动到某个文件夹。然后在图库中显示图像。
到目前为止,这是我的代码:
networkimageview.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
boolean success = (new File("/sdcard/koen")).mkdir();
if (!success)
{
Log.w("directory not created", "directory not created");
}
try
{
progressDialog = new ProgressDialog(Tampil_Produk_Fragment.this);
progressDialog.setMessage("Download Gambar. . . ");
progressDialog.show();
URL url = new URL(foto_produk);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
String data1 = String.valueOf(String.format("/sdcard/koen/%d.jpg",System.currentTimeMillis()));
FileOutputStream stream = new FileOutputStream(data1);
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 85, outstream);
byte[] byteArray = outstream.toByteArray();
stream.write(byteArray);
stream.flush();
stream.getFD().sync();
scanFile(data1);
stream.close();
if(progressDialog!=null && progressDialog.isShowing())
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "Downloading Completed", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
e.printStackTrace();
}
return true;
}
});
}
问题是,我添加了代码:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("/sdcard/koen/"))));
但还是不行,如何在下载文件后刷新图库并在图库中显示该图片?
我已经编辑了我的代码,这就是我现在的代码。它会将图像显示到画廊
i have added code... but still no luck
尝试指向实际文件,而不是目录。或者,使用 MediaScannerConnection
及其 scanFile()
方法。
另外,在 FileOutputStream()
上的 close()
之前调用 flush()
和 getFD().sync()
。
此外,您正在主应用程序线程上执行网络 I/O。您的应用程序将在 Android 4.0+ 设备上崩溃,并且当您冻结 UI 时它会吸收所有其他设备。请将您的网络 I/O 移至后台线程,或使用任意数量的 third-party libraries 可以为您异步下载图像。
我有imageView,如果用户点击imageView,应用程序会在url设置的地方下载图片。之后,如果文件夹存在,图像将下载到“/sdcard/koen”,然后图像将转到那里,如果不存在,则将创建文件夹。
我可以下载文件,我从应用程序中查看 'fileManager'。我在该文件夹中下载了图片。但是当我查看图库时,我看不到图像。
但是,如果我将图像从该文件夹移动到某个文件夹。然后在图库中显示图像。
到目前为止,这是我的代码:
networkimageview.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
boolean success = (new File("/sdcard/koen")).mkdir();
if (!success)
{
Log.w("directory not created", "directory not created");
}
try
{
progressDialog = new ProgressDialog(Tampil_Produk_Fragment.this);
progressDialog.setMessage("Download Gambar. . . ");
progressDialog.show();
URL url = new URL(foto_produk);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
String data1 = String.valueOf(String.format("/sdcard/koen/%d.jpg",System.currentTimeMillis()));
FileOutputStream stream = new FileOutputStream(data1);
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 85, outstream);
byte[] byteArray = outstream.toByteArray();
stream.write(byteArray);
stream.flush();
stream.getFD().sync();
scanFile(data1);
stream.close();
if(progressDialog!=null && progressDialog.isShowing())
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "Downloading Completed", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
e.printStackTrace();
}
return true;
}
});
}
问题是,我添加了代码:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("/sdcard/koen/"))));
但还是不行,如何在下载文件后刷新图库并在图库中显示该图片?
我已经编辑了我的代码,这就是我现在的代码。它会将图像显示到画廊
i have added code... but still no luck
尝试指向实际文件,而不是目录。或者,使用 MediaScannerConnection
及其 scanFile()
方法。
另外,在 FileOutputStream()
上的 close()
之前调用 flush()
和 getFD().sync()
。
此外,您正在主应用程序线程上执行网络 I/O。您的应用程序将在 Android 4.0+ 设备上崩溃,并且当您冻结 UI 时它会吸收所有其他设备。请将您的网络 I/O 移至后台线程,或使用任意数量的 third-party libraries 可以为您异步下载图像。