自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 Android选择联系人区别

ContactsContract.CommonDataKinds.Phone.CONTENT_URI和ContactsContract.Contacts.CONTENT_URI都是Android中的内容URI,用于访问联系人数据。因此,如果你想要访问联系人的电话号码信息,你应该使用ContactsContract.CommonDataKinds.Phone.CONTENT_URI,如果你想要访问联系人的基本信息,你应该使用ContactsContract.Contacts.CONTENT_URI。

2023-06-08 22:25:38 238

原创 Mac环境配置

苹果下的终端改成了zsh,所以需要这么创建。

2023-05-07 13:38:11 119

原创 [Android]Eclipse用正式签名创建debug签名。

现在很多第三方开放平台都需要我们提供正式的HA1指纹信息以及应用包名来生成一个KEY,用来识别我们应用的唯一性,但是有时候我们需要调试应用,这个时候往往因为我们的debug可以的HAS1信息不正确而造成无法通过第三方平台验证的情况,最后只能通过LOG的方式来打印信息,调试相当麻烦,那么能否用正式的签名来调试应用呢?其实是可以的。那就是修改正式签名的一些信息。1.复制一份正式的打包签名文

2017-02-04 11:01:32 514

原创 [Android]解决OPPO R9无法监听短信问题

原理:监听了一下OPPO手机的广播管理类,发现OPPO擅自改了API。解决方案: 在监听短信的地方加入这个action就可以了。“android.provider.OppoSpeechAssist.SMS_RECEIVED”"android.provider.Telephony.SMS_RECEIVED"系统原有的是这个

2016-12-30 17:28:22 4716 4

原创 [Android] 微信分享多张图片。

微信原生是不支持多图片分享的,但是Android原生是支持的

2016-11-02 15:16:14 3848

原创 [Android]边下边播精简代码版本(支持音视频格式)

1思路:(1)基本思路就是先创建一个空文件,大小和服务器的MP3一样大,也许有人会疑问为什么,这个其实是因为Android的这个media player是按照文件大小计算音视频文件播放长度的。(2)创建一个网路进程负责下载MP3文件,并记录下载进度。(3)创建一个media player对象来负责播放。(4)这个地方是很关键的,创建一个线程,负责检测是否可以播放以及什么时候暂停。

2016-09-10 11:55:37 2333

原创 [Android]判断是否是华为EMUI系统

1原理:根据系统基本配置文件build.prop获取华为的ROM等级,知道了等级就知道是否是华为的手机了。2代码:package com.example.uitest;import java.io.File;import java.io.FileInputStream;import java.util.Properties;import android.os.Environ

2016-06-14 11:21:50 12527 6

原创 [Android]Android5.0实现静默接听电话功能

