Они эквивалентны (и вы узнаете, доступны ли они, протестировав ваш контекст.)
Проблема, которую я ожидал, - это когда вы не единственный человек, который когда-либо нуждался в работайте с вашим кодом. Regexes достаточно сложно для большинства людей. В любое время, когда кто-то использует необычный синтаксис, возникает вопрос: «Почему они не сделали это стандартным образом? Что они думали, что мне не хватает?»
Вы можете достичь этого альтернативным способом, используя 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
}
});
}
В вашем журнале я вижу две основные причины, вызвавшие сбои.
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;
}
};
Вы должны попытаться открыть свой 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.
Вы можете попробовать
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);
}
}