下面是一个使用Android的示例代码,该代码可以保存从URL加载的图像到设备的存储器中。
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class SaveImageListener {
private Context context;
private String imageUrl;
public SaveImageListener(Context context, String imageUrl) {
this.context = context;
this.imageUrl = imageUrl;
}
public void saveImage() {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
} else {
new SaveImageTask().execute(imageUrl);
}
}
private class SaveImageTask extends AsyncTask {
@Override
protected Boolean doInBackground(String... params) {
String imageUrl = params[0];
Bitmap imageBitmap = null;
try {
URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
imageBitmap = BitmapFactory.decodeStream(input);
} catch (IOException e) {
e.printStackTrace();
}
if (imageBitmap != null) {
String savedImagePath = saveImageToStorage(imageBitmap);
return savedImagePath != null;
} else {
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
Toast.makeText(context, "Image saved successfully", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Failed to save image", Toast.LENGTH_SHORT).show();
}
}
}
private String saveImageToStorage(Bitmap bitmap) {
String savedImagePath = null;
String imageFileName = "image.jpg";
File storageDir = new File(Environment.getExternalStorageDirectory(), "MyApp");
boolean success = true;
if (!storageDir.exists()) {
success = storageDir.mkdirs();
}
if (success) {
File imageFile = new File(storageDir, imageFileName);
savedImagePath = imageFile.getAbsolutePath();
try {
FileOutputStream outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return savedImagePath;
}
}
要使用这个监听器,可以在相应的活动或片段中实例化它,并在需要保存图像的按钮点击事件中调用saveImage()方法。
String imageUrl = "https://example.com/image.jpg";
SaveImageListener saveImageListener = new SaveImageListener(this, imageUrl);
saveImageListener.saveImage();
在使用此代码时,请确保在Android清单文件中添加适当的权限。