由于业务的需要,我的app需要实现在APP内打开外部链接,这个功能可以通过Cordova提供的InAppBrowser插件轻松的实现。但是我还需要实现在InAppBrowser打开的外部页面中实现点击一个按钮,然后下载文件的功能。经过实践,InAppBrowser是不支持下载功能的,这可难倒我了。全栈工程师的成长之路漫漫,必然是从无数的坑里面跌倒又爬起来,才能一步一步成长。
不过经过辛苦的搜索,终于还是在网上找到了解决的方法:https://stackoverrun.com/cn/q/6932162
不过这哥们写得让人也不太好理解,经过多番尝试,我最终还是成功实现了。接下来就用中文更清晰的解释该怎样处理。
如果你用的是Cordova而不是用的Capacitor,那你就在你的开发工具中找到项目里面的这个文件夹:platforms\android\src\org\apache\cordova\inappbrowser
如果你跟我一样用了Capacitor的话,就直接找到android\capacitor-cordova-android-plugins\src\main\java\org\apache\cordova\inappbrowser
这个文件夹。
然后打开InAppBrowser.java
这个文件。使用搜索功能,搜索一个名字为navigate
的方法,然后把下面的代码片段拷贝到这个方法里面:
this.inAppWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
cordova.getActivity().startActivity(i);
}
});
具体需要拷贝到什么位置呢?看下图:
然后,同样是上面那段代码还需要拷贝到一个地方,此时先搜索方法名为run
的方法,搜出来有好多个,找到如下这个:
然后这个方法特别长,你要往下拉,大概拉到这个位置:
大约1058行吧,这个行数可能会因为版本不同而不同,然后你把上面那段代码粘贴到跟我一样的位置就行了。
然后重新构建你的项目,然后打开Android Studio这时候你运行项目的话会发现报错了。
那是因为我们改变了代码,没有自动引入DownloadListener
,找到报错的地方使用Alt+Enter自动引入一下就行了。
然后运行项目就没有问题了。
文章评论