2012-04-20 18 views

risposta

0

è possibile copiare il file dalla risorsa non elaborata alla sdcard, quindi chiamare startActivity() su un intento ACTION_VIEW che ha un Uri che punta alla copia leggibile e ha anche il tipo MIME corretto.

Ovviamente, questo funzionerà solo su un dispositivo su cui è presente un visualizzatore di documenti Word.

26

A differenza di iOS, Android non supporta i file di rendering .doc o .ppt. Stai cercando un intento pubblico che permetta alla tua app di riutilizzare le attività di altre app per visualizzare questi tipi di documenti. Ma questo funzionerà solo per un telefono che ha un'app installata che supporta questo intento.

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

o se è stato installato qualche app quindi utilizzare questo intento:

//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

Ha funzionato come un fascino. –

11

Ecco un metodo per prendersi cura di questo per voi:

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

Open Document da Elenco delle applicazioni disponibili L'utente deve scegliere l'applicazione dall'elenco dell'applicazione

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

Quindi, qual è il 'request_code' in' startActivityForResult() '. DOC non rappresenta un codice di richiesta specifico. – CagCak

3

è possibile aprire il file in visualizzazione Web se si desidera aprire all'interno dell'applicazione. es:

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

Stavo cercando di vedere quali opzioni dovevo creare un'anteprima del file, non sapevo che potresti inviare a google docs un URL! –

0

Qui è il modo completa per aprire file doc in Android 7.0 o meno:

Step-1: Prima di tutto, inserire il vostro file pdf in attività come la cartella seguente screenshot. Placing doc file in assets folder

Step-2: Passare al build.gradle di file e aggiungere le righe seguenti:

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

}

e poi sotto le dipendenze aggiungere la riga e la sincronizzazione seguente:

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

Step-3: Ora aggiungi un nuovo file java che dovrebbe estendersi da FileProvider Come nel mio caso il nome del file è LegacyCompatFileProvider e il codice al suo interno.

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))); 
    } 
} 

Step-4: creare una cartella denominata "xml" sotto la cartella "res". (Se la cartella è già lì, non è necessario creare). Ora aggiungi un file providers_path.xml nella cartella xml.Ecco lo screenshot: Place of provider_path xml file

All'interno file del componente aggiuntivo seguenti righe:

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

Step-5: Passare al AndroidManifest.xml di file e seguenti righe in <application></application> tag:

<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> 

Step-6: Ora vai alla classe Attività da wh ere si desidera caricare pdf e aggiungere dopo 1 riga e questi 2 metodi:

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(); 
    } 

Ora chiamare LoadPdfFile metodo e passare il nome del file senza .doc come nel mio caso "chapter-0" e si aprirà file doc in applicazione per la lettura doc.