Откройте пользовательскую камеру, сделайте снимок, сохраните изображение, отправьте изображение - PullRequest
0 голосов
/ 14 июня 2011

На этот раз у меня есть вопрос относительно пользовательской камеры Android, а НЕ встроенной камеры, доступной через Camera_intent. Мне не разрешено использовать это. Я пытаюсь разрешить пользователю навести камеру на что-нибудь и выбрать «Отправить» в onOptionsItemMenu.

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

Я сталкиваюсь с проблемой, когда пытаюсь сделать оба. Как есть, используя этот код:

 public boolean onOptionsItemSelected(MenuItem item) {
        Intent i;
        File file2;
        camera.takePicture(null, mPictureCallback, mPictureCallback);
        switch (item.getItemId()) {

        case R.id.save:
            return super.onOptionsItemSelected(item);

        case R.id.send:

            file2 = new File(filename);
            i = new Intent(Intent.ACTION_SEND);
            i.putExtra(Intent.EXTRA_SUBJECT, "Sample Picture");
            System.out.println("file//" + file2);
            i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file//" + file2));
            i.setType("image/png");
            startActivity(Intent.createChooser(i, "Email file"));
            finish();
            return super.onOptionsItemSelected(item);

Камера «щелкает» или «мерцает», как будто она делает снимок, а затем сразу же открывает почтовый клиент. Когда я выбираю, что я хочу взять, Gmail говорит, что это нулевое местоположение. Однако, если я удаляю часть, которая запускает средство выбора электронной почты, изображение сохраняется должным образом и находится там.

Почти как будто она пропускает камеру, делая шаг.

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

Запустить ли часть камеры в другом потоке?

У меня была идея использовать логическое значение для проверки существования и размера файла, но я не уверен, как заставить программу проверять это снова и снова, пока он не вернет true.

1 Ответ

2 голосов
/ 14 июня 2011

Я предполагаю, что ваш обратный вызов происходит в отдельном потоке. Итак, ваше действие «открыть почтовый клиент» происходит, пока ваше изображение все еще сохраняется. Что вы должны попробовать, так это иметь флаг, который говорит вам, делаете ли вы отправку или сохранение. Установите это в onOptionsItemSelected, прежде чем открывать камеру. Затем в mPictureCallback есть те, которые выполняют намерение ACTION_SEND (или действие сохранения)

...