0

После изображение было скачать, я сохранить его во внутренней памяти наКак я могу открыть изображения, сохранить во внутренней памяти (папка кэша в Android/данные /% пакет%/кэше) в андроиде галерее

Android/данные /% packagename%/cache. ниже приведен код.

private class SaveImageToStorage extends AsyncTask<Void,Void,Void> 
{ 
    String picName; 
    Bitmap bitmap; 
    public SaveImageToStorage(String name, Bitmap bitmap) 
    { 
     this.picName = name; 
     this.bitmap = bitmap; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     if(bitmap != null && !picName.isEmpty()) { 
      File file = new File(feedImagesCacheDir.getPath(), extractImageNameFromUrl(picName)); 
      try { 
       FileOutputStream fos = new FileOutputStream(file); 
       bitmap.compress(Bitmap.CompressFormat.WEBP, 80, fos); 
       fos.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 
} 

И после всего этого я просто хочу открыть изображение в галерее Android.

Я пробую под кодом, и он не работает. Он показывает мне, что тост «не может найти изображение».

Итак, я попробовал удалить файл «файл: //», а затем открыть галерею с чем-то вроде сломанного изображения.

private void openImageInGallery(){ 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.parse("file://"+getFeedImagesCacheDir().getPath() + "/" + imgName+".webp"), "image/*"); 
    startActivity(intent); 
} 

Я думаю, что, возможно, я сохраню его в папке с кешем, поэтому он стал приватным только с доступом к моему приложению.

Как это исправить?

Thanks.Sorry для моего плохого ENG.

ответ

0

Вы можете скачать изображения в DCIM (ваша галерея в sdCard). Затем используйте ниже, чтобы открыть галерею:

public static final int RESULT_GALLERY = 0; 
Intent galleryIntent = new Intent(
        Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(galleryIntent , RESULT_GALLERY); 

Если вы хотите, чтобы получить результат URI или сделать что-нибудь еще использовать это:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
    case QuestionEntryView.RESULT_GALLERY : 
     if (null != data) { 
      imageUri = data.getData(); 
      //Do whatever that you desire here. or leave this blank 

     } 
     break; 
    default: 
     break; 
    } 
} 

Надежда эта помощь!

+0

ok thank man ... –

1

Кэш-изображение не отображается напрямую, потому что сохраняется как зашифрованный формат, поэтому сначала вы загружаете это изображение и сохраняете его на SD-карте. используйте ниже код.

String root = Environment.getExternalStorageDirectory().toString(); 
String wallpaperFilePath=Android/data/%packagename%/cache/imagename; 
File cacheDir = GlobalClass.instance().getCacheFolder(this); 
File cacheFile = new File(cacheDir, wallpaperFilePath); 
InputStream fileInputStream = new FileInputStream(cacheFile); 
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
bitmapOptions.inSampleSize = scale; 
bitmapOptions.inJustDecodeBounds = false; 
Bitmap wallpaperBitmap = BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions); 


File myDir = new File(root + "/saved_images");  
myDir.mkdirs(); 
Random generator = new Random(); 
int n = 10000; 
n = generator.nextInt(n); 
String fname = "Image-"+ n +".jpg"; 
File file = new File (myDir, fname); 
if (file.exists()) file.delete(); 
try { 
     FileOutputStream out = new FileOutputStream(file); 
     wallpaperBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.flush(); 
     out.close(); 

} catch (Exception e) { 
     e.printStackTrace(); 
} 

и добавить в очевидном

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

С помощью этой линии вы можете в состоянии видеть изображения, сохраненные в окне галереи.

sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED, 
     Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
+0

спасибо за разъяснение брата. –