谁有安卓三大邪恶软件邪恶游戏发几个、、、、、要灰常...

  用了安卓3个月,楼主平时没事就淘淘软件。看到隔壁楼有人问有什么好软件,一回帖才发现要说的话好多,索性直接开个楼给大家说说我觉得挺好的软件。  用了安卓3个月,楼主平时没事就淘淘软件。看到隔壁楼有人问有什么好软件,一回帖才发现要说的话好多,索性直接开个楼给大家说说我觉得挺好的软件。  用了安卓3个月,楼主平时没事就淘淘软件。看到隔壁楼有人问有什么好软件,一回帖才发现要说的话好多,索性直接开个楼给大家说说我觉得挺好的软件。
楼主发言:19次 发图:2张 | 更多
  沙发先自己坐,吼吼
  ⊙o⊙,第一次碰到直播  
  好支持  
  刘明  
  爆楼下菊花  
  ireader,天涯  
  首先说楼主和女生所以软件方面可能偏向小女生一点,大家表介意啊。  再来说楼主用的这些软件,主要是以美化,实用为主,功能强大为主。(不过话说好像大家都是因为这个吧)  咳咳,废话好像有点多,大家自动忽略...  先发个清单,等下在一个个细扒。  1.apk清理助手
4.一键锁屏  5.anyview
6.360软化大师
7.ES文件浏览器
8.go桌面  9.go开关小部件
11.WidgetLocker
12.八门神器  13.大姨吗
14.动态企鹅桌面时钟
15.关机重启
16.可爱女生闹钟  17.快图浏览
18.漫画魔屏
19.沐浴的小猫
20.糗事百科
21.天天动听
  22.瓦力短信
23.腾讯手机精灵
24.我要换字体
25.小猫记事本  26.有道词典
27.中华万年历
  我的安卓刚被我弄坏了T^T  
  马克  
  太瘦  
  先说第一个,apk清理助手。看名字好像是个清理手机垃圾的,其实不然。  它其实是apk文件***包卸载工具,主要是批量卸载***包,当然软件也可以啦。刚开始用安卓的时候,感觉很不习惯,楼主之前是用塞班贝拉的,塞班系统就是简单,实用些。相比较安卓而言有好有坏...嗯,有点跑题。接着说软件  身边很多同学都用安卓,后来发现他们下载完软件,装上以后也不删掉***包,我就觉得很郁闷,这不是浪费内存么。后来自己用也被他们整的不敢删。后来用apk找了个小白鼠***包试了试,嘛事没有。这一下我就省了好多内存啊,嘿嘿。  如果这个软件功能只是这个,那楼主自己都想把自己拍死。其实我觉得这个软件最好的地方就是“蓝牙分享apk”,刚开始以为***包删了,这个功能也废了,但试了试,我就立即爱上这个软件。好软件,大家分享嘛!
  楼主呢  
  回复第12楼(作者:@人性本腐 于
00:44)  先说第一个,apk清理助手。看名字好像是个清理手机垃圾的,其实不然。  它其实是apk文件***……  ==========  ***包浪费内存?***包你不下载到SD卡里的么?  
  第二个应该不用我多说,360手机卫士,大家应该都很熟悉。杀毒防御类软件很多,但360真的应该算是在里面做的出彩的,至少功能比较多。  这个就不细扒了
  @unluckeyfreak13
00:47:15  回复第12楼(作者:@人性本腐 于
00:44)  先说第一个,apk清理助手。看名字好像是个清理手机垃圾的,其实不然。  它其实是apk文件***……  ==========  ***包浪费内存?***包你不下载到SD卡里的么?......  -----------------------------  关键我用的g21内存是固定,相比较而言,我大多软件都是安在手机里,sd卡就剩1G多。所以这个功能对我这种苦逼的人,很有用!!
  好吧,顶一下安卓,我推荐个熊猫桌面吧  
  正点闹钟很好用,地瓜和大姨吗。。好奇是什么。用有你的短信,搜狗的输入法,皮肤很强大。
