Android WebView и Word Online

Они эквивалентны (и вы узнаете, доступны ли они, протестировав ваш контекст.)

Проблема, которую я ожидал, - это когда вы не единственный человек, который когда-либо нуждался в работайте с вашим кодом. Regexes достаточно сложно для большинства людей. В любое время, когда кто-то использует необычный синтаксис, возникает вопрос: «Почему они не сделали это стандартным образом? Что они думали, что мне не хватает?»

8
задан arythiafan 23 March 2019 в 20:21
поделиться

4 ответа

Вы можете достичь этого альтернативным способом, используя WebView и Google Docs, как показано ниже.

String url = "http://docs.google.com/gview?embedded=true&url="+YOUR_DOC_URL;

private void loadWebViewAndDocUrl()
{
    String googleDocViewer = "<iframe src=\""+url+"\" style=\"width:100%; height:100%;\" frameborder=\"0\" allowtransparency=\"true\"></iframe>";
    progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
    final WebView wvExternalLink = (WebView) view.findViewById(R.id.wvExternalLink);
    wvExternalLink.getSettings().setJavaScriptEnabled(true);

    wvExternalLink.loadData(googleDocViewer, "text/html", "utf-8");

    wvExternalLink.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            wvExternalLink.loadUrl(url);
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            // Show progress till url loads completely using progressbar
        }
    });


}
0
ответ дан Geek 23 March 2019 в 20:21
поделиться

В вашем журнале я вижу две основные причины, вызвавшие сбои.

W/cr_CrashFileManager: 
/data/user/0/com.gochronicle.chronicle/cache/WebView/Crash Reports does not 
exist or is not a directory


I/Choreographer: Skipped 46 frames!  The application may be doing too much 
work on its main thread.

Первая ошибка могла быть связана с appCachePath, который занимал время для обработки из-за неправильного пути.

Более поздняя ошибка связана с тем, что вашему коду / веб-просмотру требуется много времени для обработки, а фреймы пропускаются из-за этого. Возможно, из-за какой-то тяжелой обработки, которую вы выполняете в основе вашего приложения, что вызывает нить остановится на некоторое время.

Решением было бы использовать отдельный поток от основного потока пользовательского интерфейса, для которого вы можете использовать AsyncTask в Android.

В вашем случае асинхронная задача может не потребоваться, если ошибка произошла из-за того, что каталог не найден для appCachePath.

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
FrameLayout.LayoutParams rl = new 
FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 
FrameLayout.LayoutParams.MATCH_PARENT);
            android.webkit.WebView wView = new 
android.webkit.WebView(this.getContext());
            wView.setId(0x100);
            //wView.setWebChromeClient(new WebChromeClient());
            wView.setWebViewClient(new WebViewClient());
            wView.getSettings().setJavaScriptEnabled(true);
            wView.getSettings().setAllowFileAccess(true);
            wView.getSettings().setAllowUniversalAccessFromFileURLs(true);
            wView.getSettings().setAllowContentAccess(true);
            wView.getSettings().setAppCacheEnabled(true);
            //also check this line of code for appCachePath
            String appCachePath = this.getCacheDir().getAbsolutePath();
             webSettings.setAppCachePath(appCachePath);



            wView.setScrollContainer(false);
            wView.setLayoutParams(rl);

            //execute asynctTask
          new LoadWebViewAsync.execute();

}

   class LoadWebViewAsync extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

          wView.loadUrl(linktourl);
            return null;
        }
    };
0
ответ дан Jiten Basnet 23 March 2019 в 20:21
поделиться

Вы должны попытаться открыть свой docURL в браузере своего планшета, предпочтительно Chrome.

Ваш код работал для меня в этом документе на Samsung Galaxy J7 Pro, Android 8.1 и Moto G4, Android 7.0. Оба физических устройства. И это не показывало URL.

Он также работал на имитированном Android Nexus 5 API 23, то есть Android 6.0.

Единственное разрешение, которое вам нужно, это:

<uses-permission android:name="android.permission.INTERNET" />

Убедитесь, что на ваших планшетах обновлено Android WebView .

Это также может быть проблема с настройкой DNS, содержанием вашего документа или доменом для вашего документа. Я создал ссылку для своего теста, перейдя в File -> Share -> Insert Into Blog или Site, и взял контент для атрибута src для сгенерированного iframe.

0
ответ дан diogenesgg 23 March 2019 в 20:21
поделиться

Вы можете попробовать

WebView urlWebView = (WebView)findViewById(R.id.containWebView);
urlWebView.setWebViewClient(new AppWebViewClients());
urlWebView.getSettings().setJavaScriptEnabled(true);
urlWebView.getSettings().setUseWideViewPort(true);
urlWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="
                + "YOUR_DOC_URL_HERE"); 

public class AppWebViewClients extends WebViewClient {



    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);

    }
}
0
ответ дан Mayur Satav 23 March 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: