web-dev-qa-db-ja.com

Android .doc拡張子ファイルを開く方法?

.doc拡張子ファイルを開く方法はありますか?

15
Narendra

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

これはあなたのためにこれを処理する方法です:

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

利用可能なアプリケーションのリストからドキュメントを開くユーザーはアプリケーションのリストからアプリケーションを選択する必要があります

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

アプリ内で開きたい場合は、webviewでファイルを開くことができます。例:

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

Android 7.0以下で.docファイルを開く完全な方法は次のとおりです。

ステップ1:まず、次のスクリーンショットのように、PDFファイルをアセットフォルダに配置します。 Placing doc file in assets folder

ステップ2:次にbuild.gradleファイルに移動して、次の行を追加します。

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

}

次に、依存関係の下に次の行を追加して同期します。

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

ステップ3:次に、新しいJavaから拡張する必要があるファイルを追加しますFileProvider Like myケースファイル名は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"という名前のフォルダを作成します。 (フォルダがすでにある場合は、作成する必要はありません)。次に、xmlフォルダにproviders_path.xmlファイルを追加します。これがスクリーンショットです: Place of provider_path xml file

ファイル内に次の行を追加します。

<?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:次に、pdfをロードする場所からActivityクラスに移動し、次の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"のようになり、ドキュメントリーダーアプリケーションでドキュメントファイルが開きます。

1
Zulqarnain

rawリソースからsdcardにファイルをコピーしてから、読み取り可能なコピーを指すUriを持ち、適切なMIMEタイプを持つACTION_VIEWインテントでstartActivity()を呼び出すことができます。

もちろん、これはWord文書ビューアが搭載されているデバイスでのみ機能します。

0
jeet