原因:android以前可以通过AIDL进行静默接听,但是5.0以后就被谷歌给屏蔽了,这时候我们只能通过其他方式实现了。解决方案:try { Runtime.getRuntime().exec("input keyevent " + Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK

2015-08-12 11:41:23 2252 6

原创 安卓最常用对话框样式。

true        true        @null        true        @android:color/transparent        @null        true

2015-06-02 15:42:38 596

原创 【Android】判断快捷方式是否存在——兼容性更强(速度提升12倍)

1原理:这个是在2.3的时候无意发现的,当我照着网上的例子查询快捷方式是否创建的时候突然应用程序挂了,说是缺少权限。com.android.launcher.permission.READ_SETTINGS或者com.android.launcher.permission.WRITE_SETTINGS然后我就添加了权限,虽然是可以判断了,但是小米,HTC等手机都不能正常使用,这

2015-05-29 00:06:18 2050

原创 【Android】实现类似于百度长时间不用APP屏幕变暗——不用修改系统设置权限

1原理:这个原理很简单,相信大家都比较熟悉安卓的图形渲染过程,所以就不介绍了,大概原理就是修改window的亮度,然后达到让屏幕变黑的效果,通过监听activity的dispatchTouchEvent方法来全局监听屏幕的变化。2解决方案:直接上代码了,有注释,可以作为一个基类,这样你就可以让所有的子类实现这个效果了。package com.example.test;i

2015-05-22 14:53:16 1577 1

原创 【Android】Activity切换效果——当通过Service启动自己Activity的时候怎么控制

1原因:当你在网上搜activity切换效果的时候基本就是告诉你要么是XML要么是overridePendingTransition,但是如果你是Service启动的Activity怎么办,这个网上没有一个给出答案了,所以就自己想了下,发现其实很简单。2解决方案:其实很简单,让我们了解下原理,所谓的activity切换也无非是activity根据theme或者别人startactivi

2015-05-22 09:38:04 2510

原创 【Android】从通讯录添加联系人——一个你不知道的细节

1原因:在开发的时候我们经常会遇到从通讯录添加联系人的功能,但是突然有一天有人告诉我说我的通讯录添加里没有SIM卡联系人,而别人的有,这就让我很纳闷,什么情况,最后才发现了原因,记录下。2解决方案:这是可以选择SIM卡联系人的代码: private void OpenPhoneNum() { Intent intent = new Intent(Intent.ACTION_PI

2015-05-20 14:35:24 1329

原创 【Android】自己写的轻量级安卓网络框架——能够控制网络连接,支持缓存

1原因:之所以写这个框架是因为网上的好多的网络框架都没有很好的对网络连接进行控制,比如当你点击取消的时候只是对话框取消了,后台网络请求还是在继续,这样就造成了activity的无法释放,更严重的情况是降低APP流畅度,所以就结合自己的需求写了个这样轻量级的网络框架2解决方案:我已经开源了,放在了OSC上,框架目前还不是很完善,所以需要慢慢改善,不过这个流程目前感觉是非常不错的,当act

2015-05-18 17:56:20 874

原创 【Android】实现类似于QQ将好友的头像用作快捷方式。

原因:写这个的原因就是网上大都是告诉你如何用drawable里的资源做快捷方式,那么本地的图片能不能做快捷方式呢?肯定是可以的,所以我找了下安卓的源码,发现有这样的介绍 /** * Activity Action: Creates a shortcut. * Input: Nothing. * Output: An Intent representing

2015-05-18 15:13:11 1302 2

原创 【Android】如何用听筒播放音乐,并且按键控制音量

1原因:这就是传说中的听筒模式,为了得到更好的体验,所以自然还要能够用按键来控制音量,废话不多说了,直接上代码。2解决方案: try { //让activity的默认控制权为通话音量控制 setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); MediaPlayer mMediaPlayer = new Med

2015-05-09 10:46:10 5830 4

原创 【Android】如何提高自己软件的稳定性

1原因:很多时候我们的软件都会经常的崩溃,也没法还原,这个时候一般就是我们写的代码可能有内存泄露问题。2解决方案:这个时候我们就要借助内存分析工具了,我曾经调试了下别人的代码,他的一个activity进去一次就创建一次,返回的时候又不能自动回收,所以造成了软件内存占用居高不下,我自己写的一个类也是,每次进去以后就没法销毁,后来发现是调用通知的时候造成的,所以把通话的context设置成

2015-05-08 10:03:10 4213

原创 [Android]实现带显示密码按钮的EditText(无内存泄露)

原理:通过自定义View绘制显示密码按钮,当点击密码按钮的时候调用setInputType来更改属性。解决方案:就直接上代码了 package com.finals.view;import com.example.test.R;import android.content.Context;import android.content.res.TypedArray;

2015-04-25 16:47:53 1265 1

原创 [Android]常用以及不常用工具类

1.ViewParent.requestDisallowInterceptTouchEvent(boolean)好多人都问怎么处理Viewpager嵌套Viewpager的冲突问题。其实很简单,用这个类就可以了,具体逻辑自己想吧。2.TextUtils.isEmpty(CharSequence)Android原生检测文本是否为空的函数,这样以后再也不用自己写工具类了3.ViewCo

2015-04-24 10:19:10 720

原创 [Android]最省内存的ViewPager添加小圆点指示器

原理:这个你可以用View叠加来实现,但是这个效果不太理想,1占内存,而移植起来不方便,需要找各种资源,所以采用自己绘制更好,方便,而且效率高。解决方案:package com.youtu.view;import java.util.ArrayList;import java.util.List;import java.util.Map;import android.con

2015-04-15 18:10:07 1543

原创 [Android]给EditText添加图文hint

原因:有时候我们需要当没有文字的时候背景显示一个图文混合的背景提示,这时候如果采用控件叠加的做法效率会很低,所以我们可以采用重载View的onDraw方法解决方案:这个是效果,那个搜索框。package com.finals.teltem.view;import android.content.Context;import android.content.res.Ty

2015-04-15 17:32:59 3048 2

原创 [Android]最简单的镜像系统View控件

原因:安卓自带的控件没有镜像功能,没关系我们可以自己实现一个。其实很简单,重写系统控件的draw方法,不是ondraw方法。具体可以看源码解决方案:这是我写的Seekbar的镜像,公司需求package com.finals.oilrank.util.view;import android.content.Context;import android.graphics.Can

2015-04-15 14:08:36 1818 1

原创 [Android]教你如何获取未安装应用的ResolveInfo(非反射,手动解析)

原理:原理不多说,看下安卓源码就知道了。首先得到AssetManager,然后用AssetManager的openXmlResourceParser方法获取XmlResourceParser,通过XmlResourceParser开始解析APK内的AndroidManifest.xml文件解决方案:直接上代码吧,很简单。package com.example.l

2015-04-10 15:48:29 952

原创 [Android]教你如何获取未安装应用的ResolveInfo(不适用于Android 5.0因为内部实现已经变化)

原理:查看了下安卓源码,明白了解析过程,只是自己的话就要移植安卓的源码,有人解析成功了,但是我觉得太麻烦。大概说下安卓的解析过程吧。 public PackageInfo getPackageArchiveInfo(String archiveFilePath, int flags) { PackageParser packageParser = new Pack

2015-03-28 09:36:27 1168

原创 [Android]网络数据的简单加密

原理:最简单的数据加密就是采用Base64,虽然会带有数据冗余,但是写法简单,不用做过多的修改,其实也可以采用异或加密。代码:这里就直接上代码吧,写法很简单。public static final boolean DownlaodAppFile(Context mContext, String url, String cacheName, boolean replace) {

2015-03-27 11:13:30 860

原创 [Android]用SharedPreferences保存List<Map<String, String>>数据

原因:SharedPreferences没有保存数组的方法,但是有时候为了保存一个数组而进行序列化,或者动用sqlite都是有点杀猪焉用牛刀的感觉,所以就自己动手改进一下吧。解决方案:采用的方式是先转换成JSON,然后保存字符串,取出的时候再讲JSON转换成数组就好了。 public void saveInfo(Context context, String key, Li

2015-03-25 12:36:59 3626

原创 [Android] 解决HanziToPinyin类在HTC One等手机上转换拼音失败BUG

HanziToPinyin

2015-03-23 15:45:32 1966 1

原创 ListView子控件点击不管用——设置android:descendantFocusability属性

原因:虽然早已知道,但是用的时候还是老是忘了,所以记录下。详解:1.beforeDescendants从英文也能看出来,就是在子节点之前,也就是说ViewGroup优先。2.afterDescendants在子节点之后,也就是里面的子控件优先。3.blocksDescendants阻止子控件,也就是不让子控件处理。

2015-03-23 11:11:39 875

原创 解决Android的DL插件三星手机报错Binary XML file line #31:You must supply a layout_height attribute.

原因:原因其实很简单,虽然主题对象进行了深度复制,但是没有让主题资源应用到主题中,让我们看看Android源码就知道了: @Override public void setTheme(int resid) { mThemeResource = resid; initializeTheme(); }之后看看怎么设置主题的 protecte

2015-03-06 13:38:44 1847 2

原创 被用坏的DexClassLoader,关于DexClassLoader内存泄露的问题

原因:目前有两种猜测,第一种就是类加载容易,但是类卸载就不那么容易了,第二种猜测就是类缓存机制,从classloader的运行过程可以分析到有个过程是缓存常用类的,感觉这个过程没法释放,因为他会认为你以后会一直用。测试内存泄露代码:可以用DDMS测试下,当你调用GC的时候byte是可以回收的,但是classloader就没法回收了,也许你认为是因为调用了activity的classlo

2015-03-04 09:34:52 1419

原创 Android不能乱用的View.getHeight()(尤其是UI线程里)

你知道吗?不要在onTouchEvent里调用View.getHeight(),因为有可能是个错误的数字。

2015-02-12 18:12:20 1687 1

原创 Android自定义View的一些不知道的细节

原因:之所以写这个主要是因为我自认为自己对自定义View已经了如指掌,但是后来才发现自己犯了很多低级错误。详解:按照源码的注释,View的绘制过程是这样子的: /* * Draw traversal performs several drawing steps which must be executed * in the

2015-02-12 13:53:39 1189 4

原创 Android简洁的ViewHolder写法的一点优化

原理:原理就是用SparseArray,这样也少了创建ViewHolder类,缺点就是判断增加了不止2倍,不过和没有优化复用的来说还是快很多。方案:这个写法是看别人的,有兴趣的可以搜下,虽然觉得代码不是很好,但是写法确实很诱人,毕竟ViewHolder的写法确实太臃肿。 public static T getHolderView(View view, int id)

2015-02-10 10:35:55 708

原创 Android汉字转拼音核心代码解读

原理:找两个数组,一个用来存储所有相同汉字拼音的第一个汉字的Unicode编码,另一个用来存储对应的拼音。注:可不是说按照Unicode编码大小来排序的。而是按照我们汉字的A,B,C,D,E,F,G这样的拼音发音的顺序,最后几个是仓颉字大家可以看下,由于太长就简单复制一段吧。好心里有数。public static final char[] UNIHANS = {

2015-02-06 17:34:19 936

原创 Android多线程合并——使用CountDownLatch干掉第三方SDK的回调函数

原因:有时候我们用的第三方SDK是一个回调函数,这样我们就不得不不把代码写在这些回调函数里,这样的写法其实很糟糕,至少扰乱了我们的逻辑。本身我们写的就是一个线程,第三方SDK又做了一个线程,我们又不知道什么时候回调函数触发,最简单的办法就是线程等待,然后再回调的时候调用停止等待,这也就是用CountDownLatch的作用了。解决方案:昨天无意间重构了下自己的网络框架,我的框架是要求在

2015-02-05 10:38:24 1128 2

原创 自定义View实现Android圆形进度条

原理:通过继承Android的View类,重写onDraw方法。实现:这次就直接上代码了import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.Canvas;import an

2015-01-31 17:52:19 1468

原创 Android画布使用Region.Op.XOR没有效果的原因

原因:让我看下源码是怎么写的    /**     * Modify the current clip with the specified rectangle.     *     * @param rect The rect to intersect with the current clip     * @param op How the clip is modifi

2015-01-31 09:28:10 1191

原创 Android 自定义View的资源回收

原因:Android默认Bitmap对象是不会帮你回收的,所以当你用自定义View的时候很容易出现OOM,尤其是在Listview里用自定义View的时候,我就遇到过,有个人重写了checkbox实现了IOS的开关控件,结果当我放入listview的时候来回滑动了几次就OOM了。解决方法:仔细考虑了下感觉View应该有销毁的时候的回调函数,所以看了下文档,发现了这个方法

2015-01-30 14:27:12 12338

原创 iPhone电量显示突然消失的原因(修正说法不严谨)

原因:这个原因说来可能很奇葩,但是苹果的确做到了,原因就是iPhone右上角的小图标做多只能有四个。我的手机一般是这几个 1 锁定图标。2闹钟图标。3就是电量百分比了,当我听歌的时候会有个播放状态图标,这样就四个了,而当我进入百度地图的时候就会超过四个,因为会有一个地图定位图标。这样电量图标就会被挤没了。验证方法其实很简单,当你进入百度地图的时候电量会消失,而当你去掉横竖屏切换的时候电量又

2015-01-30 09:25:21 3766

原创 Android 第三方类库的一些建议性用法

原因:Android开发,最头疼的可能就是第三方SDK的升级了,因为升级的时候好多API都发生了变化,所以,当我们升级的时候改动会很大,而且当你删除依赖包的时候会出现各种错误,冷人头疼解决方案:这个只是个人建议,就是把用到的第三方SDK封装一下,封装成一个类,把关于第三方的引用都放到自己写的类里,当我们用的时候只需要初始化自己写的类就好了,而当你删除的时候报错也只是我们自己写的几个类会

2015-01-29 14:28:21 413

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除