Catastrophe

私信 关注
dayday_baday
码龄6年
  • 266,380
    被访问量
  • 86
    原创文章
  • 30,419
    作者排名
  • 61
    粉丝数量
  • 于 2015-08-16 加入CSDN
获得成就
  • 获得72次点赞
  • 内容获得85次评论
  • 获得95次收藏
荣誉勋章
TA的专栏
  • golang
    1篇
  • 睡前读物Scrapy
    8篇
  • python
    34篇
  • 爬虫
    22篇
  • android开发
    33篇
  • java
    2篇
  • Git
    2篇
  • android测试
    4篇
  • 数据库
    5篇
  • Linux
    2篇
  • leetcode
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

CLUSTERDOWN The cluster is down 的解决办法

在本机上单机创建redis cluster执行命令报错 (error) CLUSTERDOWN The cluster is downredis-cli --cluster check 127.0.0.1:6379给出问题原因 not all 16384 slots are covered by nodes因此是部分slot分配的节点已经挂掉了输入命令 redis-cli --cluster fix 127.0.0.1:6379问题解决...
原创
4阅读
0评论
0点赞
发布博客于 18 小时前

【golang】go 使用sarama写入kafka数据时间戳问题

查看消息时间戳的命令:kafka-console-consumer --bootstrap-server localhost:9092 --property print.timestamp=true --topic test --from-beginning发现sarama生产者推送到kafka的CreateTime均为-1。而命令行推送到kafka的时间戳正常。原因:sarama默认支持的是0.8.2的kafka版本,而timestamp的支持是从0.10版本开始的。因此需要初始化生产者配置时指
原创
154阅读
0评论
0点赞
发布博客于 5 月前

抖音_signature参数分析

以抖音作者页为例:https://www.iesdouyin.com/share/user/xxx从接口可以得到作者发布的视频列表:https://www.iesdouyin.com/web/api/v2/aweme/post/?user_id=xxx&sec_uid=&count=21&max_cursor=0&aid=1128&_signature=etVQHxATJIUJI1pwOqp2dnrVUA&dytk=dd51884f959fa649020e
原创
2911阅读
10评论
1点赞
发布博客于 9 月前

Scrapy logging日志重复输出的解决方法

如果是完全在scrapy流程中的日志,一般有三种输出方式。from scrapy.log import loggerlogger.info("info")# 会抛出warning,警告scrapy.log已经被废弃,此时的logger为 scrapy.log# ScrapyDeprecationWarning: Module `scrapy.log` has been depreca...
原创
635阅读
3评论
0点赞
发布博客于 10 月前

【爬虫】Python http.client能拿到数据而requests状态码异常

遇到一个case,抓包之后丢进postman无法正常拿到数据,使用curl和requests时也无法正常取到数据。而java,go,python的http.client库可以正常取到数据。当url和headers相同时,不同库的请求拿到结果不同。对requests和http.client请求抓包进行对比。headers一个个看过去发现requests多了一个accept请求头,那accept请求...
原创
157阅读
0评论
1点赞
发布博客于 1 年前

python sorted函数自定义排序

一般使用sorted函数的时候,直接会将key设置为一个lambda表达式的匿名函数。这样一般可以直接对字典的key或者value进行排序。但是今天刷leetcode的时候,需要对字典value的数组进行逐一排序,当value一致时,按key的字母顺序排序。这时候就需要自定义比较方法了。通过functools中的com_to_key将一个函数转变为参数key的值。https://leetco...
原创
565阅读
0评论
0点赞
发布博客于 1 年前

scrapy请求头首字母大写的解决方法

背景:同样的url, headers, payload进行post请求,requests可以正确的拿到数据,而scrapy则无法通过验证。通过抓包发现,scrapy所发出的请求头首字母均为大写,在postman中将请求头的各个key改为小写后能正确拿到请求数据。原因:scrapy的Request对象通过传入的headers字典初始化了一个scrapy.http.Headers对象,Head...
原创
451阅读
0评论
0点赞
发布博客于 1 年前

uiautomatorviewer报错:java.lang.reflect.InvocationTargetException

在使用uiautomatorviewer对设备进行截屏时,出现异常Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException解决方法:通过android studio对sdk tool进行了更新,从25.x 升级到了26.1.1升级后sdk manager没有界面了,ui...
原创
794阅读
0评论
0点赞
发布博客于 2 年前

在linux服务器上搭建mitmproxy

pip install mitmproxymitmdump --listen-host 0.0.0.0 -p 5555如果服务器与手机不在同一局域网,确定手机能连通服务器的情况下,启动mitmproxy时增加–set block_global=false...
原创
335阅读
0评论
0点赞
发布博客于 2 年前

Python过滤字符串中的unicode乱码

最近获取到的字符串里除了正常的汉字字符外,有一些unicode的乱码在里面显示异常。 我是憨憨因此想要过滤掉这些显示异常的字符。str = eval(str.__repr__())可以通过repr获取raw string,进行正则匹配替换。这样就将字符串中的乱码unicode过滤掉啦!~...
原创
3216阅读
0评论
1点赞
发布博客于 2 年前

brew cask install java8 失败

用网上看到的命令,结果brew cask 找不到指定版本brew tap caskroom/versionsbrew cask install java8Error: Cask ‘java8’ is unavailable: No Cask with this name exists.搜到一条命令brew cask install adoptopenjdk8下载结束后java -ve...
原创
7759阅读
0评论
2点赞
发布博客于 2 年前

(六)Scrapy的抓取流程——Downloader

当通过Scheduler取出一条request之后,engine就会调用_download方法进行对这条request的下载。图中downloader的fetch方法就是下载器对request的操作方法。通过DownloaderMiddlewareManager在download方法中定义了process_request, process_response, process_excepti...
原创
130阅读
0评论
0点赞
发布博客于 2 年前

【Pyppeteer】ConnectionError:Connection is closed解决办法

想着用Pyppeteer写一个渲染web页面的接口,测试的时候发现过不了多久。常驻的browser在newPage()创建的时候就会报错。一直提示Connection is closed。这种情况应该也适于其他连接异常的情况。出现这种情况的原因是建立连接是通过websocket库,而websocket连接默认过期时间是20s,所以经过20s后连接断开也就无法控制浏览器了。解决方法:在...
原创
3322阅读
0评论
2点赞
发布博客于 2 年前

inode使用率过高的解决方法

