我有一个带有WebView的应用程序,它可以下载视频并在VideoView中播放它们.
为了管理下载,我使用了android的方便的DownloadManagerAPI.不幸的是,在某些情况下我需要使用代理.
我已经成功设置了使用反射的WebView代理,详见本stackoverflow问题,但我不知道如何设置DownloadManager使用代理也是如此.
这可能吗?如果没有,我的替代方案是什么?
谢谢
如何拦截从Android发出的所有请求WebView并获取相应的请求标头?我希望看到WebView包含XHR,脚本源,CSS等的每个请求的标题.
iOS上的等价物是覆盖NSURLCache它将为您提供所有这些信息.以下可能是最接近我想要的,但据我所知,WebViewClient只有给我们回字符串:
void onLoadResource(WebView view, String url);
WebResourceResponse shouldInterceptRequest(WebView view, String url);
Run Code Online (Sandbox Code Playgroud) 如何在最新的Kitkat版本中以编程方式在Android webview中设置代理?
这个SO链接WebView android代理谈论版本达到SDK版本18.但是这些解决方案不再适用于Kitkat作为底层webkit实现被更改并且它现在使用铬.
我想在自定义 webview 客户端(没有 JavaScript 注入)中实现一种可以阻止广告的机制。有没有一种方法可以捕获广告并将其替换为来自可信赖来源的其他广告?谢谢
我想在我的 Android 应用程序中嵌入一个 youtube 视频。它有一个Navigation Drawer,当这个抽屉被打开时,视频必须继续播放。而且我希望我的应用能够播放受版权限制的视频,例如来自Vevo 的视频。我的第一次尝试只是https://www.youtube.com/embed/VIDEO_ID使用 Chrome 客户端将嵌入 url ( )加载到WebView 中,但是对于许多视频,例如来自 Vevo 的视频,像这样,我看到以下消息:
This Video Contains content from Vevo. It is restricted from playback on certain sites
为了处理这个错误,我决定使用Youtube API。
在这个库的可用实现之间,我尝试了这些:
Android API 的优点是我可以播放具有上述限制的视频,但它被丢弃了,因为它的默认行为是播放器在打开抽屉时停止视频。
使用 Iframe API,我可以在抽屉打开时播放视频,但没有限制。
我最后的尝试是使用 Javascript API。目前我和iframe有同样的情况,就是不能播放有限制的视频。
但是我认为这是找到解决方案的正确方法。在api 参考中,他们建议使用SWFObject,但据我所知,没有可用于移动设备的闪光,如本答案中公开的那样。那么,还有另一种在我的 WebView 中嵌入视频的方法吗?
另一个疑问是:即使有“某些网站”的限制,移动网站如何才能播放来自 youtube 的视频?请理解,这里问的是谁对 Javascript 没有太多经验的 Android 开发人员。
目前,我有这段代码:
将加载播放器的布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" …Run Code Online (Sandbox Code Playgroud) 我重写webViewClient.shouldInterceptRequest()返回资产文件夹中的图像和js文件等常用资源.但这可用于android> = 3..还有用于android 2.x的替代方法
我发现onLoadResource()提供类似的行为,但其返回类型是无效的
反正是否只能在应用程序中以编程方式代理Android Webview请求?(我希望所有请求都通过嵌入式代理传递)到目前为止我找到的所有解决方案都是系统级的,并且将改变整个Android设备的代理设置,这是我不想要的.
我正在尝试通过反射在 android 中设置 ssid、代理、ipsetting,并且我通过反射成功地在 android 中设置了 ssid 和简短的 ip 设置,我的问题是我想通过反射以编程方式设置代理设置,并且我看到的大部分代码都说实现STATIC 和 NONE选项但设备我 hv 代理选项作为NONE 和 MANUAL都是相同的?下面是我的代理的代码,请建议我到底应该更改什么才能为手动代理实现工作:
public static void setWifiProxySettings(WifiConfiguration config,
WifiSetting wifiSetting) {
try {
Object linkProperties = getField(config, "linkProperties");
if (null == linkProperties)
return;
Class proxyPropertiesClass = Class
.forName("android.net.ProxyProperties");
Class[] setHttpProxyParams = new Class[1];
setHttpProxyParams[0] = proxyPropertiesClass;
Class lpClass = Class.forName("android.net.LinkProperties");
Method setHttpProxy = lpClass.getDeclaredMethod("setHttpProxy",
setHttpProxyParams);
setHttpProxy.setAccessible(true);
Class[] proxyPropertiesCtorParamTypes = new Class[3];
proxyPropertiesCtorParamTypes[0] = String.class;
proxyPropertiesCtorParamTypes[1] = int.class;
proxyPropertiesCtorParamTypes[2] = …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试调试围绕WebView构建的Android应用程序.我负责处理的开发网络环境(不是我的选择,它是'企业'安全决策)是WPA WiFi +代理服务器+代理身份验证.
虽然上一个非常有用的答案的说明很棒,但我正在尝试找到一种方法来配置代理主机:端口和用户名:密码.
我的约束是:
Android应用程序不是我平常的事情,再次不是我的选择,所以如果我公然缺少细节,那就好了;)
我需要在一个国家/地区中无法使用的WebView中加载一些url,因此我尝试将代理与WebView一起使用。我在SO(/sf/answers/1291736911/)上找到了一个解决方案,它可以与无需身份验证的代理一起使用。但是我需要使用用户名和密码设置代理。
有些方法没有帮助:
1)使用标头加载网址
class ProxyAuthWebViewClient extends WebViewClient {
String proxyUserName;
String proxyPassword;
public ProxyAuthWebViewClient(String proxyUserName, String proxyPassword){
this.proxyUserName = proxyUserName;
this.proxyPassword = proxyPassword;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
loadUrl(view, url, proxyUserName, proxyPassword);
return true ;
}
}
public void loadUrl(WebView view, String url, String proxyUserName, String proxyPassword){
UsernamePasswordCredentials creds= new UsernamePasswordCredentials(proxyUserName, proxyPassword);
Header credHeader = BasicScheme.authenticate(creds, "UTF-8", true);
Map<String, String> header = new HashMap<String, String>();
header.put(credHeader.getName(), credHeader.getValue());
view.loadUrl(url, header);
}
Run Code Online (Sandbox Code Playgroud)
2)在setProxy方法中添加密码和用户(以下完整代码):
Authenticator.setDefault(
new Authenticator() …Run Code Online (Sandbox Code Playgroud) 所以这个解决方案适用于Android 4.4.4,然而,代码停止在Android-L开发人员预览上工作,有没有人有一些Android-L的工作代码?或者我自己如何获取代码的任何提示?
这是我用于KitKat的当前方法(并且有效)
@TargetApi(Build.VERSION_CODES.KITKAT)
private static boolean setKitKatWebViewProxy(WebView webView, String host, int port) {
Context appContext = webView.getContext().getApplicationContext();
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port + "");
System.setProperty("https.proxyHost", host);
System.setProperty("https.proxyPort", port + "");
try {
Class applictionCls = Class.forName(FinalVariables.APPLICATION_CANONICAL_NAME);
Field loadedApkField = applictionCls.getField("mLoadedApk");
loadedApkField.setAccessible(true);
Object loadedApk = loadedApkField.get(appContext);
Class loadedApkCls = Class.forName("android.app.LoadedApk");
Field receiversField = loadedApkCls.getDeclaredField("mReceivers");
receiversField.setAccessible(true);
ArrayMap receivers = (ArrayMap) receiversField.get(loadedApk);
for (Object receiverMap : receivers.values()) {
for (Object rec : ((ArrayMap) receiverMap).keySet()) {
Class clazz = rec.getClass();
if (clazz.getName().contains("ProxyChangeListener")) …Run Code Online (Sandbox Code Playgroud)