сохранение изображения в месте, где галерея не сможет получить к нему доступ

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

вот код:

public class Add_Comment_Picture extends AppCompatActivity {
    static final int CAM_REQUEST = 1;
    ImageView imageView;
    ImageButton button;
    private static final int REQUEST_CODE = 1;
    String mCurrentPhotoPath;
    static final int REQUEST_TAKE_PHOTO = 1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add__comment__picture);
    //    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
        button = (ImageButton) findViewById(R.id.imageButtonCamera);
        imageView = (ImageView) findViewById(R.id.imageView);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                File file = getFile();
                camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
                startActivityForResult(camera_intent, CAM_REQUEST);
            }
        });


    }

    private String createFileName(){
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        return "JPEG_" + timeStamp + "_.jpg";
    }



    @Override
    protected void onStart() {
        super.onStart();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            int hasWritePermission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            int hasReadPermission = checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
            int hasCameraPermission = checkSelfPermission(Manifest.permission.CAMERA);

            List<String> permissions = new ArrayList<String>();
            if (hasWritePermission != PackageManager.PERMISSION_GRANTED) {
                permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            }

            if (hasReadPermission != PackageManager.PERMISSION_GRANTED) {
                permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
            }

            if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
                permissions.add(Manifest.permission.CAMERA);
            }
            if (!permissions.isEmpty()) {
                requestPermissions(permissions.toArray(new String[permissions.size()]), 111);
            }
        }


    }


    private File getFile()
    {
        //File folder = new File("sdcard/camera_app");
        File folder = new File("sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos");
        if (!folder.exists())
        {
            folder.mkdir();
        }
        mCurrentPhotoPath = createFileName();
        File image_file = new File(folder,mCurrentPhotoPath);
        mCurrentPhotoPath = "sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos/" + mCurrentPhotoPath;
        return image_file;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       // String path = mCurrentPhotoPath;
        imageView.setImageDrawable(Drawable.createFromPath(mCurrentPhotoPath));
        super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 111: {
                for (int i = 0; i < permissions.length; i++) {
                    if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                        System.out.println("Permissions --> " + "Permission Granted: " + permissions[i]);


                    } else if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
                        System.out.println("Permissions --> " + "Permission Denied: " + permissions[i]);

                    }
                }
            }
            break;
            default: {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
        }
    }
}

person Yuval Eliav    schedule 18.05.2016    source источник
comment
@vrund purohit: Вы неправильно написали расширение файла, исправьте его как .nomedia   -  person Hassan Jamil    schedule 18.05.2016
comment
Просто поместите файл во внутреннюю память вашего приложения. Приложение Galery не имеет доступа к внутренней памяти ваших приложений.   -  person greenapps    schedule 18.05.2016
comment
greenapps, это именно то, что я хотел сделать ... как мне это сделать?!?!   -  person Yuval Eliav    schedule 18.05.2016
comment
Взгляните на getFilesDir () и OpenFileOutput (), OpenFileInput ().   -  person greenapps    schedule 18.05.2016
comment
folder.mkdir();. Это должно быть if (!folder.mkdir()) return null;.   -  person greenapps    schedule 18.05.2016
comment
"sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos". Это недопустимый путь к внешней памяти. Это должно быть "/sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos", если вам нужна внешняя память. Более того, жестко кодировать пути - плохая идея. Вы должны были использовать здесь getExternalFilesDir ().   -  person greenapps    schedule 18.05.2016
comment
Благодарность! это мне очень помогло :)   -  person Yuval Eliav    schedule 18.05.2016


Ответы (2)


У вас есть два варианта:

  1. Поместите файл в папку с точкой в ​​начале, например .myimages

  2. создайте пустой файл с именем .nomedia внутри папки с картинкой

person frankenapps    schedule 18.05.2016

Просто создайте папку с именем, которое начинается с точки, например: AppName / .Images. Теперь сохраните изображение в эту папку, галерея не будет иметь доступа к изображениям в папке AppName / .Images.

person Mit    schedule 18.05.2016