Как программно установить некоторые изображения как невидимые из Галереи? - PullRequest
0 голосов
/ 26 декабря 2018

Мне нужно сделать изображения невидимыми из моей галереи, и я вижу другие ответы на stackoverflow, но они не работают для меня.

вот как я это сделал программно.

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

if(resultCode== Activity.RESULT_OK){

    if(requestCode==REQUEST_CAMERA){

        Uri selectedImageUri = data.getData();

        if (null != selectedImageUri) {
            // Get the path from the Uri

            String path = getPathFromURI(selectedImageUri);
            File file = new File(path);
            Bitmap  bmp = CommonMethod.compressImage(file, getContext());
            Log.e(TAG, "onActivityResult --: "+ String.format("Size : %s", getReadableFileSize(file.length())));

            mCustomerImage =  CommonMethod.bitmapToByteArray(bmp);
            imageTemplateStr = Base64.encodeToString(mCustomerImage, Base64.DEFAULT);
            Log.e(TAG, "image: "+ imageTemplateStr );
            //CommonMethod.SaveImage(bmp);
            imageCustomer.setImageBitmap(bmp);

            CommonMethod.SaveImage(bmp);
        }

    }else if(requestCode==SELECT_FILE){
        Uri selectedImageUri = data.getData();
        if (null != selectedImageUri) {
            // Get the path from the Uri

            String path = getPathFromURI(selectedImageUri);
            File file = new File(path);
            Bitmap  bmp = CommonMethod.compressImage(file, getContext());
            Log.e(TAG, "onActivityResult --: "+ String.format("Size : %s", getReadableFileSize(file.length())));

            mCustomerImage =  CommonMethod.bitmapToByteArray(bmp);
            imageTemplateStr = Base64.encodeToString(mCustomerImage, Base64.DEFAULT);
            //CommonMethod.SaveImage(bmp);
            Log.e(TAG, "image: "+ imageTemplateStr );

            imageCustomer.setImageBitmap(bmp);

            CommonMethod.SaveImage(bmp);
        }

 }

Метод SaveImage:

public static void SaveImage(Bitmap finalBitmap) {

    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/safco_private_pics");
    if (!myDir.exists()) {
        myDir.mkdirs();
    }
    File newFile = new File(root,".nomedia");
    try {
        FileWriter writer = new FileWriter(newFile);
        writer.flush();
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    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);
        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();

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

Метод getPathFromURI

public String getPathFromURI(Uri contentUri) {
    String res = null;
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, null, null, null);
    if (cursor.moveToFirst()) {
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        res = cursor.getString(column_index);
    }
    cursor.close();
    return res;
}

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

Изображения хранятся в созданной мной папке, а также в папке DCIM / Camera.Я не знаю, почему

Что не так, кто-нибудь может мне помочь.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Если вы хотите временно сохранить изображение, вы можете использовать следующий код

File outputDir = context.getCacheDir(); // context should be the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);

Вместо String root = Environment.getExternalStorageDirectory (). ToString ();Файл myDir = новый файл (root + "/ safco_private_pics");

Подробнее о каталоге dir кеша читайте здесь: https://stackoverflow.com/a/6528104/7708305

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

File file = new File(root + "/.hidden_folder");

Точка (.) перед именем файла / папки делает его скрытым.

0 голосов
/ 26 декабря 2018

поместите ваше изображение в скрытую папку

//replace
File myDir = new File(root + "/safco_private_pics");
//with
File myDir = new File(root + "/.safco_private_pics");

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

...