我查查 很好用,菜市场买包黑胡椒粉都会给建议价格,一扫描就看出正盗版。各种地图也不错,习惯百度地图,换乘路线都很清楚,就是一些城市交通系统不更新,让人很蛋疼。
  作为一个天涯er怎么能不说掌上天涯呢。。。  
  用 iBook看电子书。。。目前最喜欢的看书软件。。。日历用佐佐。。。感觉不太好,讨厌日历有天气啊什么的乱七八糟的东西,播放软件用vplay。。。感觉一般,有啥好的日历和播放器乜?我不拿手机玩游戏视频看的很少,图标太多很不爽,全部软件也就两页多  
  3.地瓜
这好像是当乐网的客户端,我推荐它的原因一个是因为它的游戏特别多,哦、楼主手机里大多游戏不是在地瓜就是在当乐网下载的。  但最主要的是它可以自动***数据包,刚开始用安卓的时候,我特激动,因为楼主人生离不开游戏,原来塞班游戏太少了,现在好不容易逮到一个游戏多得,那我怎么能浪费资源呢?这是不道德的,可后来我傻眼了,好多上百M的游戏全部要安数据包,这对一个根本是刚入门的菜鸟,简直就是大神才能完成的。  说的有点多,总结一下 1.游戏库比较大
2.自动***数据包
  一键锁屏和后面的关机重启我就一块扒了,主要就一个功能,保护电源键。楼主手机电源键那叫一个难按,有时候关机废了老半天劲,也没管成功,我就给急了,直接代替他。  现在除了开机按个0.5秒,开锁按一下,平时基本忽略电源键。
  马  
  强力马克!!!明天下载Σ(?□?;)!  
  马克,好瘦!!!!
  嘛嘛嘛~  
  马一个  
  马克,  
  说到阅读软件,我身边好多人都用的是ireader,楼上TZ也说是ireader,刚开始楼主也用,觉得还行,就是界面有些单调。但后来我就发现了一个缺点,楼主是个实诚孩子,啥都喜欢量大,电子书也是,于是我就把我所有的库存都塞进去了,这可有400多本,一本一本找太麻烦了,ireader又没有搜索功能,我只能果断弃之。(不过后来好像听同学说ireader也有搜索功能了,也不知道是不是)  Anyview么,就是界面比较小清新,老版我也用过,所以才明白他新版的改变真的很大,根本一点以前的影子都没有。关键是好看呀,我其实还是最在乎美观,比较肤浅,有很多细节我都喜欢,书的封面,纸的暗纹。一个软件美观加实用,楼主这么注重外观的人,不用说,你懂得...
  有点晚了,楼主睡觉去了。大家晚安,明天接着扒。  还有就是楼主想说,帖子里扒的软件大多是楼主觉得好多人不了解,甚至没听过的,像QQ,掌中天涯,搜狗什么的,这些太普及了我觉得没有扒的必要。但这些确实是装机必备。楼主开这个楼就是想跟大家分享分享经验,同是天涯儿,好软件肯定大家分享。(说的好像又有点多)  楼主已睡,明日继续
  前排马克,此贴必火[$WAP_BR$]话说我的手机内存总是红色状态,清理完十秒钟又红了,这种情况怎么办啊?[$WAP_BR$]另外总是有小广告,天天都要手动按“清除”,好郁闷  
  最爱用8684公交
  感觉这应该是某一个软件的广告贴  
  马克。  
  海卓,安卓优化大师,uc,天涯轻,我查查,钛备份,墨迹天气,刷机精灵,授权管理。。。。。。。,,  
  @晗飞入晨曦
01:36:15  前排马克,此贴必火[$WAP_BR$]话说我的手机内存总是红色状态,清理完十秒钟又红了,这种情况怎么办啊?[$WAP_BR$]另外总是有小广告,天天都要手动按“清除”,好郁闷  ----------------------------  前一种状况大概是因为手机的内存不够用了,才会这样。如果你没有root,可以尝试或者删除一些没用的软件。  好多软件里面都有广告,一联网它就悄悄地偷你的流量,你可以用流量防火墙禁止某些软件联网,就应该没问题啦。楼主我是试过的。
  @人性本腐
