Esta fue mi pregunta original:

Quiero ser capaz de abrir un archivo pdf
en mi aplicación usando la integrada de android en
visor de pdf de la aplicación, pero no sé cómo
iniciar otras aplicaciones. Estoy seguro de que tengo que
inicio de la llamada actividad, yo no sé
cómo identificar la aplicación im de apertura y
cómo pasar el archivo a esa específica
app.

Alguien tiene una idea?

Acabo de enterarme de que el visor de pdf que tengo en mi teléfono está hecho por HTC y que Adobe apenas lanzó su android visor de pdf (que es grande). Así, la nueva pregunta es esta: ¿cómo puedo comprobar que el usuario tiene instalado adobe visor y, a continuación, ¿cómo puedo abrir el archivo en la aplicación de mi aplicación?

  • AFAIK no hay ningún visor de PDF integrado en Android. Adobe lanzó su oficial de puerto Lector para Android sólo un par de días atrás: techie-buzz.com/mobile-news/… , pero usted todavía necesita para llegar desde el Mercado.
  • oh, como sería llegar, mi teléfono venía con un HTC hecho visor de pdf… de lujo que. ok entonces, suponiendo que el usuario tiene este adobe visor de pdf instalado en su dispositivo, ¿cómo lo uso?
  • No tengo una respuesta, pero me preguntaba si tienes esto ordenados, y si es así, ¿cómo lo hiciste? Esto es muy relevante para lo que necesito hacer.
  • Karakuri la respuesta es ideal para abrir un pdf con cualquier espectador, no sólo de Adobe
  • posibles duplicados de Biblioteca de PDF para Android – PDFBox?
  • ¿Cómo puede ser esto un duplicado? Esta pregunta es un año mayor que uno, y Esta cuestión no se trata de un pdf de la biblioteca, se trata de la apertura de los archivos pdf en otras aplicaciones.

InformationsquelleAutor mtmurdock | 2010-05-26

