Android开发
文章平均质量分 60
王世晖
呵呵哒
展开
-
Android开发获取相机拍照的原图(并非缩略图)
Android开发拍照上传是个很常见的功能,通过如下代码可以激活相机进行拍照: Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent, PHOTO_REQUEST_CAREMA);通过下边的代码获取相机返回的照片数据: @Overri原创 2016-05-21 14:40:10 · 4461 阅读 · 1 评论 -
Android融云使用不当产生的内存泄露和BUG(匿名类回调导致Activity内存泄露)
先看看代码,然后讨论代码中出现的问题 /** * IMKit SDK调用第二步,建立与服务器的连接 */ RongIM.connect(token, new RongIMClient.ConnectCallback() { /** * Token原创 2016-03-14 15:09:18 · 1353 阅读 · 0 评论 -
android摇一摇功能音效与振动附加微信音效大全下载
检测手机摇动通过实现SensorEventListener接口实现振动通过Vibrator实现音效通过SoundPool实现微信各种音效文件下载:微信音效大全public class MainShakeActivity extends BaseActivity implements SensorEventListener { private static final原创 2016-02-29 20:31:01 · 3589 阅读 · 0 评论 -
Android二维码ZXing扫描区域大小的调整,提高扫描速度
Zxing本身默认的扫图区域最大只有 360*480 需要拉开很远的距离才能将整个二维码扫描到因此需要我们自己调整取图大小在CameraManager.java这个类中进行调整默认的大小是 以下这4个参数 // private static final int MIN_FRAME_WIDTH = 240;// private static final int MIN_F原创 2016-03-14 10:14:40 · 11982 阅读 · 4 评论 -
为Android频繁的网络请求设置本地缓存
缓存可以减少网络请求次数,节省流量,减少出错的可能。设置一个缓存读写类,可以读写缓存,并设置缓存文件失效时间/** * 缓存服务器接收到的数据到本地,设置一个时间阈值 * 一定时间内访问同一个连接直接从本地文件获取 * 超过一定时间,缓存过期,需要重新从网络获取 */public class CacheServerResponse { /** *原创 2016-02-29 10:51:50 · 6444 阅读 · 1 评论 -
ImageView通过matrix实现手势缩放,放大,缩小 ,移动
转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/1023/1579.html测试有效关于ImageView的手势缩放,有很多种方法,绝大多数开源自定义缩放都是修改了ondraw函数来实现的。但是ImageView本身有scaleType属性,通过设置android:scaleType="matrix" 可转载 2016-03-12 22:53:37 · 2767 阅读 · 0 评论 -
Android获取App的版本名称和版本号
自动更新需要比较版本名称决定是否更新。比较现有App的版本名称和服务器返回的最新的版本名称/** * @param context * @return * 获取版本名称,一个浮点数版本名称,给人看的 */public String getVersionName(Context context) { return getPackageInfo(context).ver原创 2016-03-12 15:28:00 · 1661 阅读 · 0 评论 -
Android动态设置布局,为LinearLayout动态添加子控件
View view = getActivity().getLayoutInflater().inflate(R.layout.category_select_popupwindow_right, null); LinearLayout linearLayoutContainer=(LinearLayout)view.findViewById(R.id.linear_layout_c原创 2016-03-10 23:05:10 · 9551 阅读 · 0 评论 -
Android中通过Tag为View保存数据绑定数据
项目中有时候需要为View绑定数据,比如每一个云标签都对应服务器一个标签id,View中setTag可以方便的为控件绑定数据。为控件绑定数据:selectCategory.setTag(R.id.tag_id, id);selectCategory.setTag(R.id.tag_type, type);读取控件绑定的数据:Object object=selectCa原创 2016-03-10 22:55:16 · 1831 阅读 · 0 评论 -
使用EventBus解耦,简化组件通信
使用了EventBus后不同界面不同组件之间的信息交换将会变得非常容易,使用起来也非常简单,暂时没有发现什么副作用注意这里使用的是greenrobot的EventBus,包名为de.greenrobot.event使用方法:第一步;注册与解注册:@Overridepublic void onStart() { DebugLog.v("onStart()")原创 2016-03-10 21:43:12 · 1060 阅读 · 0 评论 -
通过Gson将服务器返回的JSON对象转换为POJO类
先使用postman获取接口返回的response,然后使用插件将response转换为bean类文件。然后就可以通过Gson转换了。Gson gson = new Gson();mBean = gson.fromJson(response.toString(), QueryAllHelpBean.class);其中转换插件有个小问题,比如价格是float,但是接口返回原创 2016-03-10 22:38:47 · 1817 阅读 · 0 评论 -
Android静态工具类ToastUtil因为传入content不当导致Activity内存泄露
实现了一个防止内容重复弹出的Toast工具类,防止内容重复弹出,并且新的Toast会立刻覆盖旧的Toast,不会排队等待就Toast显示结束才显示public class ToastUtil { private static String oldMsg; protected static Toast toast = null; private static lo原创 2016-03-14 15:33:46 · 5349 阅读 · 0 评论 -
Android递归删除文件夹下所有文件
在做App客户端apk安装包自动更新自动下载的时候,如果每次检测到有更新并自动下载,但是用户在下载完成后并不安装新包,这样多次检测后会下载多个安装包,造成垃圾数据。因此需要在下载前删除之前的下载数据。需要一个删除某一文件夹下所有文件的方法。/** * 递归删除文件和文件夹 * @param file 要删除的根目录 */public void RecursionDeleteF原创 2016-03-14 21:47:01 · 7470 阅读 · 1 评论 -
封装Volley使Volley的每个请求都自动保存和发送Cookie
思路很简单,每次请求获取到服务器返回的response就解析头部获取cookie并保存,发送请求的时候就从本地读取cookie添加到头部发送给服务器第一步,解析http response头部的cookie并保存,自定义一个Request并重写其parseNetworkResponse方法/** * 解析数据,保存Cookie * @param response * @return原创 2016-05-09 09:15:53 · 1558 阅读 · 0 评论 -
Android开发中利用imeOptions属性将键盘回车键改成搜索等功能键【提高用户输入体验】
Android中键盘输入是用户输入交互的最常用最直接的手段,关于键盘输入,有几点可以提高用户使用体验。第一:弹出键盘整体页面上移,使键盘不遮挡控件,需要在AndroidManifest设置对应Activity的windowSoftInputMode属性stateVisible 设置为这个属性,可以将软键盘召唤出来,即使在界面上没有输入框的情况下也可以强制召唤出来原创 2016-05-09 08:26:09 · 4795 阅读 · 1 评论 -
AndroidStudio导入新项目一直卡在Building gradle project info的解决解决方案
尝试了各种办法,翻墙,离线gradle等,发现一个更好用更简单的办法:解决方案:1.随便找一个你能运行的as项目2.打开gradle-wrapper.properties,文件目录:项目/gradle/wrapper/gradle-wrapper.properties3.复制distributionUrl这一整行的内容,eg: distributio原创 2016-05-18 16:24:03 · 3033 阅读 · 1 评论 -
内部Fragment设置为public static和checkReleaseBuilds false与abortOnError false
在维护一个老项目的时候,发现以前的Activity里边有一个内部Fragment继承自DIalogFragment,但是这个内部Fragment没有public和static修饰,Android Studio 智能地发现了这个问题并给出了错误。虽然给出了错误提示,但是AndroidStudio竟然能正常的打包,查看build.gradle发现了这句话android {lintOptions原创 2016-04-20 10:18:28 · 21478 阅读 · 1 评论 -
Android开发调用第三方邮件应用发送邮件
重构一个项目,发现发送邮件的功能是自己实现的,使用java的一个类库在app内部集成了发送邮件的功能。这样实现问题比较多,该类库并非针对android设计,用在android上有很多稳定,性能低下,并且不稳定。在一个app内部实现一个发送邮件的功能感觉是跟鸡肋的,要自己处理邮件通信协议,还要处理富文本编辑、发送附件等问题。其实调用第三方或者系统自带邮件功能发送邮件是比较好的解决办法,也原创 2016-05-06 16:38:32 · 4431 阅读 · 0 评论 -
RecyclerView.addFocusables出现空指针异常NullPointerException的解决办法
如果使用的RecyclerView是API22版本,或者更低版本,如果RecycleView没有设置LayoutManager,那么RecycleView将会包空指针异常,异常信息只会显示java.lang.NullPointerExceptionat android.support.v7.widget.RecyclerView.addFocusables这时候会出现一头雾水,原因就是原创 2016-05-04 16:34:17 · 2628 阅读 · 0 评论 -
用getChildFragmentManager解决Fragment嵌套Fragment数据丢失的问题
如下图所示的布局,外边的红色大框是个fragment,中间的小框是个viewpager,里边包含了若干的fragment。再次进入外边这个frament的时候,会出现中间viewpager中fragment数据丢失的问题,整个显示是一个空白,textview的内容全部不见了。在Fragment里面嵌套Fragment 的话,不要用getActivity().getSupport原创 2016-05-03 09:46:14 · 3503 阅读 · 0 评论 -
Android开发系统工具类SysUtils:获取App版本号、SD卡目录、缓存目录、是否后台运行、前台可见
public class SysUtils { private static final String TAG = "SysUtils"; private SysUtils() { } /**获取版本号 * @param context * @return */ public static String getVersionN原创 2016-04-11 20:21:47 · 791 阅读 · 0 评论 -
Volley中listener导致的内存泄露
项目中用Volley作为http框架,封装了一个JsonRequest,性能优化的时候,LeakCanary一直提示Volley的listener内存泄露,检查了很久也没发现哪里出现内存泄露public class JsonRequestImpl extends JsonRequestJSONObject > { public JsonRequestImpl(int method,原创 2016-04-26 11:38:13 · 2965 阅读 · 2 评论 -
Android中dp和px转换的工具类【工具类静态方法注意防止内存泄露】
工具类静态方法一定注意context,防止内存泄露/** * Created by wangshihui on 2015/11/25. * 像素之间的转换 */public class DpPxUtils {// public static int dip2px(Context context, float dpValue) {// final float原创 2016-03-15 17:02:15 · 680 阅读 · 0 评论 -
Android客户端apk自动检测更新自动下载自动安装的实现方法
改进了一个可以检测版本更新自动下载自动安装的客户端升级方案。在下载之前删除之前的历史下载文件,减少垃圾数据。先给出核心类public class DownloadService extends Service { private DownloadManager mDownloadManager; private long enqueue; private B原创 2016-03-14 22:03:39 · 9364 阅读 · 1 评论 -
Fragment回调了onResume方法却并没有进去前台可见
Fragment回调了onResume方法却并没有进去前台可见,所以不能仅仅依靠onResume判断是不是fragment是否可见fragment有个方法专门判断fragment是否可见/** * @return The current value of the user-visible hint on this fragment. * @see #setUserVisibleHi原创 2016-03-10 22:28:44 · 2375 阅读 · 1 评论 -
Android产生圆角图片Bitmap
圆角图片很常用,也比较美观,可以将服务器获取的图片以圆角的形式作为背景如下图所示的圆角背景图片:首先输入一个Bitmap,然后经过处理输出一个圆角Bitmap/*第二个、第三个参数是px,使用时看看是不是需要转换成dp*/public static Bitmap getRoundCorner(Bitmap bitmap, int pixelsX,int pixel原创 2016-03-01 16:34:41 · 1469 阅读 · 0 评论 -
ListView通过OnScrollListener判断第一项数据或最后一项数据处于可视状态
下拉刷新和上拉加载更多的前提是能够判断当前显示的数据在数据源中的位置,第一个数据和最后一个数据是否处于可视状态原创 2016-03-01 16:10:05 · 1006 阅读 · 0 评论 -
ListView中同时包含多种布局
比如有一个聊天类的ListView,要求我的消息和别人的消息分开,用ListView实现,可以为我的消息和别人的消息设置布局文件原创 2016-03-01 15:44:50 · 747 阅读 · 0 评论 -
【填补改需求的坑】viewpager中的全屏fragment如何监听返回键
因为改需求的原因,又暂时没时间代码重构,就一直把全屏的Fragment当做activity用,因为为此填了不少坑。如何在Fragment中监听返回键呢?思路就是Fragment从属的activity监听返回键,分发给各个Fragment模拟返回键Activity中: @Override public void onBackPressed(){ /*如果原创 2015-12-04 14:39:15 · 1199 阅读 · 0 评论 -
Android开发方法数超过65535的解决办法
一. 从sdk\extras\android\support\multidex\library\libs 目录将android-support-multidex.jar导入工程中二. 如果你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类, 如果你的Application已经继承原创 2016-01-19 19:00:21 · 1133 阅读 · 0 评论 -
Android用include引入其他xml布局文件
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content">原创 2015-10-12 23:44:45 · 1309 阅读 · 0 评论 -
Android ListView不响应OnItemClickListener解决办法
有时候,当ListView中的每一个item是自定义的View时,有可能会导致ListView的OnItemClickListener的listener无法调用,请看如下情况: 如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而 ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将转载 2015-10-07 22:20:15 · 6975 阅读 · 0 评论 -
【Android Studio】解决adb not responding if youd like to retry...错误
某些手机助手占用adb端口导致出现这种错误adb运行端口为5037 命令行输入netstat -aon|findstr "5037"得到看到pid为13120的进程占用了adb端口根据pid找到进程名命令行输入:tasklist |findstr "13120"进入任务管理器 杀死 shuame_helper进程即可原创 2015-10-19 10:33:51 · 1025 阅读 · 0 评论 -
Android文件操作(SD卡、缓存)工具类
getCacheDir()方法用于获取/data/data//cache目录getFilesDir()方法用于获取/data/data//files目录应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾原创 2016-03-01 16:44:21 · 2559 阅读 · 0 评论 -
Android计算两个时间戳的差值,以字符串的形式表示
好比新闻系统,会有发布时间的标示,如果发布时间显示的是几天前发布,几个小时前发布,给用户的体验可能会更好因此需要将两个时间戳的差值转换为字符串/** * Created by wangshihui on 2015/10/26. * 暂时只提供计算两个时间的差值 */public class TimeUtils { /* *计算time2减去time1的差原创 2016-03-15 20:28:50 · 9114 阅读 · 0 评论 -
Android中界面切换时卡顿点击无效的另类原因
项目中出现一个用户体验很差的地方,就是点击一个ImageView跳转到另一个Activity,发现经常需要点击多次才能跳转成功。开始以为是常规的性能优化问题,后来发现是可点击范围太小了,如果点击做不到快准狠,很难产生有效的点击。记录在此,防止以后犯同样的错误。原来的布局:ImageView android:id="@+id/iv_people" android:layo原创 2016-03-10 21:20:05 · 2758 阅读 · 0 评论 -
获取VolleyError的详细信息,方便和服务器后台定位错误
项目中有时候一个网络请求出现问题,只知道是服务器错误,不知道具体出错原因和出错位置,使后台开发人员工作量增大,开发效率变低。给出一个可以获取网络请求失败具体出错原因和出错位置的方法因为网络出错的原因很多,偶尔会出现空指针引起的闪退,因此捕获这个空指针,防止闪退,也不影响逻辑,因为这只是实现方便查看服务器出错信息的功能new Response.ErrorListener() {原创 2016-03-10 20:52:54 · 3062 阅读 · 0 评论 -
Android检测手机是否有网络连接可用
应用中有个需求,就是需要每个Volley请求失败的时候,判断是服务器的500错误还是手机网络连接出现问题。服务器错误可以通过VolleyError判断。给出一个检测检测手机是否有Internet访问数据连接的方法public class CheckNewWorkConnection { static public boolean isNetworkConnected(Conte原创 2016-03-10 20:37:57 · 947 阅读 · 0 评论 -
Android监听屏幕屏幕锁屏与解锁
/** * 创建一个监听器类 监听android锁屏与解锁事件 */public class ScreenListener { private Context mContext; private ScreenBroadcastReceiver mScreenReceiver; private ScreenStateListener mScreenState原创 2016-02-25 00:43:36 · 3919 阅读 · 0 评论 -
android点击键盘外部关闭键盘的方法
给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏[java] view plainLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match原创 2016-02-23 21:03:31 · 2941 阅读 · 0 评论