01:22:52  说到阅读软件,我身边好多人都用的是ireader,楼上TZ也说是ireader,刚开始楼主也用,觉得还行,就是界面有些单调。但后来我就发现了一个缺点,楼主是个实诚孩子,啥都喜欢量大,电子书也是,于是我就把我所有的库存都塞进去了,这可有400多本,一本一本找太麻烦了,ireader又没有搜索功能,我只能果断弃之。(不过后来好像听同学说ireader也有搜索功能了,也不知道是不是)  Anyview.....  -----------------------------  400多本真心不算多,我手机里至少有两千本书--
  先来几张图    
  接着开始扒。  360优化大师,这个软件说白了就是360的简化版,就连界面都很相似。呢我干嘛还要用呢?因为360楼主设了密码,每次进入都要一遍一遍的输密码。楼主懒人一个,咋方便咋来,就装了这个优化手机的软件,不需要的筒子可以无视。  
  Es文件浏览器,我觉得这个应该没有什么好扒的了,大多文件管理的软件功能其实都一样,没什么区别。但楼主为什么选它嘞,我会告诉你是因为它可以换界面背景吗?深深地鄙视我一下。    
  go桌面也算是为我的美化事业做了很大一番功劳,它的优点不在于主题,特效,关键是很多小细节全部可以自己DIY,也可以好几个主题的部分重新组合,变成一个新主题。原来也用过魔秀主题,熊猫桌面什么的,但一些细节部分真的是没这个做的好。    
    Go开关,这个应该算是go桌面的工具部件,也是为了方便。很多机子里都自带电源控制,但楼主手机里的就黑不溜秋,放在那特别难看,这个界面应该算是相同软件里做的不错的,但功能、快捷程度也是没得说的。
  SD女佣/SD卡清理器,这个主要就是用来清理sd卡上的临时文件,还有一个功能我也很喜欢,就是软件还原为初始状态和冻结软件。另外很重要的一点要告诉筒子们,这个需要root授权才可以。  
  WidgetLocker,完全可以自己DIY界面,大到解锁类型,小道解锁图标全部都可以换成自己喜欢的,而且它还提供很多种解锁方式,爱疯啊,htc啊,都有。总之,这个很不错。现在好像有原版和汉化版,推荐汉化,跟原版几乎无差别。    
  八门神器,这软件的功能十分强大,主要就是可以修改游戏一些软件的数据。但说白了也就是一***工具,举个例子,楼主原来玩和风物语,游戏里很多建筑都需要拿游戏里的钻石买,但这些钻石只能做任务或者是充值,但是任务给的钻石太少了,一不小心按错了,咱的好长时间的钻石(其实总共也没超20)就又都没了,楼主那叫一个心疼啊。但群众智慧是无穷的,这个软件诞生了。。但是提醒一点,物极必反,适量就可以了,不用刷得太多。而且有些东西楼主认为还是自己一点一滴的玩,比较有趣,毕竟游戏使用来享受过程的。所以这个软件还是用在一些大家一些无能为力的地方比较好,不推荐刷级什么的。  p.s
这个软件需要root  
  继续继续,正愁没什么好软件用。。
  大姨吗,这个就只适用女生了。顾名思义,这是大姨妈的管理软件。除了最基本的日历功能,还有很多贴心小功能:针对性的小贴士;通过专业测试获取调理方案,还可以量身打造减肥计划,虽然我一次都没坚持下来。最关键是困惑了楼主好多年的周期问题终于解决了,嘿嘿。  
  动态企鹅桌面时钟,这个是一萌物,除了可以当时钟插件,还能当成桌面宠物养。平时没事,跟他玩个剪刀石头布,猜个大小或者给小企鹅喂喂食,慢慢你就发现小企鹅的表情动作丰富了起来。用了才发现真的很可爱。(有汉化版)    
  我喜欢沐浴的小猫,一直在用的说,猫猫好可爱呀,而且我也是个猫控的说.
  可爱女生闹钟
一个优点就界面好看。供筒子们参考参考  
  马克  
  快图浏览
管理、浏览图片方面功能做得很细:移动,复制图片,轻松寻找隐藏图片,图片分享什么的。总之挺不错的    
  @河边走也不湿鞋
00:58:20  作为一个天涯er怎么能不说掌上天涯呢。。。  本帖发自天涯社区手机客户端  -----------------------------  顶
  漫画魔屏
就一看漫画,下漫画的软件。漫画种类算多的,更新也算快,有了wifi,那就是想下啥下啥。  
  马一个....
  沐浴的小猫
