Подтвердить что ты не робот

Android, как открыть файл расширения .doc?

Есть ли способ открыть файл расширения .doc?

4b9b3361

Ответ 1

В отличие от iOS, сам Android не поддерживает рендеринг файлов .doc или .ppt. Вы ищете публичное намерение, которое позволяет вашему приложению повторно использовать действия других приложений для отображения этих типов документов. Но это будет работать только на телефоне, на котором установлено приложение, которое поддерживает это намерение.

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

или если вы установили какое-то приложение, используйте этот намерение:

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

Ответ 2

Вот вам способ позаботиться об этом:

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

Ответ 3

Открыть документ из списка доступного приложения Пользователь должен выбрать приложение из списка приложений

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

Ответ 4

вы можете открыть файл в webview, если вы хотите открыть его в приложении. ex:

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

Ответ 5

вы можете скопировать файл из необработанного ресурса в SD-карту, а затем вызвать startActivity() в намерении ACTION_VIEW, который имеет Uri, указывающий на читаемую копию, а также имеет правильный тип MIME.

Конечно, это будет работать только на устройстве, на котором есть средство просмотра документов Word.

Ответ 6

Вот полный способ открыть файл .doc на Android 7.0 или менее:

Шаг 1: Прежде всего, разместите файл pdf в папке с ресурсами, как показано на следующем скриншоте. Размещение файла doc в папке с ресурсами

Шаг 2: Теперь перейдите в файл build.gradle и добавьте следующие строки:

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

}

а затем под зависимостями добавьте следующую строку и синхронизацию:

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

Шаг 3: Теперь добавьте новый java файл, который должен простираться от FileProvider Как и в моем случае, имя файла LegacyCompatFileProvider и код внутри него.

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

Шаг 4: Создайте папку с именем "xml" в папке "res". (Если папка уже там, тогда не нужно создавать). Теперь добавьте файл providers_path.xml в папку xml. Вот скриншот: Место файла xml файла provider_path

Внутри файла добавьте следующие строки:

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

Шаг 5: Теперь перейдите в AndroidManifest.xml файл и следующие строки в теге <application></application>:

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

Шаг 6: Теперь перейдите в класс Activity, откуда вы хотите загрузить pdf, и добавьте следующую строку 1 и эти 2 метода:

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

Теперь вызовите метод LoadPdfFile и передайте имя файла без .doc, как в моем случае "chapter-0", и он откроет файл doc в приложении для чтения doc.