2012-04-20 10 views

Respuesta

0

puede copiar el archivo del recurso sin procesar a sdcard, luego invocar startActivity() en un ACTION_VIEW Intención que tiene un URI apuntando a la copia legible y también tiene el tipo MIME adecuado.

Por supuesto, esto solo funcionará en un dispositivo que tenga un visor de documentos de Word en él.

26

A diferencia de iOS, Android no es compatible con la representación de archivos .doc o .ppt. Está buscando una intención pública que le permita a su aplicación reutilizar las actividades de otras aplicaciones para mostrar estos tipos de documentos. Pero esto solo funcionará para un teléfono que tenga instalada una aplicación que admita esta intención.

http://developer.android.com/guide/topics/intents/intents-filters.html

o si ha instalado alguna aplicación a continuación, utilizar esta intención:

//Uri uri = Uri.parse("file://"+file.getAbsolutePath()); 
Intent intent = new Intent(); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setAction(Intent.ACTION_VIEW); 
String type = "application/msword"; 
intent.setDataAndType(Uri.fromFile(file), type); 
startActivity(intent); 
+0

Funcionó como un amuleto. –

11

Aquí es un método para hacerse cargo de esto para usted:

public void openDocument(String name) { 
    Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
    File file = new File(name); 
    String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString()); 
    String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); 
    if (extension.equalsIgnoreCase("") || mimetype == null) { 
     // if there is no extension or there is no definite mimetype, still try to open the file 
     intent.setDataAndType(Uri.fromFile(file), "text/*"); 
    } else { 
     intent.setDataAndType(Uri.fromFile(file), mimetype);    
    } 
    // custom message for the intent 
    startActivity(Intent.createChooser(intent, "Choose an Application:")); 
} 
9

Documento Abierto de Lista de la aplicación disponible El usuario tiene que elegir la aplicación de la lista de la aplicación

File targetFile = new File(path); 
        Uri targetUri = Uri.fromFile(targetFile); 
        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setDataAndType(targetUri, "application/*"); 
        startActivityForResult(intent, DOC); 
+0

Entonces, ¿cuál es el 'request_code' en' startActivityForResult() '. DOC no representa un código de solicitud específico. – CagCak

3

puede abrir el archivo en la vista web si desea abrir dentro de la aplicación. ejemplo:

String doc="<iframe src='http://docs.google.com/viewer? url=http://www.iasted.org/conferences/formatting/presentations-tips.ppt&embedded=true'"+ 
    " width='100%' height='100%' style='border: none;'></iframe>"; 

     WebView wv = (WebView)findViewById(R.id.fileWebView); 
     wv.getSettings().setJavaScriptEnabled(true); 
     wv.getSettings().setAllowFileAccess(true); 
     //wv.loadUrl(doc); 
     wv.loadData(doc , "text/html", "UTF-8"); 
+0

¡Estaba intentando ver qué opciones tenía para crear una vista previa del archivo, no sabía que podía enviar una URL a Google Docs! –

0

Esta es la forma completa a abrir el archivo .doc en Android 7.0 o menos:

Paso-1: En primer lugar, colocar el archivo pdf en la carpeta activos como el siguiente captura de pantalla. Placing doc file in assets folder

Paso-2: siguientes líneas Ahora ve a build.gradle archivo y añadir:

repositories { 
maven { 
    url "https://s3.amazonaws.com/repo.commonsware.com" 
} 

}

y luego en Dependencias de añadir la siguiente línea y sincronización:

compile 'com.commonsware.cwac:provider:0.4.3' 

Paso-3: Ahora agregue un nuevo archivo java que debe extenderse desde FileProvider Como en mi caso el nombre del archivo es LegacyCompatFileProvider y el código dentro de él.

import android.database.Cursor; 
import android.net.Uri; 

import android.support.v4.content.FileProvider; 

import com.commonsware.cwac.provider.LegacyCompatCursorWrapper; 

public class LegacyCompatFileProvider extends FileProvider { 
    @Override 
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { 
    return(new LegacyCompatCursorWrapper(super.query(uri, projection, selection, selectionArgs, sortOrder))); 
    } 
} 

Paso 4: Crear una carpeta llamada "xml" bajo "res" carpeta. (Si la carpeta ya está allí, entonces no es necesario crear). Ahora agregue un archivo providers_path.xml, en la carpeta xml.Aquí está la captura de pantalla: Place of provider_path xml file

Dentro archivo de complemento siguientes líneas:

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <files-path name="stuff" /> 
</paths> 

Paso 5: Ahora ve a AndroidManifest.xml archivo y siguientes líneas en <application></application> etiqueta:

<provider 
      android:name="LegacyCompatFileProvider" 
      android:authorities="REPLACE_IT_WITH_PACKAGE_NAME" 
      android:exported="false" 
      android:grantUriPermissions="true"> 
      <meta-data 
       android:name="android.support.FILE_PROVIDER_PATHS" 
       android:resource="@xml/provider_paths"/> 
     </provider> 

Paso-6: Ahora ve a la clase de actividad de wh ERE que desea cargar PDF y añadir después de 1 línea y estos 2 métodos:

private static final String AUTHORITY="REPLACE_IT_WITH_PACKAGE_NAME"; 

static private void copy(InputStream in, File dst) throws IOException { 
     FileOutputStream out=new FileOutputStream(dst); 
     byte[] buf=new byte[1024]; 
     int len; 

     while ((len=in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 

     in.close(); 
     out.close(); 
    } 

    private void LoadPdfFile(String fileName){ 

     File f = new File(getFilesDir(), fileName + ".doc"); 

     if (!f.exists()) { 
      AssetManager assets=getAssets(); 

      try { 
       copy(assets.open(fileName + ".doc"), f); 
      } 
      catch (IOException e) { 
       Log.e("FileProvider", "Exception copying from assets", e); 
      } 
     } 

     Intent i= 
       new Intent(Intent.ACTION_VIEW, 
         FileProvider.getUriForFile(this, AUTHORITY, f)); 

     i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

     startActivity(i); 
     finish(); 
    } 

Ahora llamar LoadPdfFile método y pasar su nombre de archivo sin .doc como en mi caso "chapter-0" y se abrirá el archivo doc en la aplicación de lectura doc.

Cuestiones relacionadas