电池插件,还能监控手机温度,那只小猫没电了就跟你生气,发怒,你就一瓶牛奶搞定它。还可以给小猫换浴缸换造型,也算是美观实用娱乐多方结合了。(有汉化版)  
  瓦力短信
说到这个,楼主就只能说它真的很符合楼主的需求,支持换肤(主题算是多了),界面可爱,功能也很齐全。吼吼,我喜欢!    
  腾讯手机精灵
大概很多人都用的是360手机精灵或者豌豆荚,我用这个唯一一个好处那就是可以一键root,就鼠标轻轻一按,root就成功了。里面软件也挺丰富,还可以把很多不能从手机内存移到sd卡上的软件搬过去,不过你有没有root。  
  差不多快扒完了,今天应该能结束。  剩下的晚上在更新
  看书我爱用
因为那个书摆书架上一目了然的界面很舒服  而且有定时提醒做眼保健操的小设置
  mark  
  马克。
  马  
  好多软件和楼主一样的,我也是喜欢淘软件和游戏,握爪!!哈哈  
  回复第44楼,@人性本腐  Es文件浏览器,我觉得这个应该没有什么好扒的了,大多文件管理的软件功能其实都一样,没什么区别。但楼主为什么选它嘞,我会告诉你是因为它可以换界面背景吗?深深地鄙视我一下。  --------------------------  楼主,我想请问一下,HTC手机怎么截屏啊???  
  马克一下
  @一路无刹车
13:50:54  回复第44楼,@人性本腐  Es文件浏览器,我觉得这个应该没有什么好扒的了,大多文件管理的软件功能其实都一样,没什么区别。但楼主为什么选它嘞,我会告诉你是因为它可以换界面背景吗?深深地鄙视我一下。  --------------------------  楼主,我想请问一下,HTC手机怎么截屏啊???  ......  -----------------------------  一直按住电源键,同时按下主屏键(就是一个小房子图标的触控键),屏幕会突然变白,就已经截屏成功了,可以在相册查看。前提是,必须升级到安卓2.3.4的版本。不用刷机不用root。
  马克  
  @人性本腐
00:44:19  先说第一个,apk清理助手。看名字好像是个清理手机垃圾的,其实不然。  它其实是apk文件***包卸载工具,主要是批量卸载***包,当然软件也可以啦。刚开始用安卓的时候,感觉很不习惯,楼主之前是用塞班贝拉的,塞班系统就是简单,实用些。相比较安卓而言有好有坏...嗯,有点跑题。接着说软件  身边很多同学都用安卓,后来发现他们下载完软件,装上以后也不删掉***包,我就觉得很郁闷,这不是浪费内存么。后来自己用.....  -----------------------------  清理手机垃圾的用哪个比较好,因为低内存我刚恢复出厂设置木有得备份,悲剧了
  马克~  
  楼主,换字体,你用的哪一个?
  好贴 马一个~  
  同问火腿肠怎么换字体~~π_π不会换~  
  ////////
  看书我用多看   大家输入法都用什么呀
  马克  手机里软件少的可怜
  @乱世浮生丶
15:12:12  同问火腿肠怎么换字体~~π_π不会换~  本帖发自天涯社区手机客户端  -----------------------------  我的是索尼 可以用go桌面换字体
  @脸大是病呀
15:34:12  看书我用多看  大家输入法都用什么呀  -----------------------------  搜狗
  马克!
  @脸大是病呀  那个只能换go桌面上的字体,换不了系统的字体。我想要像楼主那样整个换掉!  
  好物~  
  这什么输入法,这么可爱  
  有个驱蚊的软件 很实用
