Задать вопрос
@VitGun

Android. Полноразмерное изображение с камеры и запрос имени файла. Как получить?

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

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_ID_READ_WRITE_PERMISSION = 99;
    private static final int REQUEST_ID_IMAGE_CAPTURE = 100;
    File file = null;
    String m_Text = "";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Button btnStart;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnStart = (Button)findViewById(R.id.btnStart);
        btnStart.setOnClickListener(oclStart);

    }

    View.OnClickListener oclStart = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Capture();
        }
    };

    void Capture()
    {
        if (Build.VERSION.SDK_INT>=23){

            int readPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
            int writePermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if (writePermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED){
                this.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_ID_READ_WRITE_PERMISSION);
            }

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent,1);

        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        final String filename = "";

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final EditText input = new EditText(this);

        input.setInputType(InputType.TYPE_CLASS_TEXT);
        builder.setView(input);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                m_Text = input.getText().toString();
                String file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+"/CAMERA/"+m_Text+".jpg";
                Bitmap bp = (Bitmap) data.getExtras().get("data");
                try {
                    FileOutputStream out = new FileOutputStream(file);
                    bp.compress(Bitmap.CompressFormat.JPEG,100, out);
                } catch (FileNotFoundException ex){

                }
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.cancel();
            }
        });
        builder.show();
    }

}


Он работает и работает как нужно. Одна беда - сохраняет он превью, т.е. изображение крайне низкого разрешения. Погуглив я понял, что чтобы выдернуть полное изображение нужно перед вызовом startActivityForResult передать intent.putExtra(MediaStore.EXTRA_OUTPUT,filename). Переделал код, чтобы имя файла запрашивалось ДО вызова intent, но почему-то он не дожидается ответа от пользователя (ввода имени файла), а пытается открыть камеру и ожидаемо падает.
Я не андроид-программист. И на java первый раз пишу что-то осмысленное. Может кто подкинуть пример рабочий как это реализовать?
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы