首页 文章 精选 留言 我的

精选列表

搜索[智能推荐],共10000篇文章
优秀的个人博客,低调大师

Spotify如何使用Cassandra实现个性化推荐

本文翻译自https://labs.spotify.com/2015/01/09/personalization-at-spotify-using-cassandra/在Spotify我们有超过6000万的活跃用户,他们可以访问超过3000万首歌曲的庞大曲库。用户可以关注成千上万的艺术家和上百个好友,并创建自己的音乐图表。在我们的广告平台上,用户还可以通过体验各种音乐宣传活动(专辑发行,艺人推广)发现新的和现有的内容。这些选项增加了用户的自主权和参与度。目前,用户在平台上已创建了超过15亿播放列表,并且,仅去年一年就播放了超过70亿小时的音乐。 但有时丰富的选择也让我们的用户感到些许困惑。如何从超过10亿个播放列表中找到适合锻炼时听的播放列表?如何发现与自己品味契合的新专辑?通过在平台上提供个性化的用户体验,我们帮助用户发现和体验相

优秀的个人博客,低调大师

推荐一款数据同步工具:FlinkX

FlinkX 1 什么是FlinkX FlinkX是基于flink的分布式离线数据同步框架,实现了多种异构数据源之间高效的数据迁移。 不同的数据源头被抽象成不同的Reader插件,不同的数据目标被抽象成不同的Writer插件。理论上,FlinkX框架可以支持任意数据源类型的数据同步工作。作为一套生态系统,每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。 2 工作原理 在底层实现上,FlinkX依赖Flink,数据同步任务会被翻译成StreamGraph在Flink上执行,工作原理如下图: 3 快速起步 3.1 运行模式 单机模式:对应Flink集群的单机模式 standalone模式:对应Flink集群的分布式模式 yarn模式:对应Flink集群的yarn模式 3.2 执行环境 Java: JDK8及以上 Flink集群: 1.4及以上(单机模式不需要安装Flink集群) 操作系统:理论上不限,但是目前只编写了shell启动脚本,用户可以可以参考shell脚本编写适合特定操作系统的启动脚本。 3.3 打包 进入项目根目录,使用maven打包: mvn clean package -Dmaven.test.skip 打包结束后,项目根目录下会产生bin目录和plugins目录,其中bin目录包含FlinkX的启动脚本,plugins目录下存放编译好的数据同步插件包 3.4 启动 3.4.1 命令行参数选项 model 描述:执行模式,也就是flink集群的工作模式 local: 本地模式 standalone: 独立部署模式的flink集群 yarn: yarn模式的flink集群,需要提前在yarn上启动一个flink session,使用默认名称"Flink session cluster" 必选:否 默认值:local job 描述:数据同步任务描述文件的存放路径;该描述文件中使用json字符串存放任务信息。 必选:是 默认值:无 plugin 描述:插件根目录地址,也就是打包后产生的plugins目录。 必选:是 默认值:无 flinkconf 描述:flink配置文件所在的目录(单机模式下不需要),如/hadoop/flink-1.4.0/conf 必选:否 默认值:无 yarnconf 描述:Hadoop配置文件(包括hdfs和yarn)所在的目录(单机模式下不需要),如/hadoop/etc/hadoop 必选:否 默认值:无 3.4.2 启动数据同步任务 以本地模式启动数据同步任务 bin/flinkx -mode local -job /Users/softfly/company/flink-data-transfer/jobs/task_to_run.json -plugin /Users/softfly/company/flink-data-transfer/plugins -confProp "{"flink.checkpoint.interval":60000,"flink.checkpoint.stateBackend":"/flink_checkpoint/"}" -s /flink_checkpoint/0481473685a8e7d22e7bd079d6e5c08c/chk-* 以standalone模式启动数据同步任务 bin/flinkx -mode standalone -job /Users/softfly/company/flink-data-transfer/jobs/oracle_to_oracle.json -plugin /Users/softfly/company/flink-data-transfer/plugins -flinkconf /hadoop/flink-1.4.0/conf -confProp "{"flink.checkpoint.interval":60000,"flink.checkpoint.stateBackend":"/flink_checkpoint/"}" -s /flink_checkpoint/0481473685a8e7d22e7bd079d6e5c08c/chk-* 以yarn模式启动数据同步任务 bin/flinkx -mode yarn -job /Users/softfly/company/flinkx/jobs/mysql_to_mysql.json -plugin /opt/dtstack/flinkplugin/syncplugin -flinkconf /opt/dtstack/myconf/conf -yarnconf /opt/dtstack/myconf/hadoop -confProp "{"flink.checkpoint.interval":60000,"flink.checkpoint.stateBackend":"/flink_checkpoint/"}" -s /flink_checkpoint/0481473685a8e7d22e7bd079d6e5c08c/chk-* 4 数据同步任务模版 从最高空俯视,一个数据同步的构成很简单,如下: { "job": { "setting": {...}, "content": [...] } } 数据同步任务包括一个job元素,而这个元素包括setting和content两部分。 setting: 用于配置限速、错误控制和脏数据管理 content: 用于配置具体任务信息,包括从哪里来(Reader插件信息),到哪里去(Writer插件信息) 4.1 setting "setting": { "speed": {...}, "errorLimit": {...}, "dirty": {...} } setting包括speed、errorLimit和dirty三部分,分别描述限速、错误控制和脏数据管理的配置信息 4.1.1 speed "speed": { "channel": 3, "bytes": 0 } channel: 任务并发数 bytes: 每秒字节数,默认为 Long.MAX_VALUE 4.1.2 errorLimit "errorLimit": { "record": 10000, "percentage": 100 } record: 出错记录数超过record设置的条数时,任务标记为失败 percentage: 当出错记录数超过percentage百分数时,任务标记为失败 4.1.3 dirty "dirty": { "path": "/tmp", "hadoopConfig": { "fs.default.name": "hdfs://ns1", "dfs.nameservices": "ns1", "dfs.ha.namenodes.ns1": "nn1,nn2", "dfs.namenode.rpc-address.ns1.nn1": "node02:9000", "dfs.namenode.rpc-address.ns1.nn2": "node03:9000", "dfs.ha.automatic-failover.enabled": "true", "dfs.client.failover.proxy.provider.ns1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider", "fs.hdfs.impl.disable.cache": "true" } } path: 脏数据存放路径 hadoopConfig: 脏数据存放路径对应hdfs的配置信息(hdfs高可用配置) 4.1.4 restore "restore": { "isRestore": false, "restoreColumnName": "", "restoreColumnIndex": 0 } restore配置请参考断点续传 4.2 content "content": [ { "reader": { "name": "...", "parameter": { ... } }, "writer": { "name": "...", "parameter": { ... } } } ] reader: 用于读取数据的插件的信息 writer: 用于写入数据的插件的信息 reader和writer包括name和parameter,分别表示插件名称和插件参数 4.3 数据同步任务例子 详见flinkx-examples子工程 5. 数据同步插件 5.1 读取插件 关系数据库读取插件 分库分表读取插件 HDFS读取插件 HBase读取插件 Elasticsearch读取插件 Ftp读取插件 Odps读取插件 MongoDB读取插件 Stream读取插件 Carbondata读取插件 MySQL binlog读取插件 KafKa读取插件 5.2 写入插件 关系数据库写入插件 HDFS写入插件 HBase写入插件 Elasticsearch写入插件 Ftp写入插件 Odps写入插件 MongoDB写入插件 Redis写入插件 Stream写入插件 Carbondata写入插件 Kafka写入插件 Hive写入插件 断点续传和实时采集功能介绍 数据源开启Kerberos 统计指标说明

优秀的个人博客,低调大师

开发跨平台app推荐React Native还是flutter?

作者:闲鱼技术-海潴 嗯。。。这个问题十分不好回答啊(捋下鱼须)。闲鱼作为flutter领域的先驱者,以及fish_redux、flutter_boost等当红flutter库的作者,当然是欢迎广大的开发者多多使用flutter相关技术栈 逃~:)。咳咳,不过呢,我们还是正经得聊一下React Native(下面简称RN)和flutter之前的异同: 0x00 简单介绍一下 React Native React Native是Facebook开源的一款基于react思想、使用JS、能够给移动平台带来native般体验的框架,官网最新的版本是0.5.9。 flutter flutter来自Google,上层使用dart语言构建跨平台应用,通过平台相关的embedded层接入到使用c++编写的engine层,再通过skia库直接与GPU进行交互。

优秀的个人博客,低调大师

为什么不推荐大家去外包公司

其实大家心里都像明镜一样地明白“低技术含量的外包没有前途”,好多人都认为外包没有技术,其实这种思想不对,国外有大量的高端技术外包业务等着我们干,但是反问一句“你们能干吗?”。 现在大部分的公司都是平均每个项目开发4个月,干完就再转一个组再做别的项目,从Java .NET C C++ 到有些人可能没有听说过的RPG,一个有着7年开发经验的外包人员可以说自已会十几种开发语言做过几十个case,但是却不敢说自已有技术,为什么? 很简单我们只是编码,听好了就是编码,并且是在别人已开发好的框架上编码,就是干一百年也提高不了,我们充其量就是一个组装工人,大家都知道技术是要积累的,没有积累就没有进步,我们国家的汽车产业就是走的这条路,以前丰田、福特、通用在中国开厂,我们只是把别人的发动机、变速器拿来,再加上自已的廉价汽车配件生产出一台台性价比很高的汽车,随着工人的成本在上升,这种以成本为推动的外包还能维持多久? 看看本田的罢工吧,看看富士康的跳楼吧!在这里真的应该表扬一下吉利,老总真的有魄力有远见,建议软件厂商们都学学吉利吧,这才叫牛B呐。 希望中国以后的中国软件都能向华为中兴一样走出中国走向世界和老外一比高下,这样的软件产业才是一谭活水,光靠人力成本的低廉是走不长,走不远的。 古语有云:好铁不打钉。今天我想说的是好程序员不去外包公司。这个观点估计会有人反对,我也相信任何非技术性的帖子都会有支持者,也会有反对者。今天我就来和大家谈谈为什么不去外包公司,尤其是你想在技术的路线上走的更长远一点,做个好程序员,就请不要去外包公司。 我们打工者在一个公司能待下去的理由无非两个:1、Money,工资高;2、有发展空间。其实说白了就是能学到东西,能有沉淀的东西,未来能挣更多的money。我先从这两点来谈论一下为什么不要去外包公司: 第一是Money, 大家可能都觉得外包公司给的待遇比一般的非外包公司给的会稍微高一点点,这个高低是相对个人而言的。 外包公司的运作模式中有一个很大特点就是以人力为成本,即人就是成本,比如你的工资是1万每个月,那么你被外派到其他公司的时候,你可能会被卖到了2万、3万一个月,甚至更高。但即便这样你一个人的毛利是多少呢1-2万,但公司还有很多不能外派出去的人呢,比如行政呀,财务呀,采购等等管理人呀,还有公司的运营成本,水电房租等等,这样一算下来,把你卖出去的毛利就没多少了,那怎么办呢,做量,所以你会发现外包公司都是大公司,都是有上千人甚至几千人,量上去了,利润就多了呀,所以小外包公司很难生存。 大家可能会认为,其他的非外包公司也是以人力为成本的呀?这里要说的是,非外包公司卖的项目和产品,说白了是软件系统,外包公司卖的是人,一个是 劳动密集型企业,一个是知识密集型企业,非外包公司计算的人力成本是作为整个项目成本的一部分,而外包公司的人力成本则是公司卖出产品的(人力)原材料的价格。 举例来说,非外包公司可能会接一个项目,项目合同额100万,公司可能有3个人做半年就够了,那按人力成本3*1万*6=18万,那这个项目的毛利是多少呢,82万。暂且简单计算这个毛利,大家肯定会有人提出来各种成本需要计算(我也知道),我们这里简单这个公式而已。而外包公司的3个人半年的毛利能有多少呢,假设3个人每人工资1万,卖出价格2万,则半年为公司的赚取的毛利是多少呢?3*(2万-1万)*6=18万。 大家应该可以看出点门道来了吧,那好下面我就来谈工资和福利。 非外包公司主要看重人才,因为人才可以为他带来更大效益,公司会为了留住人才,考虑给员工加薪,加福利,总之想尽各种办法留住员工。而外包公司则 不会,因为上面的公式3*(2万-1万)*6=18万中,如果1万变成1.5万,则毛利就少了很多,因为其他的值都不会变,你个人的买入价变高了,卖出价还是那个价钱,所以所能赚取的毛利变少了,外包公司是不会给你提高工资的,即便 提高也是微乎其微,如果你不服,你可以走,你走了外包公司可能会招个更便宜的人,接替你的工作。 再说福利,前面说了,外包公司要想赚钱就必须做量,人海战术,劳动密集型企业,因为你个人能创造的价值在外包公司犹如沧海一粟,也正因为你这沧海一粟的贡献,导致公司对你的任何福利都使得你这沧海一粟变得更小,所以什么年终奖呀,保险呀,公积金呀,补助呀,体检呀,公司旅游,聚会等等这种福利基本上就不要想了,上保险可能是国家法律规定必须上,所以公司会给你按最低的上,因为人太多,每个人的收益率又那么低,所以给你福利就是在增加成本,减少自己的收益。 说完Money再说发展空间,要说到发展空间就不得不说说外包公司的形成原因。 大家知道早些年,搞IT的人的工资待遇相对来说还是比较高的,一个公司,如果没有那么多项目,光养这些技术人员,实际的经营成本确实不低,但是这些 技术人员又不能不养,因为如果一旦来项目了,没人做那也不行,那单纯为这个项目找一批技术人员,一旦项目结束了,下个项目不知道什么时候才来的时候,这些人怎么办呢?还有另外一个情况就是技术能力缺乏,比如公司某个项目需要做sap的接口,但公司没有做这个,但又不能单独为这个项目找个sap的人,所以这个时候,做领导的很头疼,招人招的太多,没有项目头疼,有了项目,人不够头疼。 所以了,有需求就有市场了,外包公司出现了,专门针对上面这种公司解决上面遇到的问题。 大家注意一点,如果非外包公司需要外包公司的人员时,肯定是需要有工作经验的,刚毕业的学生肯定是不要的,除非你能蒙混过关。也就是说,我需要的外包人员是拿过来就能干活,解决我们现有人力不能解决的问题,是我要外包公司的人员现有的技术知识,而不是给你外包公司人员学习技术培养技术的机会,有这机会,我会培养我们自己公司的人员,为什么要培养外包人员呢。 大家觉得在外包公司干两年之后你会有什么沉淀的东西吗? 除了上面说的Money和发展空间以外,还有几个理由,也不能去外包公司。 去外包公司之后,你会经常到各个公司去面试。外包公司招人的时候一般会打电话和你说,“你好,我们这有个派到微软呀,摩托罗拉呀等等的职位”,然后你会先去微软面试,微软面试通过了,外包公司才会和你签合同,就是销售驱动采购,先把你卖出去才能真的去买你,等微软呀摩托罗拉呀这些公司的项目完了, 你就又会要求去其他公司面试,可能你当时图上班方便,在北五环租了个房子,结果下一个外派公司去了南五环,你就惨了。 上面说的是你能再次面试通过的情况,假设你被第一个公司退回来,之后公司会天天安排去到各个公司去面试,直到你被人买走,但如果一个月之内没有公司买你,也就是你一个月接客量不够(和小姐一样),那公司就要考虑给你降薪,裁人了,这里提醒大家一点,外包公司和你签合同一般都是这样签的:每个月基本工资2000,奖金8000;这么签合同实际上就是为了给你少交保险,少交公积金,最主要的是在裁你的时候补偿可以按照2000给,但外包公司一般还会很无耻地和你说,这么签合同是为了给你避税。无耻到极点了。 外包公司没有归属感,哪怕把你派到微软,IBM之类的公司,你也是二等员工。这个自己体会吧。 其实现在去外包公司的人,我分析无非三种人: 完全不知道外包怎么回事的人。 为了多拿一点点钱的人,有些人如果去非外包公司可能只能拿到6000元,但去外包公司可能拿到7000元,这种人,我想提醒你们,去非外包公司,只要你好好干,这6000可能会变成10000,但去外包公司你那7000元,两年后撑死变成7500。 就是完全找不到工作的人,因为外包公司做的是量,大量外派人员到其他大公司,就是卖人,这里就会有捆绑销售的情况了,他们会和其他公司说,你要想买我们这几个人,就还要买我们那几个人,呵呵,这就可以把非常非常便宜买进来的垃圾,捆绑销售出去了。 希望大家慎重的选择自己的职业,别过两年之后对自己说“年轻不懂择业”之类的话。 想要学习Java高架构、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费获取 架构群:558986829 点击链接加入群聊【JAVA高级架构之路】:https://jq.qq.com/?_wv=1027&k=5jJeqDu

优秀的个人博客,低调大师

推荐一款任务调度的开源方案

在平时的工作中,我们多多少少会有一些定时任务需要处理,有些是在每个服务器上单独部署,有些是在中控端部署,但是这样有一个缺点就是难以形成闭环,我们不知道我们的定时任务是否执行成功,如果需要做信息统计,这个工作量还是蛮大的。 简单来说,就是下面的痛点了: 需要在每台linux服务器的crontab里一一定义任务 任务的执行监控太不方便了 得登录到每台机器查看定时任务的运行结果,机器一多简直是一种灾难 对于多台机器协同处理一个任务很麻烦,如何保证多台机器上的任务按顺序依次执行? 当任务运行失败,要重新执行,还得重新定义下执行时间,让其重跑,重跑完成了还得改回正常时间 正在运行的任务要kill掉很麻烦,查看进程然后才能kill...... 而最近在梳理自动化的一些东西,所以开源的方案都会进入我的视线,我都会多多少少测试一下,看看怎么转换为自己需要的东西,顺便也找找曾经开发的感觉。有一个开源项目opencron引起了我的兴趣。 开源项目的地址是:https://github.com/wolfboys/opencron 整个开源项目的部署还是比较方便的,如果做过Java Web相关的开发,部署起来会很轻松。 说说我对这个项目的理解,开发语言主要是Java,它的架构是基于c/s的方式,在每个需要调用任务的客户端都需要部署一个客户端,然后在服务端来触发,整个工程的编译是使用maven实现,编译后会生成一个war包,拷贝到web容器中,比如tomcat中即可。 对我来说最大的优点是这个项目我能很快得到我希望看到的界面和功能。界面的效果上还是不错的,可以选择差不多10多个主题。 而从功能来说,个人认为中间的头像和日历还是不需要的,右边栏的统计很不错,通过这些概览能够很容易得到一个整体的数据。那些任务成功,失败都可以一目了然。 还有个不错的功能是对于任务的统计图,有折线图,有饼图。这个效果还是不错的。任务可以手动执行触发,也可以设置重跑次数,超时次数等等。 这个webshell的功能真是太炫了。在浏览器中能够开启这样一个ssh会话,我在几年前还曾经写过程序模拟,但是效果都不大好,在这里满足了我之前的一个小小的遗憾。 还有个问题就是如果要集成到自动化平台中,其实还是需要不小的工作量,因为自动化平台的技术语言目前是Python,考虑到团队的需求,尽可能减少体系的复杂度,opencron还是有不小的参考价值,在后期如何引入,我觉得可以依旧从试用中得到更多的经验。 我觉得我需要兼任几个角色,比如产品设计,系统架构,然后落地的过程中的开发技术和数据库相关的技术结合,想想挑战还是有的,不管怎么样就是做一件事情,把他做好,先提高团队的工作效率,把那些手工的配置和管理都能够对接到平台上,可以统一管控,如果从业务价值和技术价值的角度来衡量,其实目前来看技术价值有的,业务价值不高,但是如果能够落地,那么业务价值会远大于技术价值,技术工作就是如此,没开始的时候能够天马行空,但是要落到实处,需要付出很多的努力。 之前分享过一起 OpsManage的想法,有很多朋友已经在部署试用了,很多朋友问我一些部署的细节,或者说这个方案是否可以满足工作中的绝大多数需求,我想说的是,应该不会,我认为它最大的优点在于可以减少技术从0开始的复杂度,让你可以快速迭代开发。 对于自动化的开发和问题,大家可以一起交流,入群有验证,标注 公司-职位,一个星期内没有有效发言(发表情不算有效发言),会被请出,先想好再入群。如果你是有经验的老司机,希望能够加入提供技术建议,一起交流,如果你也是在探索的朋友,那就立一个计划吧。我拍个脑袋,一个月也达到什么程度,然后来按照这个时间反推进度。

