Estou tentando abrir uma imagem / imagem no aplicativo interno da Galeria de dentro do meu aplicativo.
Eu tenho um URI da imagem (a imagem está localizada no cartão SD).
Você tem alguma sugestão?
android
image
android-intent
gallery
Michael Kessler
fonte
fonte
Respostas:
Esta é uma solução completa. Acabei de atualizar este código de exemplo com as informações fornecidas na resposta abaixo por @mad. Verifique também a solução abaixo em @Khobaib, explicando como lidar com imagens do Picasa.
Atualizar
Acabei de revisar minha resposta original e criei um projeto Android Studio simples, que você pode fazer checkout no github e importar diretamente em seu sistema.
https://github.com/hanscappelle/SO-2169649
(observe que a seleção de vários arquivos ainda precisa de trabalho)
Seleção de imagem única
Com suporte para imagens de exploradores de arquivos, graças ao usuário louco.
Selecionando várias imagens
Como alguém solicitou essas informações em um comentário, é melhor ter informações coletadas.
Defina um parâmetro extra
EXTRA_ALLOW_MULTIPLE
com a intenção:E na manipulação de resultados, verifique esse parâmetro:
Observe que isso é suportado apenas pela API nível 18+.
fonte
Aqui está uma atualização para o código fino que o hcpl postou. mas isso funciona com o gerenciador de arquivos OI, o gerenciador de arquivos astro E a galeria de mídia também (testada). então eu acho que ele funcionará com todos os gerenciadores de arquivos (existem muitos outros além dos mencionados?). fez algumas correções no código que ele escreveu.
fonte
else return null;
nogetPath(Uri uri)
parareturn uri.getPath();
e livrar-se do primeirofilemanagerstring = selectedImageUri.getPath();
cheque. Dessa forma, basta fazer uma chamadagetPath(Uri)
e recuperar o caminho (não importa se foi a Galeria ou um gerenciador de arquivos que foi usado).Os métodos do hcpl funcionam perfeitamente antes do KitKat, mas não funcionam com a API DocumentsProvider. Para isso, basta seguir o tutorial oficial do Android para documentproviders: https://developer.android.com/guide/topics/providers/document-provider.html -> abrir um documento, seção Bitmap.
Simplesmente usei o código hcpl e o estendi: se o arquivo com o caminho recuperado para a imagem gerar uma exceção, chamo esta função:
Testado no Nexus 5.
fonte
Com base no código acima, eu refleti o código como abaixo, pode ser mais adequado:
fonte
Passei pela solução de @hcpl & @mad. A solução da hcpl suporta bem a imagem local na galeria e a mad forneceu uma solução melhor - além de ajudar a carregar a imagem OI / Astro / Dropbox. Mas, no meu aplicativo, enquanto trabalhava na biblioteca do Picasa agora integrada à Galeria do Android, ambas as soluções falham.
Pesquisei e analisei um pouco e, eventualmente, viemos com uma solução melhor e elegante que supera essa limitação. Agradeço a Dimitar Darazhanski por seu blog, que me ajudou neste caso, modifiquei um pouco para facilitar a compreensão. Aqui está a minha solução -
Verifique e informe-me se houver algum problema. Eu testei e funciona bem em todos os casos.
Espero que isso ajude a todos.
fonte
Supondo que você tenha uma pasta de imagens no diretório do cartão SD apenas para imagens.
Em seguida, você pode decidir com o que gostaria de fazer com o conteúdo de volta em sua atividade.
Este foi um exemplo para recuperar o nome do caminho da imagem, teste-o com seu código apenas para garantir que você possa lidar com os resultados que retornam. Você pode alterar o código conforme necessário para melhor atender às suas necessidades.
Meu conselho é tentar obter as imagens funcionando corretamente, acho que o problema é o conteúdo de acessar as imagens no cartão SD. Dê uma olhada em Exibindo imagens no cartão SD .
Se você conseguir colocar isso em funcionamento, provavelmente pelo exemplo que fornece um provedor correto, você poderá descobrir uma solução alternativa para o seu código.
Mantenha-me atualizado atualizando esta pergunta com seu progresso. Boa sorte
fonte
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=file:///sdcard/images/* }
startActivityforResult
e fornecer uma atividade. Isso é o que eu estava me referindo sobre decidir o que fazer em seguida, meu mal.startActivityForResult(intent, 1);
e ainda recebo esse erro ... Esse código está localizado fora da Activity, mas tenho uma referência à atividade e chamo ostartActivityForResult
método nessa referência - talvez seja esse o motivo?1
a sua passagem? TenteIMAGE_PICK
Intent.ACTION_PICK
vez deIntent.ACTION_GET_CONTENT
. Como assimIMAGE_PICK
? Não existe tal constante. Eu também tenteiintent.setData(Uri.fromFile(new File("/sdcard/image/")));
. Tentei todas as combinações possíveis de estes e nada parece funcionar ...esta é a minha revisão deste tópico, reunindo todas as informações aqui, além de outras questões relevantes sobre estouro de pilha. Ele retorna imagens de algum provedor, enquanto lida com condições de falta de memória e rotação da imagem. Ele suporta gerenciadores de galeria, picasa e arquivos, como caixa de depósito. O uso é simples: como entrada, o construtor recebe o resolvedor de conteúdo e a uri. A saída é o bitmap final.
Referências:
fonte
Existem dois tutoriais úteis sobre o seletor de imagens com código-fonte para download aqui:
Como criar o Seletor de imagens do Android
Como selecionar e cortar imagem no Android
No entanto, o aplicativo será forçado a fechar em algum momento. Você pode corrigi-lo adicionando o atributo android: configChanges na atividade principal do arquivo Manifest, como:
Parece que a API da câmera perdeu o controle com orientação, o que ajudará. :)
fonte
Etapa 1 Código para abrir a galeria para selecionar fotos:
Etapa 2 Código para obter dados em
onActivityResult
:fonte
READ_EXTERNAL_STORAGE
Para exibir imagens e vídeos, tente o seguinte:
fonte
Apenas no caso de ajudar; Eu faço isso para obter o Bitmap:
fonte
As respostas acima estão corretas. Eu enfrentei um problema diferente: no HTC M8, meu aplicativo falha ao selecionar uma imagem da galeria. Estou recebendo valor nulo para o caminho da imagem. Corrigi e otimizei com a seguinte solução. no método onActivityResult
}
fonte
fonte
fonte
Recuperar um tipo específico de arquivo
Este exemplo obterá uma cópia da imagem.
Abra um tipo específico de arquivo
Ao executar no 4.4 ou superior, você solicita a abertura de um arquivo gerenciado por outro aplicativo
Fonte original
fonte
Além das respostas anteriores, se você está tendo problemas para obter o caminho certo (como o AndroZip), pode usar o seguinte:
fonte
Encontre a resposta para a seleção de uma única imagem da galeria
fonte
A maneira mais rápida de abrir uma imagem da galeria ou câmera.
Referência original: obter imagem da galeria no android programaticamente
O método a seguir receberá a imagem da galeria ou da câmera e a exibirá em um ImageView. A imagem selecionada será armazenada internamente.
código para xml
Classe JAVA
fonte
Aqui está o meu exemplo, pode não ser exatamente o seu caso.
supondo que você obtenha o formato base64 do seu provedor de API, atribua a ele um nome e uma extensão de arquivo, salve-o em um determinado local no sistema de arquivos.
Não se esqueça de configurar um provedor de arquivos adequado em primeiro lugar no AndroidManifest.xml
onde o caminho do arquivo é um xml em ... / res / xml / file_path.xml
Para encurtar a história, tenha o provedor de arquivos pronto no início, passe Uri para Intent para obter uma fonte de imagem conhecida e acessível; caso contrário, salve a imagem no local desejado e depois passe o local (como Uri) para Intent.
fonte