Изображение не отображается в галерее - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь сохранить изображение из просмотра изображения в хранилище. Ниже приведена кодировка. Мне удалось сохранить изображение в памяти, но оно не отображается в галерее. Кто-нибудь может мне помочь, пожалуйста? Я не знаю, что делаю не так. Я новичок в разработке Android и нахожусь на начальной стадии. Спасибо!

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;
    private Button btn;
    private ImageView imageView2;
    Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        imageView = findViewById(R.id.image);
        imageView2=findViewById(R.id.image2);
        btn = findViewById(R.id.save);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bitmap=viewToBitmap(imageView,imageView.getWidth(),imageView.getHeight());
                imageView2.setImageBitmap(bitmap);
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
                        Locale.getDefault()).format(new Date());
                String imageFileName = "JPEG_" + timeStamp + ".jpg";
                String pathName = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/testApp";
                File directory = new File(pathName);
                if (!directory.exists()) {
                    directory.mkdirs();
                }

                File imageFile = new File(directory, imageFileName);
                if (!imageFile.exists()) {
                    try {
                        imageFile.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                try {
                    OutputStream fOut = new FileOutputStream(imageFile);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
                    fOut.close();
                    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                    File f = new File(imageFile.getAbsolutePath());
                    Uri contentUri = Uri.fromFile(f);
                    mediaScanIntent.setData(contentUri);
                    sendBroadcast(mediaScanIntent);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e("EXCEP ", e.getMessage());
                }

                // Show a Toast with the save location
                Toast.makeText(getApplicationContext(), pathName, Toast.LENGTH_SHORT).show();

            }




        });
    }
    private static Bitmap viewToBitmap(View view, int widh, int hight)
    {
        Bitmap bitmap=Bitmap.createBitmap(widh,hight, Bitmap.Config.ARGB_8888);
        Canvas canvas=new Canvas(bitmap); view.draw(canvas);
        return bitmap;
    }

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Файлы в getExternalFilesDir() не будут сканироваться хранилищем мультимедиа и, следовательно, не будут отображаться в Gallery spps.

0 голосов
/ 21 июня 2020

Я думаю, вы используете Android X, попробуйте изменить способ получения URI файла

Создайте файл provider_paths. xml внутри res / xml со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>

Затем добавьте это внутрь в yout Manifest. xml файл,

<provider
 android:name="androidx.core.content.FileProvider"
 android:authorities="${applicationId}.provider"
 android:exported="false"
 android:grantUriPermissions="true">

  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths" />

</provider>

Затем последняя часть, измените это в своем коде

File f = new File(imageFile.getAbsolutePath());
Uri contentUri = Uri.fromFile(f);

на

File f = new File(imageFile.getAbsolutePath());
Uri contentUri = FileProvider.getUriForFile(getContext(),  
                 getContext().getPackageName() + ".provider", f);
...