O que estou tentando fazer parece muito simples, mas depois de alguns dias de pesquisa não consigo entender direito.
Eu tenho um aplicativo que permite ao usuário selecionar várias (até 5) imagens. Eu estou usando um ImageView
. Quando o usuário clica no botão ImageView
, gostaria de permitir a opção de
- Selecione a imagem da galeria ou
- Use a câmera para capturar uma imagem.
Comecei usando a ACTION_GET_CONTENT
intenção, e isso funciona bem para chegar à galeria. Então, tentei usar a ACTION_PICK_ACTIVITY
intenção de permitir ao usuário escolher câmera ou galeria:
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*");
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);
Mas parece que só posso adicionar um EXTRA_INTENT
. O menu é exibido conforme o esperado, mas as únicas opções são Galeria e Arquivos .... sem câmera).
Existe uma maneira melhor / mais fácil de fazer isso que estou perdendo? Obrigado por qualquer ajuda.
Respostas:
Você precisará criar sua própria caixa de diálogo de seleção, mesclando os dois resultados da resolução de intenção.
Para fazer isso, você precisará consultar o PackageManager com PackageManager.queryIntentActivities () para as duas intenções originais e criar a lista final de possíveis Intents com uma nova Intent para cada atividade recuperada como esta:
(Eu escrevi isso diretamente aqui, então isso pode não ser compilado)
Em seguida, para obter mais informações sobre como criar um diálogo personalizado a partir de uma lista, consulte https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog
fonte
Como iniciar uma única intenção de selecionar imagens na Galeria ou na Câmera ou em qualquer aplicativo registrado para navegar no sistema de arquivos.
Em vez de criar um Diálogo com uma lista de opções de Intent, é muito melhor usar Intent.createChooser para obter acesso aos ícones gráficos e nomes abreviados dos vários aplicativos de navegador do sistema de arquivos 'Câmera', 'Galeria' e até mesmo de terceiros como 'Astro' etc.
Isso descreve como usar a intenção do seletor padrão e adicionar outras intenções a isso.
fonte
final String fname = Utils.getUniqueImageFilename();
não está funcionando ... dizUtils cannot be resolved
:(Utils.getUniqueImageFilename()
é meu próprio método para gerar um nome de arquivo exclusivo. Existem várias maneiras de fazer isso. Um dos mais simples é usar algo parecido"img_"+ System.currentTimeMillis() + ".jpg"
. Outro éFile.createTempFile()
.if (data == null || data.getData() == null)
.Eu encontrei isso . Usando:
pois uma das intenções mostra ao usuário a opção de selecionar 'documentos' no Android 4, o que achei muito confuso. Usar isso mostra a opção 'galeria':
fonte
Eu também tive esse problema e o que fiz foi criar um AlertDialog e usar o método setItems () junto com o ouvinte DialogInterface:
fonte
Mesclei algumas soluções para criar um utilitário completo para escolher uma imagem da Galeria ou Câmera. Estes são os recursos do ImagePicker util (também em uma lib do Github ):
Captura de tela:
Editar : aqui está um fragmento de código para reunir um Intent for Apps de Galeria e aplicativos de câmera. Você pode ver o código completo no ImagePicker util (também em uma lib do Github ):
fonte
getRotationFromCamera
(ImagePicker.java
) e qual valor está retornando? Em qual telefone você está testando?boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
esse código o ajudará, pois há dois botões, um para câmera e outro para galeria, e a imagem será exibida no ImageView
https://github.com/siddhpuraamitr/Choose-Image-From-Gallery-Or-Camera
fonte
Para aqueles que obtiverem erro no 4.4 para cima enquanto tentam usar a seleção Imagem, use o código abaixo.
Em vez de criar um Diálogo com uma lista de opções de Intent, é muito melhor usar Intent.createChooser para obter acesso aos ícones gráficos e nomes abreviados dos vários aplicativos de navegador do sistema de arquivos 'Câmera', 'Galeria' e até mesmo de terceiros como 'Astro' etc.
Isso descreve como usar a intenção do seletor padrão e adicionar outras intenções a isso.
fonte
Isso deve cuidar da questão nula outputFileUri de Tina:
Nota: Estou usando esse código em android.support.v4.app.Fragment, seus métodos substituídos podem mudar dependendo da versão do Fragmento / Atividade que você está usando.
fonte
Você pode criar uma caixa de diálogo de opções
Câmera Aberta:
Galeria aberta:
Para obter o resultado da seleção
Método para salvar a imagem capturada
fonte
Resolvido problema de imagem muito grande e evite ficar sem memória.
fonte
Adicionando minha solução - ele retornará um retorno de chamada, seja da câmera ou da galera, juntamente com a intenção:
fonte
Você pode tentar isso:
fonte
Isso é simples usando AlertDialog e Intent.ACTION_PICK
fonte
Com base na resposta de David, meus dois centavos da
onActivityResult()
parte. Ele cuida das alterações introduzidas no 5.1.1 e detecta se o usuário selecionou uma imagem única ou múltipla da biblioteca.fonte
Tente desta maneira
Em seguida, crie o método onactivityresult e faça algo parecido com isto
Consulte este http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
fonte
Eu trabalhei duro na seleção de imagens da câmera ou galeria e criei alguma classe util para este trabalho. Com o uso dessa classe 'Selecionar câmera ou galeria de imagens é muito fácil' , foram necessários apenas 5 a 10 minutos de seu desenvolvimento.
ImagePickerUtils: - http://www.codesend.com/view/f8f7c637716bf1c693d1490635ed49b3/
BitmapUtils: - http://www.codesend.com/view/81c1c2a3f39f1f7e627f01f67be282cf/
ConvertUriToFilePath: - http://www.codesend.com/view/f4668a29860235dd1b66eb419c5a58b5/
MediaUtils: - https://codeshare.io/5vKEMl
Precisamos adicionar essas permissões no manifesto:
Essa função de classe (checkAndRequestPermissions) verifica automaticamente a permissão no Android-Marshmallow e Android - Nougat.
Espero que ajude você. Se alguém tiver alguma sugestão para melhorar essas aulas, adicione sua opinião nos comentários.
fonte
Como por David Manpearl resposta
https://stackoverflow.com/a/12347567/7226732
só precisamos modificar onActivityResult () como
e defina a captura ou escolha imagens na visualização de imagens.
fonte