安卓开发使用服务下载如下6张图片,下载完后把文件保存好,发送广播,把保存的文件名发送出去,在界面上定义并使用广播接收器接收下载的文件,把图片都显示到界面上。完整代码
时间: 2024-09-26 09:12:30 浏览: 65
在Android开发中,处理这样的任务通常涉及网络请求、文件操作以及广播通信。下面是一个简化的示例代码,展示了如何下载图片、保存到本地并通过广播将文件名发送出去:
```java
// 导入必要的库
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.widget.ImageView;
// 假设你有一个ImageDownloadService类
public class ImageDownloadService extends Service {
private static final String ACTION_DOWNLOAD_COMPLETE = "com.example.DOWNLOAD_COMPLETE";
private DownloadTask downloadTask;
// 创建BroadcastReceiver
public class DownloadCompleteListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String filename = intent.getStringExtra("filename");
// 在这里更新UI,例如显示文件名
updateImageViewWithFilename(filename);
}
}
// 下载图片的任务
private class DownloadTask extends AsyncTask<String, Void, Bitmap> {
private int position;
DownloadTask(int position) {
this.position = position;
}
@Override
protected Bitmap doInBackground(String... urls) {
// 下载图片并返回Bitmap
try {
return BitmapFactory.decodeStream(new URL(urls[0]).openConnection().getInputStream());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
// 保存图片到本地,然后发送广播
saveBitmapToInternalStorage(bitmap, position);
sendBroadcast(getDownloadCompleteIntent(position));
}
}
private void saveBitmapToInternalStorage(Bitmap bitmap, int position) {
String filename = "image_" + position + ".jpg"; // 假定文件名格式
Uri imageUri = saveBitmapToFile(bitmap, filename);
Intent fileSavedIntent = getDownloadCompleteIntent(filename);
sendBroadcast(fileSavedIntent);
}
// 其他辅助方法...
}
// 更新UI和创建广播
private void updateImageViewWithFilename(String filename) {
// 在界面找到对应的ImageView,设置文件路径
ImageView imageView = findViewById(R.id.imageView); // 假设有个ID为imageView的ImageView
imageView.setImageBitmap(BitmapFactory.decodeFile(getPathFromFileName(filename)));
}
private Intent getDownloadCompleteIntent(String filename) {
Intent intent = new Intent(ACTION_DOWNLOAD_COMPLETE);
intent.putExtra("filename", filename);
return intent;
}
// 更多方法...
@Override
public void onCreate() {
super.onCreate();
registerReceiver(DownloadCompleteListener.getInstance(), new IntentFilter(ACTION_DOWNLOAD_COMPLETE));
startDownload();
}
private void startDownload() {
// 开始下载图片列表中的第一个
downloadTask = new DownloadTask(0);
downloadTask.execute("http://example.com/image1.jpg"); // 替换为实际的图片URL
}
// ...其他生命周期方法和清理工作
// 这里假设saveBitmapToFile方法用于将Bitmap保存到内部存储
private Uri saveBitmapToFile(Bitmap bitmap, String fileName) {
// 省略文件保存细节
}
// 这里假设getPathFromFileName方法用于从文件名获取文件路径
private String getPathFromFileName(String filename) {
// 省略文件路径生成细节
}
// 清理服务时记得取消下载任务和注销广播接收器
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(DownloadCompleteListener.getInstance());
if (downloadTask != null && !downloadTask.isCancelled()) {
downloadTask.cancel(true);
}
}
}
```
请注意,这只是一个基础的示例,并未包含所有错误检查和异常处理。在实际项目中,你需要根据实际情况完善代码,比如处理网络请求的异常、缓存图片等。
阅读全文