优秀的个人博客,低调大师

(推荐)

一、程序演示图1.进入程序后的第1页面,头部的新消息提示在任意页面都会弹出。 图2.未读消息数量提示,任意页面。 图3.点击新建短信,(或者会话中的转发选项)需要输入接收者手机号码 图4.点击上图接收者输入框右侧的“+”按钮,弹出联系人选择列表,选择一个联系人后,该联系人的手机号码就会自动添在新建短信的输入框内。 图5.点击清空全部短信的menu后的2次确认,所有删除操作都有2次确认,包括清空该人,清空该条等选项。 图6.长按短信列表上的某条记录弹出的选项。查看对话直接进入短信会话页面,呼叫是直接拨打该联系人的电话,呼叫前编辑是到系统拨号盘页面,清空该人即删除该联系人全部短信。 图7.从系统通知栏查看新短信通知,点击后可进入短信会话页面。 图8.短信会话页面,头部为对方信息。 图9.长按某条短信弹出的信息选项,提取号码,回拨电话,浏览网址,是根据当前短信是否含有电话号码,和URL而自动显示的。 图10.点击提取号码,回拨电话,浏览网址而弹出的电话,URL的选项。 图11.短信会话页面的menu。 图12.插入表情MENU,的表情选项 图13.常用短语的选项。 图14.插入表情,常用短语选择后会自动添加到对话框中。 二、程序框架讲解 三、图15.程序包,类视图 1.activity 包:页面的类。 1.1AbstractBaseActivity 页面对象的父类 1.2ConversationActivity 会话页面 1.3SMSListActivity 短信主列表页面 2.adapter包:列表的数据适配器。 2.1ContactsListAdapter 联系人列表数据适配器 2.2ConversationAdapter 短信会话 数据适配器 2.3SimpleListAdapter 一种简单的列表形式的数据适配器 2.4SmileyListAdapter 表情列表数据适配器 2.5SMSListAdapter 短信列表数据适配器 3.common包:常量及工具。 3.1Constants 数值常量 3.2PhoneBookOperate 手机通讯录操作方法集 3.3RichTextParser 富文本显示方法 3.4SMSOperate 短信操作方法集 3.5Utility 公用方法集 4.core包:核心方法,主要用于异步处理。 4.1LogicSet 核心方法调用入口 4.2Request 异步处理线程 4.3RequestContent 异步处理方法接口 5.GIF包:解析GIF动画 5.1GIFDecode gif动画解析类 6.interfaces包:接口类 6.1DataViewListener 核心回调页面的数据接口 6.2DialogListener 对话框接口 6.3SimpleListViewDrawable简单数据列表的显示接口 7.model包: 数据实体类 7.1Contact 手机通讯录数据 7.2SMS 短信数据 7.3SMSGroup 短信组数据 8.services包:系统消息处理类 8.1SMSreceiver_bak 监听系统短信箱 8.2SMSreceiver 截获系统短信 9.textParsing包:富文本解析类 9.1AutoMachine 9.2DefineRichText 9.3ModeString 9.4Node 9.5RichText 9.6RichTextMark 9.7TestMain 三、数据库操作 1.增加数据 m_context.getContentResolver() .insert(Uriurl,ContentValuesvalues) 2.删除数据 m_context.getContentResolver() .delete(Uriurl,Stringwhere,String[]selectionArgs); 3.修改数据 m_context.getContentResolver() .update(Uriuri,ContentValuesvalues, Stringwhere,String[]selectionArgs); 4.查询数据 m_context.getContentResolver() .query(Uriuri,String[]projection, Stringselection,String[]selectionArgs, StringsortOrder); 代码示例: 1.写短信箱操作 2.删除短信操作 3.修改短信为已读 4.根据手机号码查找联系人 四、数据库字段介绍 1.短信数据库,URI = "content://sms" 字段 值 意义 _id 48 短消息在短信数据库里的序号 thread_id 16 对话的序号 address +8613411884805 对方手机号 person null 对方在联系人数据库里的ID,null为不在联系人数据库里 date 1256539465022 日期 long型,想得到具体日期自己转换吧! protocol 0 协议 read 1 已读状态 status -1 状态 type 1 类型 1是接收到的,2是发出的,0是编辑好,尚未发出的 reply_path_present 0 subject null 会话主题 body 您好 消息内容 service_center +8613800755500 短信服务中心号码编号,可以得知该短信是从哪里发过来的 2.联系人数据库 strColumnName = _sync_id strColumnValue=null strColumnName = primary_organization strColumnValue=null strColumnName = notes strColumnValue=null strColumnName = primary_phone strColumnValue=1 strColumnName = status strColumnValue=null strColumnName = im_handle strColumnValue=null strColumnName = _sync_local_id strColumnValue=null strColumnName = im_account strColumnValue=null strColumnName = _sync_time strColumnValue=null strColumnName = im_protocol strColumnValue=null strColumnName = mode strColumnValue=null strColumnName = label strColumnValue=null strColumnName = times_contacted strColumnValue=0 strColumnName = name strColumnValue=é??è?3 strColumnName = send_to_voicemail strColumnValue=null strColumnName = primary_email strColumnValue=null strColumnName = custom_ringtone strColumnValue=null strColumnName = sort_string strColumnValue=í?¤í2?í??ío3à? strColumnName = _sync_version strColumnValue=null strColumnName = last_time_contacted strColumnValue=null strColumnName = _sync_account strColumnValue=null strColumnName = display_name strColumnValue=é??è?3 strColumnName = number_key strColumnValue=77681111831 strColumnName = number strColumnValue=13811118677 strColumnName = phonetic_name strColumnValue=null strColumnName = _id strColumnValue=1 strColumnName = type strColumnValue=2 strColumnName = _sync_dirty strColumnValue=1 strColumnName = starred strColumnValue=0 4.其他数据库 //Available Uri string content://contacts/people //本地联系人列表信息 content://contacts/phones //本地联系人列表信息 content://call_log/calls/ //本地通话记录 content://mms 彩信 content://mms-sms/threadID content://mms-sms/conversations content://mms-sms/messages/byphone content://mms-sms/undelivered content://mms-sms/draft String strUriInbox = "content://sms/inbox"; //SMS_INBOX:1 String strUriFailed = "content://sms/failed"; //SMS_FAILED:2 String strUriQueued = "content://sms/queued"; //SMS_QUEUED:3 String strUriSent = "content://sms/sent"; //SMS_SENT:4 String strUriDraft = "content://sms/draft"; //SMS_DRAFT:5 String strUriOutbox = "content://sms/outbox"; //SMS_OUTBOX:6 String strUriUndelivered = "content://sms/undelivered"; //SMS_UNDELIVERED String strUriAll = "content://sms/all"; //SMS_ALL String strUriConversations= "content://sms/conversations";//you can delete one conversation by thread_id String strUriAll = "content://sms" //you can delete one message by _id 五、其他方法 1.获取联系人头像代码 //获取联系人头像 UripeopleUri=Uri.parse("content://contacts/people/"+contactItem.getId()); Bitmapbitmap=People.loadContactPhoto(m_Context,peopleUri,R.drawable.ic_contact_picture,null); 2.编辑已经存在的联系人跳转到系统编辑界面 publicbooleaneditExitedContact(Contextcontext,StringcontactId) { try { UrieditContact=null; editContact=ContentUris.withAppendedId(People.CONTENT_URI,Integer.parseInt(contactId)); IntentinsertIntent=newIntent(Intent.ACTION_EDIT,editContact); Activityactivity=(Activity)context; activity.startActivityForResult(insertIntent,Constants.REQUEST_GET_CONTACT_INFO); } catch(Exceptione) { returnfalse; } returntrue; } 3.跳转到浏览器 publicstaticvoidskipUrl(Contextfrom,Stringurl) { Uriuri=Uri.parse(url); Intentintent=newIntent(Intent.ACTION_VIEW,uri); from.startActivity(intent); } 4.拨打电话 *直接拨打一个电话,号码为callNumber *isActiontrue=直接播出,false=调用拨打界面 if(isAction) { action=Intent.ACTION_CALL;//直接播出 } else { action=Intent.ACTION_DIAL;//调用界面 } Intentintent=newIntent(action,Uri.parse("tel://"+callNumber)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); 5.复制文本 privatevoidcopy2ClipboardManager(Stringtext) { ClipboardManagerclipboard=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(text); } 本文转自 kome2000 51CTO博客,原文链接:http://blog.51cto.com/kome2000/578722

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册