使用“←”“→”快捷翻页
setStandardFontFamily("");//设置 WebView 的字体,默认字体为 "sans-serif"
setDefaultFontSize(20);//设置 WebView 字体的大小,默认大小为 16
setMinimumFontSize(12);//设置 WebView 支持的最小字体大小,默认为 8
LOAD_CACHE_ONLY:
不使用网络,只读取本地缓存数据LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
结合使用(离线加载):
if (NetStatusUtil.isConnected(getApplicationContext())) {
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//根据cache-control决定是否从网络上取数据。
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//没网,则从本地获取,即离线加载
webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能
webSettings.setDatabaseEnabled(true);
//开启 database storage API 功能
webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能
String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;
webSettings.setAppCachePath(cacheDirPath); //设置
Application Caches 缓存目录
注意: 每个 Application 只调用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()
加载一个网页:webView.loadUrl("");加载apk包中的一个html页面webView.loadUrl("file:///android_asset/test.html");加载手机本地的一个html页面的方法:webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");
添加 HTTP 请求头(Header)
loadUrl(String url, Map&String, String& additionalHttpHeaders)
WebViewClient
WebViewClient就是帮助WebView处理各种通知、请求事件的。打开网页时不调用系统浏览器, 而是在本WebView中显示:
mWebView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
WebViewClient方法
WebViewClient mWebViewClient = new WebViewClient()
shouldOverrideUrlLoading(WebView view, String url)
最常用的,比如上面的。
//在网页上的所有加载都经过这个方法,这个函数我们可以做很多操作。
//比如获取url,查看url.contains(“add”),进行添加操作
shouldOverrideKeyEvent(WebView view, KeyEvent event)
//重写此方法才能够处理在浏览器中的按键事件。
onPageStarted(WebView view, String url, Bitmap favicon)
//这个事件就是开始载入页面调用的,我们可以设定一个loading的页面,告诉用户程序在等待网络响应。
onPageFinished(WebView view, String url)
//在页面加载结束时调用。同样道理,我们可以关闭loading 条,切换程序动作。
onLoadResource(WebView view, String url)
// 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
shouldInterceptRequest(WebView view, String url)
// 拦截替换网络请求数据,
API 11开始引入,API 21弃用
shouldInterceptRequest (WebView view, WebResourceRequest request)
// 拦截替换网络请求数据,
从API 21开始引入
onReceivedError(WebView view, int errorCode, String description, String failingUrl)
// (报告错误信息)
doUpdateVisitedHistory(WebView view, String url, boolean isReload)
//(更新历史记录)
onFormResubmission(WebView view, Message dontResend, Message resend)
//(应用程序重新请求网页数据)
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)
//(获取返回信息授权请求)
onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
//重写此方法可以让webview处理https请求。
onScaleChanged(WebView view, float oldScale, float newScale)
// (WebView发生改变时调用)
onUnhandledKeyEvent(WebView view, KeyEvent event)
//(Key事件未被加载时调用)
将上面定义的WebViewClient设置给WebView:
webView.setWebViewClient(mWebViewClient);
WebChromeClient
WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 :方法中的代码都是由Android端自己处理。
WebChromeClient mWebChromeClient = new WebChromeClient() {
//获得网页的加载进度,显示在右上角的TextView控件中
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress & 100) {
String progress = newProgress + "%";
//获取Web页中的title用来设置自己界面中的title
//当加载出错的时候,比如无网络,这时onReceiveTitle中获取的标题为 找不到该网页,
//因此建议当触发onReceiveError时,不要使用获取到的title
public void onReceivedTitle(WebView view, String title) {
MainActivity.this.setTitle(title);
public void onReceivedIcon(WebView view, Bitmap icon) {
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
public void onCloseWindow(WebView window) {
//处理alert弹出框,html 弹框的一种方式
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//处理confirm弹出框
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult
//处理prompt弹出框
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
同样,将上面定义的WebChromeClient设置给WebView:
webView.setWebChromeClient(mWebChromeClient);
WebView 的一些方法
前进、后退
goBack()//后退
goForward()//前进
goBackOrForward(intsteps) //以当前的index为起始点前进或者后退到历史记录中指定的steps,
如果steps为负数则为后退,正数则为前进
canGoForward()//是否可以前进
canGoBack() //是否可以后退
清除缓存数据:
clearCache(true);//清除网页访问留下的缓存,由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.
clearHistory()//清除当前webview访问的历史记录,只会webview访问历史记录里的所有记录除了当前访问记录.
clearFormData()//这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据。
WebView的状态:
onResume() //激活WebView为活跃状态,能正常执行网页的响应
onPause()//当页面被失去焦点被切换到后台不可见状态,需要执行onPause动过, onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。
pauseTimers()//当应用程序被切换到后台我们使用了webview, 这个方法不仅仅针对当前的webview而是全局的全应用程序的webview,它会暂停所有webview的layout,parsing,javascripttimer。降低CPU功耗。
resumeTimers()//恢复pauseTimers时的动作。
destroy()//销毁,关闭了Activity时,音乐或视频,还在播放。就必须销毁。
但是注意:webview调用destory时,webview仍绑定在Activity上.这是由于自定义webview构建时传入了该Activity的context对象,因此需要先从父容器中移除webview,然后再销毁webview:
rootLayout.removeView(webView);
webView.destroy();
判断WebView是否已经滚动到页面底端 或者 顶端:getScrollY() //方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.getHeight()或者getBottom() //方法都返回当前WebView这个容器的高度getContentHeight()返回的是整个html的高度,但并不等同于当前整个页面的高度,因为WebView有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例.因此,更正后的结果,准确的判断方法应该是:
if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) {
//已经处于底端
if(webView.getScrollY() == 0){
//处于顶端
返回上一次浏览的页面
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return super.onKeyDown(keyCode, event);
调用JS代码
WebSettings webSettings = mWebView .getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new InsertObj(), "jsObj");
上面这是前提!!!然后实现上面的类,这个类提供了四个方法,注释的非常清楚。
class InsertObj extends Object {
//给html提供的方法,js中可以通过:var str = window.jsObj.HtmlcallJava(); 获取到
@JavascriptInterface
public String HtmlcallJava() {
return "Html call Java";
//给html提供的有参函数 : window.jsObj.HtmlcallJava2("IT-homer blog");
@JavascriptInterface
public String HtmlcallJava2(final String param) {
return "Html call Java : " +
//Html给我们提供的函数
@JavascriptInterface
public void JavacallHtml() {
runOnUiThread(new Runnable() {
public void run() {
//这里是调用方法
mWebView.loadUrl("javascript: showFromHtml()");
Toast.makeText(Html5Activity.this, "clickBtn", Toast.LENGTH_SHORT).show();
//Html给我们提供的有参函数
@JavascriptInterface
public void JavacallHtml2(final String param) {
runOnUiThread(new Runnable() {
public void run() {
mWebView.loadUrl("javascript: showFromHtml2('IT-homer blog')");
Toast.makeText(Html5Activity.this, "clickBtn2", Toast.LENGTH_SHORT).show();
Android 调用js有个漏洞:
在 WebView 中长按保存图片
1. 给 WebView添加***
mWebview.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
2. 获取点击的图片地址
先获取类型,根据相应的类型来处理对应的数据。
首先判断点击的类型 WebView.HitTestResult result = ((WebView) v).getHitTestResult();
int type = result.getType();
type有这几种类型:WebView.HitTestResult.UNKNOWN_TYPE
未知类型WebView.HitTestResult.PHONE_TYPE
***类型WebView.HitTestResult.EMAIL_TYPE
电子邮件类型WebView.HitTestResult.GEO_TYPE
地图类型WebView.HitTestResult.SRC_ANCHOR_TYPE
超链接类型WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE
带有链接的图片类型WebView.HitTestResult.IMAGE_TYPE
单纯的图片类型WebView.HitTestResult.EDIT_TEXT_TYPE
选中的文字类型
获取具体信息,图片这里就是图片地址 String imgurl = result.getExtra();
3. 操作图片
你可以弹出保存图片,或者点击之后跳转到显示图片的页面。
最后整理一下代码:
mWebView.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
WebView.HitTestResult result = ((WebView)v).getHitTestResult();
if (null == result)
int type = result.getType();
if (type == WebView.HitTestResult.UNKNOWN_TYPE)
// 这里可以拦截很多类型,我们只处理图片类型就可以了
switch (type) {
case WebView.HitTestResult.PHONE_TYPE: // 处理拨号
case WebView.HitTestResult.EMAIL_TYPE: // 处理Email
case WebView.HitTestResult.GEO_TYPE: // 地图类型
case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超链接
case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
case WebView.HitTestResult.IMAGE_TYPE: // 处理长按图片的菜单项
// 获取图片的路径
String saveImgUrl = result.getExtra();
// 跳转到图片详情页,显示图片
Intent i = new Intent(MainActivity.this, ImageActivity.class);
i.putExtra("imgUrl", saveImgUrl);
startActivity(i);
Android5.0 WebView中Http和Https混合问题
在Android 5.0上 Webview 默认不允许加载 Http 与 Https 混合内容:
解决办法:
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
参数类型说明:MIXED_CONTENT_ALWAYS_ALLOW:允许从任何来源加载内容,即使起源是不安全的;MIXED_CONTENT_NEVER_ALLOW:不允许Https加载Http的内容,即不允许从安全的起源去加载一个不安全的资源;MIXED_CONTENT_COMPATIBILITY_MODE:当涉及到混合式内容时,WebView 会尝试去兼容最新Web浏览器的风格。
在5.0以下 Android 默认是 全允许,但是到了5.0以上,就是不允许,实际情况下很我们很难确定所有的网页都是https的,所以就需要这一步的操作。
在这里在分享一个:文章里有:设置 WebView 接受所有网站的***
Cookie 相关
之前同步 cookie 需要用到 CookieSyncManager 类,现在这个类已经被抛弃了。如今 WebView 已经可以在需要的时候自动同步 cookie 了,所以不再需要创建 CookieSyncManager 类的对象来进行强制性的同步 cookie 了。现在只需要获得 CookieManager 的对象将 cookie 设置进去就可以了。
从服务器的返回头中取出 cookie 根据Http请求的客户端不同,获取 cookie 的方式也不同,请自行获取。
1、客户端通过以下代码设置cookie,如果两次设置相同,会覆盖上一次的。
* 将cookie设置到 WebView
* @param url 要加载的 url
* @param cookie 要同步的 cookie
public static void syncCookie(String url,String cookie) {
if (Build.VERSION.SDK_INT & Build.VERSION_CODES.LOLLIPOP) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(url, cookie);//如果没有特殊需求,这里只需要将session id以"key=value"形式作为cookie即可
同步 cookie 要在 WebView 加载 url 之前,否则 WebView 无法获得相应的 cookie,也就无法通过验证。
cookie应该被及时更新,否则很可能导致WebView拿的是旧的session id和服务器进行通信。
2、CookieManager会将这个Cookie存入该应用程序data/data/package_name/app_WebView/Cookies.db
3、打开网页,WebView从数据库中读取该cookie值,放到http请求的头部,传递到服务器
* 获取指定 url 的cookie
public static String syncCookie(String url) {
CookieManager cookieManager = CookieManager.getInstance();
return cookieManager.getCookie(url);
4、清除Cookie:
// 这个两个在 API level 21 被抛弃
CookieManager.getInstance().removeSessionCookie();
CookieManager.getInstance().removeAllCookie();
// 推荐使用这两个, level 21 新加的
CookieManager.getInstance().removeSessionCookies();// 移除所有过期 cookie
CookieManager.getInstance().removeAllCookies(); // 移除所有的 cookie
private void removeCookie(Context context) {
CookieManager.getInstance().removeAllCookies(new ValueCallback&Boolean&() {
public void onReceiveValue(Boolean value) {
// 清除结果
避免WebView内存泄露的一些方式
1.可以将 Webview 的 Activity 新起一个进程,结束的时候直接System.exit(0);退出当前进程;启动新进程,主要代码:
AndroidManifest.xml 配置文件代码如下
android:name=".ui.activity.Html5Activity"
android:process=":lyl.boon.process.web"&
&intent-filter&
&action android:name="com.lyl.boon.ui.activity.htmlactivity"/&
&category android:name="android.intent.category.DEFAULT"/&
&/intent-filter&
&/activity&
在新进程中启动 Activity ,里面传了 一个 Url:
Intent intent = new Intent("com.lyl.boon.ui.activity.htmlactivity");
Bundle bundle = new Bundle();
bundle.putString("url", gankDataEntity.getUrl());
intent.putExtra("bundle",bundle);
startActivity(intent);
然后在 Html5Activity 的onDestory() 最后加上 System.exit(0); 杀死当前进程。
2.不能在xml中定义 Webview ,而是在需要的时候创建,并且Context使用 getApplicationgContext(),如下代码:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
mWebView = new WebView(getApplicationContext());
mWebView.setLayoutParams(params);
mLayout.addView(mWebView);
3.在 Activity 销毁的时候,可以先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。代码如下:
protected void onDestroy() {
if (mWebView != null) {
mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
mWebView.clearHistory();
((ViewGroup) mWebView.getParent()).removeView(mWebView);
mWebView.destroy();
mWebView =
super.onDestroy();
有一个非常不错的 Html5Activity 加载类帖出来:
package com.lyl.
import android.graphics.B
import android.os.B
import android.os.M
import android.support.v7.app.AppCompatA
import android.util.L
import android.view.KeyE
import android.webkit.GeolocationP
import android.webkit.WebChromeC
import android.webkit.WebS
import android.webkit.WebV
import android.webkit.WebViewC
import com.lyl.test.R;
public class Html5Activity extends AppCompatActivity {
private String mU
private LinearLayout mL
private WebView mWebV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
Bundle bundle = getIntent().getBundleExtra("bundle");
mUrl = bundle.getString("url");
Log.d("Url:", mUrl);
mLayout = (LinearLayout) findViewById(R.id.web_layout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
mWebView = new WebView(getApplicationContext());
mWebView.setLayoutParams(params);
mLayout.addView(mWebView);
WebSettings mWebSettings = mWebView.getSettings();
mWebSettings.setSupportZoom(true);
mWebSettings.setLoadWithOverviewMode(true);
mWebSettings.setUseWideViewPort(true);
mWebSettings.setDefaultTextEncodingName("utf-8");
mWebSettings.setLoadsImagesAutomatically(true);
//调用JS方法.安卓版本大于17,加上注解 @JavascriptInterface
mWebSettings.setJavaScriptEnabled(true);
saveData(mWebSettings);
newWin(mWebSettings);
mWebView.setWebChromeClient(webChromeClient);
mWebView.setWebViewClient(webViewClient);
mWebView.loadUrl(mUrl);
public void onPause() {
super.onPause();
webView.onPause();
webView.pauseTimers(); //小心这个!!!暂停整个 WebView 所有布局、解析、JS。
public void onResume() {
super.onResume();
webView.onResume();
webView.resumeTimers();
* 多窗口的问题
private void newWin(WebSettings mWebSettings) {
//html中的_bank标签就是新建窗口打开,有时会打不开,需要加以下
//然后 复写 WebChromeClient的onCreateWindow方法
mWebSettings.setSupportMultipleWindows(false);
mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
* HTML5数据存储
private void saveData(WebSettings mWebSettings) {
//有时候网页需要自己保存一些关键数据,Android WebView 需要自己设置
mWebSettings.setDomStorageEnabled(true);
mWebSettings.setDatabaseEnabled(true);
mWebSettings.setAppCacheEnabled(true);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
mWebSettings.setAppCachePath(appCachePath);
WebViewClient webViewClient = new WebViewClient(){
* 多页面在同一个WebView中打开,就是不新建activity或者调用系统浏览器打开
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
WebChromeClient webChromeClient = new WebChromeClient() {
//=========HTML5定位==========================================================
//需要先加入权限
//&uses-permission android:name="android.permission.INTERNET"/&
//&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&
//&uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/&
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
public void onGeolocationPermissionsHidePrompt() {
super.onGeolocationPermissionsHidePrompt();
public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);//注意个函数,第二个参数就是是否同意定位权限,第三个是是否希望内核记住
super.onGeolocationPermissionsShowPrompt(origin, callback);
//=========HTML5定位==========================================================
//=========多窗口的问题==========================================================
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.
transport.setWebView(view);
resultMsg.sendToTarget();
//=========多窗口的问题==========================================================
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
mWebView.goBack();
return super.onKeyDown(keyCode, event);
protected void onDestroy() {
super.onDestroy();
if (mWebView != null) {
mWebView.clearHistory();
((ViewGroup) mWebView.getParent()).removeView(mWebView);
mWebView.loadUrl("about:blank");
mWebView.stopLoading();
mWebView.setWebChromeClient(null);
mWebView.setWebViewClient(null);
mWebView.destroy();
mWebView =
原谅我,忘了出自哪里,如果侵权请联系我,一定删除。
最后放上项目地址:
觉得不错的点个喜欢呗,要是直接赞赏的话,那真是太荣幸了。
参考链接:还有一些零散的链接。
一个有文艺情怀的程序员。

参考资料

 

随机推荐