周末因为一个鸟程序的日志每条都疯狂输出到一个文件,直接把inode塞满了。记一下排查方法和删除大量文件所做的一些措施。问题排查for i in /*; do echo $i; find $i | wc -l; done首先使用上面的这条命令一步步缩小范围,确定在哪个目录下inode的节点数过多异常。最后我锁定到了日志目录,可是里面只有几个日志文件,在目录下直接运行这条命令也只能看到可...
原创
5446阅读
0评论
0点赞
发布博客于 2 年前

(五)Scrapy的抓取流程——Scheduler

在Engine中,是通过Engine实例化的slot对象进行对scheduler对象的初始化,和任务状态的记录。# engine.py中ExecutionEngine的crawl方法def crawl(self, request, spider): assert spider in self.open_spiders, \ "Spider %r not opened w...
原创
1318阅读
0评论
0点赞
发布博客于 2 年前

(四)Scrapy的抓取流程——Engine

上一篇提到在Crawler的crawl方法中,启动了Engine。而如Scrapy流程图中描述的,抓取的流程由Engine主导完成。engine是ExecutionEngine的实例,初始化时会初始化诸如scheduler、downloader、scraper(itempipeline和spidermiddleware这一块)等属性。engine.py所在的目录,抓取流程中的主要模块。E...
原创
498阅读
0评论
1点赞
发布博客于 2 年前

(三)Scrapy的抓取流程——CrawlerProcess

上一章提到scrapy的启动是通过ScrapyCommand对象中的crawler_process实现的,crawler_process是通过crawler.py下的CrawlerProcess类创建的实例。该文件下定义了Crawler,CrawlerProcess和CrawlerRunner三个类。CrawlerProcess是CrawlerRunner的子类,而命令文件中的self.craw...
原创
2383阅读
0评论
0点赞
发布博客于 2 年前

(二)Scrapy的初始化

初始化一个scrapy项目时往往是通过startproject 和 genspider两个命令。了解scrapy进行命令输入时的逻辑是怎样实现的之后,我们可以看看commands文件夹下这两个命令是如何运行的。(1) startproject当我们新建一个项目时通过scrapy startproject <project_name> [project_dir] 命令实现。输入...
原创
654阅读
0评论
0点赞
发布博客于 2 年前

(一)Scrapy的命令行

最近一直都是在用自己写的抓取框架做爬虫,还是系统的整理一下Scrapy相关的知识,做一个old school 的爬虫。爬虫的整个流程,就是发送网络请求,处理返回的内容两个过程。然后我们将这个流程细化;如何准备需要访问的链接,需要访问的链接应该是哪些链接;发送请求时我们带上什么,如何更快的发送更多请求;对返回的内容需要做哪些操作……不讲实例,只看实现。从Scrapy的源码来读Scrapy到底是如...
原创
2645阅读
0评论
1点赞
发布博客于 2 年前

Python装饰器之lru_cache

在流畅的Python里看到的,做一下笔记。在运行一些比较耗时的函数,如递归时重复计算相同参数的函数时。通过python自带的装饰器functools.lru_cache可以将函数结果保存起来,作为缓存在重复计算时直接返回结果。减少函数运行的时间。以斐波那契数列的递归为例,首先实现一个递归的斐波那契方法:def fib(n): if n < 2: return n...
原创
397阅读
0评论
0点赞
发布博客于 2 年前

Python的增量赋值

对于python来说,a=a+b 和a+=b的区别是什么。增量赋值运算符+=和*=的表现取决于第一个操作对象。实际上会调用对象的__iadd__和__imul__方法,当该方法未实现的时候会调用__add__和__mul__方法。而对于可变对象一般都实现了__iadd__和__imul__方法。所以对于不可变对象来说两种方式并没有区别,而可变对象的增量赋值则会在原地进行操作,因此图中的数组的内...
原创
302阅读
0评论
1点赞
发布博客于 2 年前

【爬虫】一道爬虫面试题

最近在群里看到老哥提到这题面试题,刚好有关js的混淆。自己撸一下思路怎么做。http://shaoq.com:7777/exam这里第一行的字除了python和题都是由css给span标签设置的style。直接对这个地址进行访问的话,返回的内容只是设置了5.5秒后进行了一次地址的重定向。并对cookie进行了一次设置所以可以通过session保存cookie后重复访问这一链接,但是...
原创
875阅读
0评论
2点赞
发布博客于 2 年前

Python日志分级别输出到不同文件

思路:为logger设置2个handler,再对2个handler设置不同的filter进行日志过滤。通过supervisor管理项目时,会有stdout和stderr两种日志路径的设置方式,通过给一个logger设置2个StreamHandler后,分别对handler设置日志级别的过滤,实现日志的分级输出。import loggingimport syslog = logging.g...
原创
4045阅读
1评论
0点赞
发布博客于 2 年前

【爬虫】瓜子二手车反爬状态码203破解

当发送请求到瓜子二手车的主页时,发现返回状态码203。从浏览器进行访问时正常,发现只有带cookie时才能正常访问瓜子的页面。直接上结论,当浏览器不带cookie访问网页时,会返回一段html自动执行里面的javascript代码。带上cookie后,再跳转到网站页面。如图中画框的地方所示。重要的就是里面的anti部分和xredirect部分。anti部分会生成antipas的值,xredi...
原创
2273阅读
2评论
1点赞
发布博客于 2 年前

【supervisor】启动时报错Error: Another program is already listening on a port...

当启动supervisor时报错$ supervisord -c supervisord.confError: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before startin...
原创
879阅读
0评论
0点赞
发布博客于 2 年前

【Redis】Redis持久化的两种方式

redis的两种持久化方式,快照和只追加文件(aof),快照保存数据,AOF保存每次执行的命令。配置文件中的dir 选项指定了快照文件和aof文件的保存位置。【快照】快照持久化的命令:bgsave和save,通过save命令执行时不会创建子线程争抢资源。配置文件:save 60 1000 #60s内1000次操作触发快照保存stop-writes-on-bgsave-error no...
原创
104阅读
0评论
1点赞
发布博客于 2 年前

【leetcode】662.二叉树最大宽度

https://leetcode-cn.com/problems/maximum-width-of-binary-tree/求一颗二叉树的最大宽度最开始用层级遍历的方式,记录一层的长度,将空节点的也放入队列中计算宽度,当二叉树过大时,会超出时间限制。原代码: def widthOfBinaryTree(self, root): &quot;&quot;&quot; :type ro...
原创
383阅读
0评论
0点赞
发布博客于 2 年前

Python对序列使用 * 需要注意的地方

以列表为例,在初始化列表的时候我们可以用 * 来复制元素。arr = [0]*3 #此时arr为[0,0,0]arr2 = [[0]]*3 #此时arr2为[[0],[0],[0]]此时arr和arr2中每个元素的内存地址都是相同的,又因为列表为Python中的可变对象。所以对arr2中的一个元素进行list操作时,会影响到其他元素。因此在使用*进行列表的初始化时需要注意列表中...
原创
179阅读
0评论
0点赞
发布博客于 2 年前

Python不可变的映射类型MappingProxyType

Python中的字典是可变的,当需要某个映射关系不能被修改时。可以通过MappingProxyType创建不可修改的映射实例。from types import MappingProxyTyped = {'a':1, 'b':2}d_view = MappingProxyType(d)当对d_view的键值进行修改时,会报错。...
原创
1018阅读
0评论
1点赞
发布博客于 2 年前

pyenv安装python版本BUILD FAILED

今天在一台服务器上安装python版本时,一直报错BUILD FAILED。这种情况可以下载python安装包后离线运行当pyenv install时会在.pyenv/cache文件夹下查看对应版本的Python安装包是否存在,因此可以按照先前的下载地址在该文件夹下加载好安装包。wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0...
原创
1955阅读
2评论
0点赞
发布博客于 3 年前

Fiddler抓部分app时网络连接失败

通过fiddler抓app时,在安装手机安装fiddler证书后,发现有的app可以正常联网,有的app连不上网,如知乎、微博。在Options-HTTPS 取消勾选Decrypt HTTPS traffic后一切正常。...
原创
12045阅读
15评论
13点赞
发布博客于 3 年前

Message: 'chromedriver' executable needs to be in PATH的处理

下载与chrome对应版本的chromedriver,解压后放入chrome的文件夹下,并将该路径添加到环境变量。如:C:\Program Files (x86)\Google\Chrome\Application下载地址添加环境变量后仍然没有用的情况下,将chromedriver 放入python解释器目录下。如虚拟环境下的venv/Scripts...
原创
390阅读
0评论
0点赞
发布博客于 3 年前

Python使用opencv 时 ImportError: DLL load failed: 找不到指定的模块

开发环境 windows7 + python3.6在安装opencv-python后导入cv2时报错ImportError: DLL load failed: 找不到指定的模块。网上的教程有下载Visual C++ Redistributable for Visual Studio 2015解决,有将python3.dll放入文件夹下解决,也有通过wheel文件进行下载的。尝试了这些方法后都...
原创
2476阅读
1评论
0点赞
发布博客于 3 年前

python简单的异步编程 concurrent.futures

concurrent.futures 简单的异步编程 自从知道了这个,已经忘了threading,multiprocessing怎么用。文档:https://pythonhosted.org/futures/简单的用法,首先Executor作为抽象类,而ThreadPoolExecutor和ProcessPoolExecutor为它的子类分别用来创建线程池和进程池。Executor三...
原创
346阅读
0评论
0点赞
发布博客于 3 年前

使用DataX进行数据同步

DataX 是一个异构数据源离线同步工具,可以实现数据源之间的数据同步。 ODPSWriter插件适合于TB,GB数量级的数据传输,如果需要传输PB量级的数据,可以选择dt task工具 ;工具下载下载DataX wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz解压DataX tar ...
原创
6313阅读
0评论
1点赞
发布博客于 3 年前

Pandas修改csv文件某一列的值

将本来存为 省名 城市名 的字段修改为只有城市名 1. 通过pandas读取csv文件 2. 获取某一列的值并进行类型转换 3. 通过apply方法中的匿名函数进行数据的处理 4. 输出到原始文件中import pandas as pddata = pd.read_csv('price.csv',encoding='utf-8', )data[u...
原创
35362阅读
4评论
8点赞
发布博客于 3 年前

zlib和gzip的压缩比较

背景:压缩网页html文档并存储,压缩后能够减少数据库的负担思路:使用python自带的zlib或gzip进行字符串内容的压缩使用:压缩等级越高,所用时间越长1. zlib(默认压缩等级为6)@time_countdef zlib_compress(): res = zlib.compress(html.encode()) print('zlib压缩后%d' %...
原创
9011阅读
3评论
0点赞
发布博客于 3 年前

python selenium带插件启动

from selenium import webdriveroptions = webdriver.ChromeOptions()options.add_extension(&quot;xxx.crx&quot;)browser = webdriver.Chrome(chrome_options=options)
原创
2249阅读
0评论
0点赞
发布博客于 3 年前

Centos7 Flask+gunicorn+nginx+supervisor 简单配置

Nginx 监听的端口收到来自客户端的请求,根据配置文件转发给WSGI WSGI调用flask框架生成对应路由的html,发送给Nginx Nginx将响应发送给客户端【Nginx】 1.安装 yum install nginx2.修改配置文件server { listen 80; server_name _; # 外部地址 ...
原创
472阅读
0评论
0点赞
发布博客于 3 年前

pymysql.err.InterfaceError: (0, '')解决办法

背景在使用手机模拟器抓取数据时,通过mitmproxy进行返回数据的解析存储。 因为不清楚mitmproxy在设置脚本后是一次开启还是每次请求都会运行一次,所以在脚本里直接开启了数据库连接并没有关闭。 写好脚本后,在爬取过程中,时间过久后会报错pymysql.err.InterfaceError: (0, ”) 在response方法里关闭数据库也没有什么用,甚至存不进数据库。解决...
原创
24827阅读
0评论
11点赞
发布博客于 3 年前

xpath中匹配正则表达式

etree = lxml.html.fromstring(html) ns = {“re”: “http://exslt.org/regular-expressions“} etree.xpath(“//div[re:match(@class,’&lt;正则表达式&gt;’)]”, namespace=ns) 用正则表达式匹配有规律的某种属性...
原创
15196阅读
9评论
2点赞
发布博客于 3 年前

虚拟环境下的Pip引用外部环境的解决方法

今天用python -m venv venv生成虚拟环境venv 通过venv\scripts\activate 激活并进入虚拟环境后,通过pip list发现已经安装了和外部相同的包。 通过 pip -V命令发现pip命令的路径为C盘环境变量的路径。 此时可以通过 venv\scripts\python -m pip -V 或 venv\scripts\pip -V 指定pip命令的路径。...
原创
2292阅读
2评论
1点赞
发布博客于 3 年前

【爬虫】使用Selenium爬取腾讯漫画

目标:以自动下载指定漫画的最新一话为例,或下载某部指定漫画。 思路:因为在漫画页内漫画图片地址是动态加载出来的,因此选用Selenium进行浏览器的模拟操作,处罚js行为进行地址的加载。再获取到图片地址后进行下载。每部漫画的地址都是有一个固定的id,可以直接请求指定漫画的详情页。ROOT_URL = "http://ac.qq.com"TargetUrls = [ ROOT_U...
原创
7450阅读
4评论
4点赞
发布博客于 3 年前

【爬虫】Python使用requests爬取代理IP并验证可用性

在编写爬虫的过程中为了避免IP地址被Ban掉,可以通过抓取IP代理后,通过代理IP进行对网页的访问。网络上有很多提供免费代理IP的网站,我们可以选择西刺进行代理IP的爬取并存储到csv文件中,并通过多进程来验证爬取IP的可用性。http://www.xicidaili.com/就提供了很多免费的代理IP。通过requests和lxml进行网页的爬取和解析。 在爬取之前我们首先设置请求头,...
原创
7750阅读
0评论
2点赞
发布博客于 3 年前

Redis 操作数据常用命令

Redis的五种数据结构,字符串(STRING),列表(LIST),集合(SET),散列(HASH),有序集合(ZSET)。字符串:可以存储字节串,整数,浮点数。GET&lt;key-name&gt; 获取键的值SET &lt;key-name&gt; &lt;value&gt; 设置键值对DEL &lt;key-name&gt; 删除一个键INCR &lt;key-name&g...
原创
317阅读
0评论
0点赞
发布博客于 3 年前

基本排序算法(Python实现)

Python列表基本排序算法1.选择排序在每次循环中将剩下未排序的最小值交换到未排序的最前一位。def selectionSort(lyst): for i in range(0, len(lyst) - 1): minIndex = i for j in range(i + 1, len(lyst)): if lys
原创
245阅读
0评论
0点赞
发布博客于 3 年前

《用Python写网络爬虫》读书笔记

【builtwith】 pip install builtwith 分析网站使用的技术 import builtwith builtwith.parse(url)【whois】 pip install python-whois 通过WHOIS协议查询域名的注册者 import whois whois.whois(‘baidu.com’)【urllib】urllib2在pytho
原创
1430阅读
0评论
0点赞
发布博客于 3 年前

MongoDB基本操作

基于文件存储的数据库,json格式存储数据启动服务 :sudo service mongodb startmongo 进入命令行界面1.嵌入式关系:{..:[{..,..}]}2.引用式关系:引用文档的_id字段来建立关系{..:[ObjectId("...")]}use [database] 连接(创建)指定数据库db: 查看当前数据库show dbs:查看所有的数据库d...
原创
202阅读
0评论
0点赞
发布博客于 3 年前

python 将图片转换为字符串

通过PIL库进行操作,将图片中每个像素与字符集中的元素进行一一对应,实现将图片转换为字符串的效果。实现后的效果: 首先导入Image模块,用于对图像进行操作,并创建字符库用于替换,从字符的密集进行排序from PIL import Image#创建用于替换的字符集chs = list('''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]
原创
2516阅读
0评论
0点赞
发布博客于 4 年前

【Android测试】AndroidStudio通过UIAutomator进行测试

在eclipse中使用UIAutomator时步骤较为繁琐,而在Studio环境下只需要添加引用,编写测试类,运行测试类就可以实现。步骤较简单。1.配置环境在包依赖中添加对UIAutomator的引用,这里需要注意,引用包版本不能高于最低编译版本,也就是 minSdkVersion 的值,期初我的 minSdkVersion 为15,与添加的v18产生冲突。 // Set this depen
原创
8046阅读
6评论
3点赞
发布博客于 5 年前

【Android测试】自动化测试框架简介

转载地址:http://www.jianshu.com/p/334fbc00be05目前常用的可用于APP自动化测试的框架有以下几个:1、Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出。实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义
转载
545阅读
0评论
0点赞
发布博客于 5 年前

【Android测试】在AndroidStudio中进行单元测试

参考文章:http://www.jianshu.com/p/03118c11c199 推荐android测试相关:http://www.jianshu.com/collection/b26df74781cb单元测试的流程使用AndroidStudio进行单元测试时,与当前网上众多资料进行比较。在较新版本下(当前我使用的是2.0)的studio中不需要自己进行BuildVariants的设置以及依赖
原创
11453阅读
0评论
2点赞
发布博客于 5 年前

百度定位与车联网API实现天气预报

百度定位的环境配置1. 获取密钥 通过开放平台进行应用注册获取百度提供的appkey值,这个值用于进行定位时的认证。选择android端app勾选所有权限进行app的注册。注册成功后会得到相应的appkey值。 2.环境配置 下载定位sdk文件后,将下载后的文件解压到工程libs目录下。在工程配置文件的application标签下进行各类权限以及定位service的声明,并
原创
3071阅读
2评论
0点赞
发布博客于 5 年前

ListView展示两种布局

关于在ListView中显示两种布局时,某次曾经出现过ViewHolder的类转换异常。解决方法是在convertView不为null时,进行holder与type的判断,如果不匹配,则将convertView设置为null。if ((convertView != null && convertView.getTag() instanceof ViewHolder1 && type == TYPE_
原创
2631阅读
0评论
0点赞
发布博客于 5 年前

腾讯优图实现人脸对比

1.腾讯优图的开发者申请,通过QQ号登陆并绑定邮箱后,在应用管理中查看申请得到的AppID,SecretID以及SecretKey。2.通过http进行请求发送时,都需要在请求头中添加对应信息。对签名进行的算法在相关sdk中有具体实现。 通过StringBuffer存储算法实现过程中生成的sign值。在sdk的Youtu.java中有具体样例代码。 3.将com.youtu和com.yout
原创
7010阅读
0评论
0点赞
发布博客于 5 年前

Phonegap的环境搭建

在配置完开发android 所需的环境后,现在已经有了java JDK,android SDK以及eclipse与ADT,现在还需要下载ANT打包工具以及Node.js。ANT下载链接:http://ant.apache.org/bindownload.cgi Node.js 下载链接 : https://nodejs.org/en/ 安装完成后可以通过命令行来验证是否成功 然后进行c
原创
298阅读
0评论
0点赞
发布博客于 5 年前

【DeskClock】修改桌面控件的大小

DeskClock桌面小组件不会随着组件大小的变化而变化,影响客户体验。 关于DeskClock的桌面小组件的布局的路径packages/app/deskclock/res/layout 下Digital_appwidget.xml 关于中间时钟数字和日期的显示在include的layout下 digital_widget_time.xml 分别显示 时间,日期和下个闹钟时间
原创
1034阅读
0评论
0点赞
发布博客于 5 年前

【AudioProfile】情景模式下音效的默认设置

情景模式下默认关闭拨号音效与锁屏音 在sprd平台下,AudioProfile是packages/apps下单独的模块,因此对应的代码需要在AudioProfile下寻找,在AudioProfileSoundSettings.java下进行了情景模式声音的设置。 private CheckBoxPreference mDtmfTone; private CheckBoxPrefe
原创
1597阅读
3评论
0点赞
发布博客于 5 年前

【SystemUI】修改下拉状态栏颜色

需要改变下拉状态栏的背景色。 关于这方面的代码路径 frameworks/base/packages/SystemUI中通过androidSDK自带的工具uiautomatorviewer 可以获得控件的id 顶部状态栏的id 为header 在frameworks/base/packages/SystemUI 中寻找id为header的控件在res/layout文件夹下的status_b
原创
4533阅读
0评论
1点赞
发布博客于 5 年前

ViewFlipper实现图片的轮播

之前一直使用ViewPager进行图片的轮播实现,今天看慕课网的视频才发现还有这样的控件可以实现图片的轮播。首先使用ViewFlipper进行基本的图片切换,在xml中我们可以直接定义ViewFlipper的属性和其中的具体图片。 <ViewFlipper android:id="@+id/view_flipper" android:layout_width="
原创
2371阅读
4评论
3点赞
发布博客于 5 年前

【Midtest】工程模式下测试界面的修改

需要将以一行三个button显示的工程模式下的测试选项改为列表形式。 首先可以使用ListView对相应的选项进行显示。 ListView所需要的:1.数据源 2.显示形式1.首先在xml文件中定义主界面所需要的控件 <TextView android:id="@+id/tv" android:layout_width="match_parent"
原创
1255阅读
0评论
0点赞
发布博客于 5 年前

【Launcher3】默认壁纸的设置

系统默认壁纸的存放路径:frameworks/base/core/res/res/drawable 下 图片文件名:default_wallpaper查看代码中对默认壁纸图片的引用 有关java代码在WallpaperManager中public static InputStream openDefaultWallpaper(Context context) { final S
原创
5080阅读
0评论
0点赞
发布博客于 5 年前

【Dialer】自定义暗码进入测试模式

需要设置在拨号界面输入相应的字符串后进入到不同的模式(工程模式,工厂模式) 在SpecialCharSequenceMgr中进行相关设置 路径:\code\packages\apps\Dialer\src\com\android\dialer\SpecialCharSequenceMgr.java static boolean handleSecretCode(Context context,
原创
1278阅读
0评论
0点赞
发布博客于 5 年前

【Notification】屏蔽特定应用的通知提示

需要默认屏蔽特定app的通知提示 设置app是否接收通知的界面 点击每个条目进去的界面 AppNotificationSettings extends SettingsPreferenceFragmentprivate SwitchPreference mBlock; //条目通过Preference设置mBlock.setChecked(mAppRow.banned);mBlock.
原创
9715阅读
10评论
2点赞
发布博客于 5 年前

【Settings】设置APN

APN的配置文件一般以apns-conf开头 在Linux环境下查找文件 ,调用命令 find –name “apns-conf*” 有些是在overlay下的文件,源文件是open-source下的文件,可以根据需求选择是否单拉出来。一般APN需求包含图中这些项目 在xml文件中单个节点的属性描述<apn carrier="name" mcc=""
原创
968阅读
0评论
0点赞
发布博客于 5 年前

【ValidationTools】去除工程模式下某项测试

进入相应页面 要求去掉ItemTest中的GPSTest选项 Adb logcat | grep “START u0”命令,查看启动的activity的log 在ItemTestActivity中点击GPSTest选项就会进入GPS Test的页面Code/packages/apps/validationtools中查看ListItemTestActivity的相关代码ListItem
原创
864阅读
0评论
1点赞
发布博客于 5 年前

【Settings】默认关闭数据流量

Settings中大部分的默认值可以通过SettingsProvider的res/values/defaults中的默认值的修改实现,比如wifi默认开启关闭,GPS默认开启关闭。 但是defaults.xml中没有默认开关数据流量的选项 一般defaults中没有的可以通过DatabaseHelper来进行修改 frameworks/base/packages/SettingsProvide
原创
2992阅读
1评论
1点赞
发布博客于 5 年前

【AudioProfile】默认铃声列表中有重复

在相应界面运行adb命令获取当前界面的包名 查看RingtonePickerActivity.java \packages\providers\MediaProvider\src\com\android\providers\media\RingtonePickerActivityDialogInterface.OnClickListener mRingtoneClickListener
原创
991阅读
0评论
0点赞
发布博客于 5 年前

【AudioProfile】修改情景模式下的字串

将图片中的Default notification sound 改为 Default notification本界面是AudioProfileSoundSettings extends PreferenceActivityNotification这个标签的定义private static final String KEY_NOTIFICATION = "notification_sound";pr
原创
492阅读
0评论
0点赞
发布博客于 5 年前

【AudioProfile】设置震动默认开启

使此处的震动默认开启,关于在情景模式下的设置在AudioProfileSoundSettings中 可以找到相关的preference mVibrateprivate CheckBoxPreference mVibrate;addPreferencesFromResource(R.xml.audio_profile_sound_settings);private static final Str
原创
1473阅读
0评论
0点赞
发布博客于 5 年前

【LatinIME】默认开启键盘按键声

code\packages\inputmethods\LatinIME\java\src\com\android\inputmethod\latin\settings 关于language和input的键盘设置,在inputmethod文件夹下 需要默认开启Sound on keypress PreferencesSettingsFragment extends SubScreenFra
原创
975阅读
0评论
0点赞
发布博客于 5 年前

【Settings】设置何时启动屏保

设置在何时开启Daydream 界面中设置在上下文菜单中点击when to dream Daydream部分的源码路径:packages\apps\Settings\src\com\android\settings DreamSettings.javaonCreateOptionsMenu(Menu menu, MenuInflater inflater)中// create "whe
原创
1094阅读
2评论
0点赞
发布博客于 5 年前

【SettingsProvider】默认开启WI-FI

不方便直接改动源码时,在device/overlay中相应版本目录下,利用比较工具将需要改动的文件复制一份到当前目录在该文件中进行代码的修改。1.默认开启wifi frameworks\base\packages\SettingsProvider\res\values\defaults.xml true
原创
272阅读
0评论
0点赞
发布博客于 5 年前

【Browser】浏览器横屏时程序崩溃

当浏览器切换到横屏状态时,程序崩溃。 AndroidManifest配置正常。 查看BrowserActivity部分的代码当在xml文件中设置android:configChanges的属性值有方向切换后,在屏幕切换方向时会自动调用onConfigurationChanged(Configuration newConfig)方法 当注释掉mController.onConfiguration
原创
314阅读
0评论
0点赞
发布博客于 5 年前

【DeskClock】开机闹钟横竖屏显示不同

开机闹钟:提前开机后响铃。 问题:当闹钟的横竖屏切换后,横屏时闹钟界面显示不完全。 需要找到监听开机后被唤醒的activity 开机的广播接收者在AlarmInitReciever.java的onRecieve()方法中与AlarmShutDownActivity()有关在AlarmShutDownActivity()中 分别是暂停,取消,取消并关机。在onCreate()中找到s
原创
558阅读
0评论
0点赞
发布博客于 5 年前

【Settings】去除使用GPS提供时间的选项

Settings的主界面在Settings.java中继承SettingsActivity 日期与时间的activity为DateTimeSettingsActivity继承自SettingsActivity在日期与时间中的自动确定日期与时间的选项中,用到ListPreference Android首选项框架ListPreference 在res/xml/date_time_prefs.
原创
850阅读
0评论
0点赞
发布博客于 5 年前

【Gallery3D】视频暂停时与桌面切换的显示问题

当视频暂停时,切换到桌面,视频的播放界面会透明并闪一下桌面,再打开播放器也会在播放区域闪一下桌面。播放中的视频与桌面的切换一切正常。在MovieActivity中负责播放的是MoviePlayer类型的mPlayer。 当音频焦点改变时的监听器,当失去播放音频的焦点时,mPlayer执行onPauseViddeo()方法。 在onCreate方法中执行的方法,当mPlayer为空时对象的创建。在
原创
638阅读
0评论
0点赞
发布博客于 5 年前

【Gallery3D】播放视频时上下文菜单的设置

需要将播放视频时的上下文菜单中的一个功能移除。 这份源码中apps下没有videoPlayer这种类似的文件夹。 此时视频播放器可能在gallery2下面以gallery3D的形式存在主要的几个类,【MovieActivity】,【MovieControllerOverlay】,【MoviePlayer】……查看MovieActivity中的具体代码 一般点击按钮显示菜单有两种方法,一种是po
原创
432阅读
0评论
0点赞
发布博客于 5 年前

【Music】横屏歌词显示效果不好

全屏时下拉的时候,歌词变成第一排,上划时,歌词编程显示的下一排歌词在播放的主界面中有显示 播放界面是MediaPlaybackActivity 这个类实现了LRC.PositionProvider接口查看activity的相关布局文件 在这个布局中显示歌词部分 整个linearlayout的visibility为gone属性,歌词由自定义的view 继承ListView生成一个LyricL
原创
660阅读
0评论
0点赞
发布博客于 5 年前

【Music】音乐切换封面没有变化

问题:从一首有封面的音乐切换到没有封面的音乐,封面没有变化 MediaPlaybackActivity :音乐播放中的界面,切换到没有封面的音频时封面没有变化。 布局文件:R.layout.Audio_player.xml 封面在xml文件中的位置: 做到播放下一首的位置,首先找到播放下一首的图标位置 audio_player_common.xml中 这一部分。 前后播放是
原创
476阅读
0评论
0点赞
发布博客于 5 年前

【SounderRecorder】关闭录音机后台时保存录音文件

今天遇到的问题是在SoundRecorder正在运行的时候,当退出到主界面时,长按Home键调出最近开启程序,将SoundRecorder关闭后,仍在录音,需要实现的是关闭程序并存储录音文件。 在按back键退出后,activity并没有执行onDestroy()方法,因此所需的操作可在onDestroy()中执行。 大致分为三步:1.停止录音。2.保存文件。3.退出程序关闭Notificati
原创
1383阅读
1评论
0点赞
发布博客于 5 年前

【SettingsProvider】修改系统初始化时默认时区

修改某一版本的默认时区找到system.prop 文件 将persist.sys.timezone 的值修改为想要调整的地区 当在单个机器上adb shell下改变该参数值后重启就会发现时间改变,但是恢复出厂设置会发现改动失败。对当前版本的代码进行全部编译 在out/target/product/w193_zte_chile 文件夹下找到 ,以scatter结尾的文件,使用flash t
原创
627阅读
0评论
0点赞
发布博客于 5 年前

【SettingsProvider】修改系统初始化时间与日期的格式

找到相应目录下的frameworks\base\packages\SettingsProvider\res\values\defaults.xml文件进行修改 <string name="time_12_24" translatable="false">12</string> <string name="def_date_format" translatable="false">dd-MM-yy
原创
521阅读
0评论
0点赞
发布博客于 5 年前

Git常用命令

git config ——global user.name //配置用户名称git config ——global user.email //配置电子邮件地址git config ——list //查看配置信息git clone ——将远程仓库拉取到本地git clone ——将远程仓库拉取到本地,并将新目录命名为git status ——
原创
239阅读
0评论
0点赞
发布博客于 5 年前

Git分布式工作流程

Git分布式工作流程1.集中式工作流所有人将自己的工作与中心仓库同步,在推送修改前,如果前面有人做出了修改并推送到服务器,必须先与前面的工作合并。Git不会让用户覆盖彼此的修改。2.集成管理者工作流每个开发者从官方仓库中克隆出自己的公开仓库,再将自己的修改推送上去并请求官方仓库的维护者拉取更新合并。维护者在本地测试变更,合入分支,推送回官方仓库。项目维护者推
转载
471阅读
0评论
0点赞
发布博客于 5 年前

DOM解析XML文件

DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的常用方法。在Java中使用DOM解析XML文件 1.DocumentBuilderFactory对象 2.DocumentBuilder对象 3.Document对象使用parse方法进行解析具体代码实现如下
原创
278阅读
0评论
0点赞
发布博客于 5 年前

canvas处理图片为圆形或圆角矩形

将bitmap处理为圆形或圆角矩形可以使用canvas重新绘图,通过设置背景与图片的相交部分显示来得到圆形或圆角矩形图片处理为圆形图片的方法public static Bitmap getCircleBitmap(Bitmap bit) { Bitmap bitmap = Bitmap.createBitmap(bit.getWidth(), bit.getHeight(), Con
原创
7582阅读
0评论
2点赞
发布博客于 6 年前

ContentProvider 内容提供者

内容提供者是android应用程序的主要模块,向应用程序提供内容。通过ContentResolver接口的实现对象来压缩以及提供数据给应用程序。只有在进行应用程序间数据分享时才需要使用内容提供者,否则可以直接使用SQLiteDatabase。ContentProvider是单例模式的,多个程序对其进行操作时,会由同一个ContentProvider进行处理,保证了数据的一致性。当ContentRes
原创
343阅读
0评论
0点赞
发布博客于 6 年前