9 Comentarios

  1. 16

    AFAIK, Adobe no se ha documentado ningún pública Intents quiere a los desarrolladores a usar.

    Usted puede tratar de un ACTION_VIEW Intent con un Uri señalando el archivo (ya sea en la tarjeta SD o MODE_WORLD_READABLE en su aplicación local de almacén de archivos) y un tipo MIME de "application/pdf".

    • Ok eso suena bien… ¿cómo puedo implementar? Esto es muy nuevo para mí.
    • Probado esto, porque no quiero que los archivos se almacenan en la tarjeta sd. Por desgracia Adobe Reader no abrir los archivos de la aplicación dir (creado con MODE_WORLD_READABLE). Nadie ha resuelto esta tan lejos?
    • siempre dice que el archivo no existe o no se puede leer. he probado con 8 diferentes archivos PDF que se pueden leer en mi dispositivo y el PC.
    • Lo que si tengo en la web url (http:xyx.com/a.pdf) ?
    • Es mejor usar un FileProvider como MODE_WORLD_READABLE ya no se utiliza en la API de nivel 17
  2. 40

    Mediante programación puede determinar si una aplicación adecuada existe en el dispositivo del usuario, sin captura de excepciones.

    Intent intent = new Intent(Intent.ACTION_VIEW,
            Uri.parse("path-to-document"));
    intent.setType("application/pdf");
    PackageManager pm = getPackageManager();
    List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
    if (activities.size() > 0) {
        startActivity(intent);
    } else {
        //Do something else here. Maybe pop up a Dialog or Toast
    }
    • Me gusta este. Muy limpio.
    • Gracias por eso. Muy útil.
  3. 5
    private void loadDocInReader(String doc)
         throws ActivityNotFoundException, Exception {
    
        try {
                    Intent intent = new Intent();
    
                    intent.setPackage("com.adobe.reader");
                    intent.setDataAndType(Uri.parse(doc), "application/pdf");
    
                    startActivity(intent);
    
        } catch (ActivityNotFoundException activityNotFoundException) {
                    activityNotFoundException.printStackTrace();
    
                    throw activityNotFoundException;
        } catch (Exception otherException) {
                    otherException.printStackTrace();
    
                    throw otherException;
        }
    }
    • Y si com.de adobe.lector de cambios de ruta de acceso estás jodido, no se recomienda el uso de setPackage().
    • si desea utilizar el sistema operativo por defecto reader para android, reemplace la intención.setPackage(«com.de adobe.reader»); intención.setPackage(«com.google.android.apps.pdfviewer»);
  4. 3
                FileFinalpath = SdCardpath + "/" + Filepath + Filename;
                File file = new File(FileFinalpath);
                if (file.exists()) {
                    Uri filepath = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(filepath, "application/pdf");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
                    try {
                        startActivity(intent);
                    } catch (Exception e) {
                        alert.showAlertDialog(PDF_Activity.this, "File Not Started...","File Not Started From SdCard ", false);             
                        Log.e("error", "" + e);
                    }
    
                } else {
                    alert.showAlertDialog(PDF_Activity.this, "File Not Found...","File Not Found From SdCard ", false);             
    
                }
  5. 2

    Aunque este es un poco más viejo tema, aquí es una solución para la apertura de un archivo PDF que se encuentra en el activo/carpeta con un externo lector de PDF de la aplicación. Utiliza un proveedor de contenido personalizado: https://github.com/commonsguy/cwac-provider

    El uso de este se puede definir cualquier tipo de archivo de los activos/o res/raw/carpeta.

    Probarlo! Mejor y más fácil solución que he encontrado hasta ahora.

  6. 1

    Yo también enfrentan el mismo problema cuando estaba tratando de mostrar PDF en el dispositivo android y finalmente terminar con la solución (3rd party PDF la integración de la biblioteca)

    https://github.com/JoanZapata/android-pdfview

    mientras que yo he probado varias bibliotecas para este enumeran a continuación y que también están trabajando,

    https://github.com/jblough/Android-Pdf-Viewer-Library

    & mupdf que viene con el ndk sabor (https://code.google.com/p/mupdf/downloads/detail?name=mupdf-1.2-source.zip&can=2&q=) y la necesidad de extraer con NDK y luego usarlo en la aplicación como un jar o java, etc. buen artículo para explicar el uso de esta biblioteca @ http://dixitpatel.com/integrating-pdf-in-android-application/

  7. 1

    Android ha construido en el marco de Android 5.0 /Lollipop, se llama PDFRenderer. Si se puede hacer la hipótesis de que los usuarios de Android 5.0, es probablemente la mejor solución.

    Hay un funcionario ejemplo en Google del sitio del desarrollador:

    http://developer.android.com/samples/PdfRendererBasic/index.html

    No es compatible con la anotación o de otras funciones más avanzadas; para los que de verdad volver a mediante el uso de una Intención de abrir una app completa, o la incrustación de un SDK como mupdf.

    (Descargo de responsabilidad: yo muy de vez en cuando hacer un trabajo de mupdf.)

    • Oh wow! Estoy tan emocionado acerca de esto! Todavía tengo que apoyar a las versiones anteriores, y yo desde hace mucho han cambiado el proyecto que impulsó a mi pregunta original. Sin embargo, estoy super feliz de saber acerca de esto.
  8. 0

    Agregar FLAG_GRANT_READ_URI_PERMISSION

    Intent intent = new Intent(Intent.ACTION_VIEW)
    Uri outputFileUri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", file); 
    intent.setDataAndType(outputFileUri, "application/pdf"); 
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    Intent in = Intent.createChooser(intent, "Open File");
    startActivity(in);

    también agregar provider_paths.xml en res -> xml de la carpeta
    y que tiene que agregar a continuación el código en manifiesta

    <application>
       <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="${applicationId}.provider"
                android:exported="false"
                android:grantUriPermissions="true"
                tools:replace="android:authorities">
                <meta-data
                    tools:replace="android:resource"
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths" />
            </provider>
     </application>
  9. -1

    Además de los marcados como respuesta que usted necesita estos permisos en el manifest.xml

    **

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    **

Dejar respuesta

Please enter your comment!
Please enter your name here