Загрузка изображения с URL-адреса Android Studio Java ⇐ JAVA
Загрузка изображения с URL-адреса Android Studio Java
Надеюсь, у вас все хорошо. Ребята, у меня есть сомнения, что у меня есть URL-адрес изображения. В xml я создал кнопку под названием «Загрузить», когда я нажимаю кнопку, изображение в URL-адресе должно загрузиться на устройство пользователя. Я предоставлю код, я пробовал этот метод, но когда я нажимаю кнопка загрузки показывает только отказ в разрешении. Я также проверил настройки, разрешение не запрашивается. Я использовал намерение передать URL-адрес из другого действия. У меня также не появилось диалоговое окно для разрешения. В файле манифеста я использовал это ИНТЕРНЕТ, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE" /> Для демонстрации вы можете использовать URL-адрес этого изображения https://d2a5isokysfowx.cloudfront.net/w ... 00x900.jpg пакет com.example.myapplication; импортировать android.Manifest; импортировать android.content.pm.PackageManager; импортировать android.os.AsyncTask; импортировать android.os.Build; импортировать android.os.Bundle; импортировать android.os.Environment; импортировать android.view.MotionEvent; импортировать android.view.ScaleGestureDetector; импортировать android.widget.Button; импортировать android.widget.ImageView; импортировать android.widget.Toast; импортировать androidx.appcompat.app.AppCompatActivity; импортировать androidx.core.app.ActivityCompat; импортировать androidx.core.content.ContextCompat; импортировать com.bumptech.glide.Glide; импортировать com.bumptech.glide.load.engine.DiskCacheStrategy; импортировать com.squareup.picasso.Picasso; импортировать java.io.File; импортировать java.io.FileOutputStream; импортировать java.io.IOException; импортировать java.io.InputStream; импортировать java.net.HttpURLConnection; импортировать java.net.URL; публичный класс RadarMapFullView расширяет AppCompatActivity { частный ScaleGestureDetector ScaleGestureDetector; частный плавающий mScaleFactor = 1.0f; частный ImageView imageView; частная кнопка btnDownload; частный статический финал int REQUEST_PERMISSION_CODE = 100; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_radar_map_full_view); imageView = findViewById(R.id.imageViewFullSize); ScaleGestureDetector = новый ScaleGestureDetector (это, новый ScaleListener()); btnDownload = findViewById(R.id.btnDownload); String imageUrl = getIntent().getStringExtra("IMAGE_URL"); // Загрузка изображения по URL с помощью Picasso (для изображений, отличных от GIF) if (!imageUrl.endsWith(".gif")) { Picasso.get().load(imageUrl).into(imageView); } еще { // Для изображений GIF рассмотрите возможность использования библиотеки, такой как Glide, которая поддерживает GIF. Glide.with(this).asGif().load(imageUrl) .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(истина) .into(изображениеView); } btnDownload.setOnClickListener(v -> checkPermissionAndDownload()); } частная пустота checkPermissionAndDownload () { // Проверяем разрешение WRITE_EXTERNAL_STORAGE если (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { если (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { // Разрешение уже предоставлено, продолжаем загрузку скачатьИзображение(); } еще { // Просить разрешение ActivityCompat.requestPermissions(это, новая строка[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE); } } еще { // Разрешение предоставляется автоматически в более ранних версиях Android, продолжайте загрузку скачатьИзображение(); } } @Override public void onRequestPermissionsResult(int requestCode, разрешения String[], int[]grantResults) { super.onRequestPermissionsResult(requestCode, разрешения, GrantResults); если (requestCode == REQUEST_PERMISSION_CODE) { if (grantResults.length > 0 && GrantResults[0] == PackageManager.PERMISSION_GRANTED) { // Разрешение получено, продолжаем загрузку скачатьИзображение(); } еще { // Разрешение отклонено, показать всплывающее сообщение или обработать его соответствующим образом Toast.makeText(this, «В разрешении отказано. Невозможно загрузить изображение.», Toast.LENGTH_SHORT).show(); } } } частный недействительный downloadImage() { // Выполняем AsyncTask для загрузки изображения новый DownloadImageTask().execute(getIntent().getStringExtra("IMAGE_URL")); } частный класс DownloadImageTask расширяет AsyncTask { @Override защищенное логическое значение doInBackground(String... параметры) { Строка imageUrl = params[0]; пытаться { URL URL = новый URL (imageUrl); Соединение HttpURLConnection = (HttpURLConnection) url.openConnection(); соединение.подключиться(); // Получаем имя файла по URL Строка fileName = imageUrl.substring(imageUrl.lastIndexOf('/') + 1); // Создаем каталог, если он не существует Каталог файлов = новый файл (getExternalFilesDir (Environment.DIRECTORY_PICTURES), «YOUR_APP_NAME»); если (!directory.exists()) { каталог.mkdirs(); } // Создаем файл в каталоге Файл файл = новый файл (каталог, имя файла); // Загрузите изображение Входной поток ввода = Connection.getInputStream(); Выход FileOutputStream = новый FileOutputStream (файл); буфер байт[] = новый байт[1024]; число байтовRead; while ((bytesRead = input.read(buffer)) != -1) { output.write(буфер, 0, bytesRead); } вывод.закрыть(); ввод.закрыть(); вернуть истину; } catch (IOException e) { е.printStackTrace(); вернуть ложь; } } @Override protected void onPostExecute (логический результат) { если (результат) { Toast.makeText(RadarMapFullView.this, «Изображение успешно загружено», Toast.LENGTH_SHORT).show(); } еще { Toast.makeText(RadarMapFullView.this, «Не удалось загрузить изображение», Toast.LENGTH_SHORT).show(); } } } @Override public boolean onTouchEvent(MotionEvent motionEvent) { ScaleGestureDetector.onTouchEvent(motionEvent); вернуть истину; } частный класс ScaleListener расширяет ScaleGestureDetector.SimpleOnScaleGestureListener { частный плавающий MIN_SCALE_FACTOR = 0,5f; @Override public boolean onScale(ScaleGestureDetector ScaleGestureDetector) { mScaleFactor *= ScaleGestureDetector.getScaleFactor(); mScaleFactor = Math.max(MIN_SCALE_FACTOR, Math.min(mScaleFactor, 10.0f)); // Применяем коэффициент масштабирования к ImageView imageView.setScaleX(mScaleFactor); imageView.setScaleY(mScaleFactor); вернуть истину; } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Загрузка URL-адреса изображения в элемент ListView с использованием подкачки в Android
Anonymous » » в форуме Android - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-