Есть ли способ открыть файл расширения .doc?
Android, как открыть файл расширения .doc?
Ответ 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 в папке с ресурсами, как показано на следующем скриншоте.
Шаг 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 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.