微信登陆不成功案例:
当你使用微信登陆或分享的时候,微信的客户端会存储你的app在微信开放平台上配置的包名跟应用签名,如果你在自己的应用里面第一次使用微信登陆或分享后,你的应用相关的信息就会被微信客户端记录了,这时候你再换一个签名文件更改你的应用签名,点微信登陆就会出现没反应,并且友盟的那些回调都没有调用的情况,在更改签名后如果发现自己所有的配置和代码都没有问题的话可以删除手机上的微信。然后重新安装应用即可。
问题:
Android WebView加载H5时无法播放H5内的腾讯视频,一直显示“视频加载失败,请刷新页面重试”,点击重试也是一样。
Log打印:"Mixed Content: The page at 'https://...'was loaded over HTTPS, but requested an insecure video 'http://...'. Thisrequest has been blocked; the content must be served over HTTPS.", source:https://v.qq.com/iframe/player.html?vid=w0380o4nklu&tiny=0&auto=0
原因:
从Android5.0以后,WebView默认不支持同时加载Https和Http混合模式,当一个安全的站点(https)去加载一个非安全的站点(http)时,需要配置Webview加载内容的混合模式,一共有如下三种模式:
- MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全。
- MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式。
- MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。
在Android5.0以下,默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即总是允许WebView同时加载Https和Http;而从Android5.0开始,默认用MIXED_CONTENT_NEVER_ALLOW模式,即总是不允许WebView同时加载Https和Http。
虽然官网给出的建议是,为了安全考虑,使用MIXED_CONTENT_NEVER_ALLOW模式,但是在实际引用中,当我们的服务器已经升级到Https,但是一些页面的资源是第三方的,我们不能要求第三方也都升级到Https,所以我们只能根据系统版本,用代码去设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW。
解决方法:
在webview加载页面之前,设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW
1. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
2. webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
3. }
下面简述一下Get和Post区别:
1) GET请求的数据是放在HTTP包头中的,也就是URL之后,通常是像下面这样定义格式的,(而Post是把提交的数据放在HTTP正文中的)。
login.action?name=hyddd&password=idontknow&verify=%E4%BD%E5%A5%BD
a,以 ? 来分隔URL和数据;
b,以&来分隔参数;
c,如果数据是英文或数字,原样发送;
d,如果数据是中文或其它字符,则进行BASE64编码。
2)GET提交的数据比较少,最多1024B,因为GET数据是附在URL之后的,而URL则会受到不同环境的限制的,比如说IE对其限制为2K+35,而POST可以传送更多的数据(理论上是没有限制的,但一般也会受不同的环境,如浏览器、操作系统、服务器处理能力等限制,IIS4可支持80KB,IIS5可支持100KB)。
3)Post的安全性要比Get高,因为Get时,参数数据是明文传输的,而且使用GET的话,还可能造成Cross-site request forgery攻击。而POST数据则可以加密的,但GET的速度可能会快些。
Android WebView 被遮盖后 Javascript 脚本不执行解决办法
调用 WebView的 loadUrl加载页面后 Javascript脚本正常(location.href指向的链接可跳转),点链接后在 WebViewClient的 shouldOverrideUrlLoading 方法中对 URL 分析,并开启新 Activity 处理 URL 中包含的信息,关闭新 Activity 再返回 WebView 所在 Activity ,Javascript 脚本不执行(location.href 指向的链接不跳转)。
解决办法:
分别在 Activity的 onResume和 onPause事件方法中调用 WebView的 onResume和 onPause方法
Android如何让EditText不自动获取焦点
在项目中,一进入一个页面, EditText默认就会自动获取焦点。
那么如何取消这个默认行为呢?
在网上找了好久,有点 监听软键盘事件,有点 调用 clearFouse()方法,但是测试了都没有! xml中也找不到相应的属性可以关闭这个默认行为
解决之道:在EditText的父级控件中找一个,设置成
android:focusable="true" android:focusableInTouchMode="true"
这样,就把EditText默认的行为截断了!
Editext不适用ruqusetFocuse方法请求焦点。
2017/8/3
1.今天使用百度地图进行定位的时候,发现加载地图的时候会有一次黑屏的闪烁。查找资料发现因为SurfaceView的绘画是在setContentView之后的,所以会导致界面短暂黑屏(因为SurfaceView还没开始画),界面没有显示内容。解决办法:在activity加载setcontentView()之前加上getWindow().setFormat(PixelFormat.TRANSLUCENT);使窗口支持透明度。就没有了整个界面黑屏闪烁的效果了。
2.需求是: 使用viewpager加载多个gragment并需要禁止滑动,只能点击切换。解决办法:重写viewpager和它的oninterceptTouchEvent方法和onTouchEvent方法返回false进行截断。即可禁止滑动。另外,viewpager使用setcurrentItem()切换有一个动画,但是这个动画在切换不相邻的item的时候回依次将其中的item子项加载出来。如果不需要切换动画。可以使用setcurrenItem(int item,boolean smoothScorll)方法取消动画。