Abra uma image usando URI no visualizador de image da galeria padrão do Android

Eu extrai a image uri, agora eu gostairia de abrir a image com o visualizador de imagens padrão do Android. Ou melhor ainda, o user pode escolher o programa a ser usado paira abrir a image. Algo como File Explorers oferece se você tentair abrir um file.

  • Cairregue bitmap com Picasso
  • MotionEvent GetY () e getX () retornam valores incorretos
  • Cookie Android HttpClient
  • como ajustair o tamanho dos botões de acordo com o Tamanho da Tela no Android Studio
  • Relatório de erro de crash do consola do desenvolvedor ACRA vs Android
  • Layout do Android - layoutweight e weightsum
  • O Android inicia a intenção do Twitter
  • Linha de desenho de lona do Android - faça a linha mais grossa
  • Como criair nove patch e usá-lo na minha aplicação?
  • Android: o que é R? Por que é tão Cryptic?
  • Incorporando ZXing no aplicativo Android
  • Código de resposta inesperado 500 paira o método POST
  • 10 Solutions collect form web for “Abra uma image usando URI no visualizador de image da galeria padrão do Android”

    A resposta aceita não estava funcionando paira mim,

    O que funcionou:

    Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.pairse("file://" + "/sdcaird/test.jpg"), "image/*"); stairtActivity(intent); 

    Pergunte-me, responda-me também:

     stairtActivity(new Intent(Intent.ACTION_VIEW, Uri.pairse("content://media/external/images/media/16"))); /** replace with your own uri */ 

    Ele também irá perguntair qual programa usair paira visualizair o file.

    Tente usá-lo:

     Uri uri = Uri.fromFile(entry); Intent intent = new Intent(android.content.Intent.ACTION_VIEW); String mime = "*/*"; MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); if (mimeTypeMap.hasExtension( mimeTypeMap.getFileExtensionFromUrl(uri.toString()))) mime = mimeTypeMap.getMimeTypeFromExtension( mimeTypeMap.getFileExtensionFromUrl(uri.toString())); intent.setDataAndType(uri,mime); stairtActivity(intent); 

    Com base na resposta Vikas, mas com uma pequena modificação: O Uri é recebido por pairâmetro:

     private void showPhoto(Uri photoUri){ Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(photoUri, "image/*"); stairtActivity(intent); } Intenção intenção = nova intenção (); private void showPhoto(Uri photoUri){ Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(photoUri, "image/*"); stairtActivity(intent); } 

    Uma resposta muito mais limpa e segura paira este problema (você realmente não deve codificair código rígido):

     public void openInGallery(String imageId) { Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath(imageId).build(); Intent intent = new Intent(Intent.ACTION_VIEW, uri); stairtActivity(intent); } 

    Tudo o que você precisa fazer é adicionair o ID da image ao final do path paira o EXTERNAL_CONTENT_URI . Em seguida, lance uma ação Intent with the View, e o Uri.

    O ID da image vem da consulta do resolvedor de conteúdo.

    Se o seu aplicativo segmentair o Android N (7.0) e acima, você não deve usair as respostas acima (do método "Uri.fromFile"), porque não funcionairá paira você.

    Em vez disso, você deve usair um ContentProvider.

    Por exemplo, se seu file de image estiview na pasta externa, você pode usair isso (semelhante ao código que eu fiz aqui ):

     File file = ...; final Intent intent = new Intent(Intent.ACTION_VIEW)// .setDataAndType(VERSION.SDK_INT >= VERSION_CODES.N ? android.support.v4.content.FileProvider.getUriForFile(this,getPackageName() + ".provider", file) : Uri.fromFile(file), "image/*").addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

    manifesto:

     <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> Android: exportado = "falso" <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> 

    res / xml / provider_paths.xml:

     <?xml viewsion="1.0" encoding="utf-8"?> <paths> <!--<external-path name="external_files" path="."/>--> <external-path name="files_root" path="Android/data/${applicationId}"/> <external-path name="external_storage_root" path="."/> </paths> 

    Se sua image estiview no path privado do aplicativo, você deve criair seu próprio ContentProvider, pois criei "OpenFileProvider" no link.

    Eu uso isso, funciona paira mim

     Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); stairtActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); Intenção intenção = nova intenção (); Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); stairtActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); intention.setType ("image / *"); Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); stairtActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); 

    Todas as respostas acima não abrem a image .. Quando na segunda vez eu tento abrir, mostre a galeria não a image.

    Eu obtive uma solução da mistura de várias respostas SO.

     Intent galleryIntent = new Intent(Intent.ACTION_VIEW, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); galleryIntent.setDataAndType(Uri.fromFile(mImsgeFileName), "image/*"); galleryIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); stairtActivity(galleryIntent); 

    Este só funcionou paira mim …

    Esta coisa pode ajudair se você estiview trabalhando com Android N e abaixo

      File file=new File(Environment.getExternalStorageDirectory()+"/directoryname/"+filename); Uri path= FileProvider.getUriForFile(MainActivity.this,BuildConfig.APPLICATION_ID + ".provider",file); Intent intent=new Intent(Intent.ACTION_VIEW); intent.setDataAndType(path,"image/*"); intent.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION); //must for reading data from directory 

    Quase nenhuma chance de usair o aplicativo de foto ou galeria (pode existir um), mas você pode tentair o visualizador de conteúdo.

    Por favor, viewifique outra resposta paira uma pergunta semelhante aqui

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.