
Android手机管家项目
文章平均质量分 62
sadsadsadsadsazcAS
这个作者很懒,什么都没留下…
展开
-
01创建SplashActivity界面和程序版本号的获取
Splash的布局如下:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_h原创 2014-11-24 22:36:04 · 767 阅读 · 0 评论 -
04小细节---关于dialog
//builder.setCancelable(false); builder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { //进入主界面, enterHome(); dialog.dismi原创 2014-11-27 20:53:28 · 428 阅读 · 0 评论 -
06主界面的实现
主界面采用GridView实现:布局如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android原创 2014-11-27 22:29:29 · 646 阅读 · 0 评论 -
05关于两种context的区别
改下此处的Dialog的代码:AlertDialog.Builder builder = new Builder(getApplicationContext());原来是:AlertDialog.Builder builder = new Builder(this);或者是:AlertDialog.Builder builder = new Builder(SplashActi原创 2014-11-27 20:59:34 · 546 阅读 · 0 评论 -
03软件升级下载和安装
检测到有新版本号的时候,弹出对话框让用户选择是否升级。// 显示升级的对话框 case SHOW_UPDATE_DIALOG: Log.i(TAG, "显示升级的对话框"); //按下F3 进入方法 showUpdateDialog(); break;/** * 弹出升级对话框 * */ protected void showUpda原创 2014-11-27 19:35:27 · 572 阅读 · 0 评论 -
02版本升级
大凡软件都会要求升级的,不过现在软件升级很简单了,很多第三方的平台都可以帮助开发完成这个功能。这里是看看升级的原理。在tomcat的webapps的root目录下新建updateinfo.json文件,编辑如下:{"version":"2.0","description":"发现新版本,快来下载,下载即送iphone6","apkurl":"http://192.168.1.31:8080原创 2014-11-25 19:53:52 · 745 阅读 · 0 评论 -
46黑名单显示的bug---(优化ListView)convertView复用带来的问题
是这样的需求:在黑名单的列表中前三个显示特殊的颜色,后面的列表显示其他的颜色,如图:但是当翻到第二屏的时候,我们发现了:哇,这样是怎么回事呢?根源在于convertView的复用带来的问题。我本来的代码如下:修改为如下:ListView的Item可能带有其他控件,比如CheckBox,带来点击状态的问题。后序会在IM项目中详解。原创 2014-12-15 18:48:21 · 1027 阅读 · 0 评论 -
45黑名单列表出现的bug---适配器更新不了数据
在这个界面中:希望的是当添加了一条新的数据的时候,黑名单列表立刻刷新,而不是返回主菜单然后进入主界面再刷新。我的错误:我自定义了一个适配器:CallSmsSafeAdapter,在调用适配器的类里也有一个list,在最后必须这样:必须使用适配器里面的list。//===============2014.12.15原创 2014-12-15 18:41:25 · 533 阅读 · 0 评论 -
48为ListView每个Item上面的按钮添加事件
参考这个哥们的思路:http://blog.youkuaiyun.com/qq435757399/article/details/8256453原创 2014-12-15 20:25:07 · 679 阅读 · 0 评论 -
49短信拦截
短信拦截在Android4.4上无法做到,这里不再演示。主要是在Service上开一个广播去监听。原创 2014-12-15 21:35:04 · 567 阅读 · 0 评论 -
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed错误原因
情况1:你定义的字段为 not null而插入时对应的字段却没值。情况2:你定义的字段设定PRIMARY,而插入的值已经在表中存在。我的错误属于第一种:我在onCreate()方法中创建表的时候,指定了约束条件(not null),然后我在插入数据的时候,有字段为NULL,导致倒错。原创 2014-12-16 20:10:41 · 7277 阅读 · 0 评论 -
07自定义组合控件
最后实现的效果如图:这里是通过自定义组合控件实现的。先看布局:activity_setting的布局文件为:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:原创 2014-12-01 20:35:03 · 497 阅读 · 0 评论 -
09自定义组合控件总结
第一步:自定义一个View,一般来说,继承了相对布局或者线性布局。(必须为ViewGroup的子类)第二步:实现父类的构造方法,一般来说,需要在构造方法里初始化自定义的布局文件第三步:根据一些需要,定义一些API方法。//============================================第四步:根据需要,自定义控件的属性,可以参照TextVie原创 2014-12-01 21:33:12 · 457 阅读 · 0 评论 -
10自定义对话框
实现后的效果如图:布局很简单,在IM项目中已经介绍了,这里直接拿来用。<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="300dp" android:layout_height="match_paren原创 2014-12-01 22:35:41 · 526 阅读 · 0 评论 -
64ListView中item中有CheckBox带来的选择状态混乱的解决
如图:当选择第二个条目的时候,往下翻:看到下面有的居然自己勾上了:再网上翻,发现上面的有的也自己勾上了:第一次遇到这个问题(手机管家项目第一次遇到这个问题,这里是拿《第一行代码》复习了),感觉好奇怪,甚至感觉有点不可思议。但是静下来想想,不过是因为复用convertView带来的问题。解决方式:第一步:在bean中新增 一个fil原创 2015-01-07 18:10:34 · 1978 阅读 · 2 评论 -
08自定义控件的属性
在自定义控件中,可以通过xml格式的文件定义自己的属性。将activity_setting的布局代码改为如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:owndefine="http://schemas.android.com/apk/res/com.ustc.mobil原创 2014-12-01 21:26:55 · 485 阅读 · 0 评论 -
51清除电话拦截的通话记录
系统的电话记录保存在contacts2.db这张表中,而我们的通话记录则保存在calls这张表中,如图:那么清除通话记录需要访问源码,打开联系人源码的清单文件:我们看到主机名如下:再进入.java文件中查看CallLogProvider类,我们看到路径名是什么了: /** * 利用内容提供者去删除通话记录 * * @param inco原创 2014-12-18 20:11:27 · 3480 阅读 · 0 评论 -
54高级工具功能之短信备份
短信备份需要操作短信的数据库,使用ContentResolver去查询,我们看下源码中URI的路径:打开类:数据库对应的:在telephony这个包下,mmssms.db的sms表,我们注意四列:address,date,type,body:package com.ustc.mobilemanager.utils;import j原创 2014-12-18 22:21:32 · 826 阅读 · 0 评论 -
ListView+CheckBox实现全选和反选
实现的效果图如下:(在《第一行代码的例子上加以修改的》),当点击全选的时候,效果如下:当只选中下面的几个:此时按下,反选,如图:首先是布局:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://s原创 2015-01-08 08:31:14 · 2265 阅读 · 0 评论 -
12手机防盗设置向导的第一个页面
设置过防盗密码之后,即进入手机防盗页面或者手机防盗设置页面,如果手机防盗设置页面已经设置了,则进入手机防盗。package com.ustc.mobilemanager;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import an原创 2014-12-03 21:20:21 · 533 阅读 · 0 评论 -
Android数据库事务操作
Android中的SQLite可以很好的支持事务操作,所谓的事务,就是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全不执行,不能执行某些操作,而不执行其他操作。打个比方,银行的转账操作,A转给B1000块钱,则A的账户中要扣除1000块,B的账户中要增加1000块,这两个行为要么都执行,要么都不执行,不能只执行其中一个操作。使用Android的SQLite的事务也很简单,原创 2015-01-07 20:53:43 · 914 阅读 · 0 评论 -
100手机管家开源
整个项目时间周期:2014-11-24~2015-01-01,做了很久,每天只能晚上做。(苦逼)源码地址:https://github.com/leerduo/Mobile-M原创 2015-01-07 20:50:38 · 1197 阅读 · 0 评论 -
11使用MD5加密设置的密码
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。MD5即Message-Diges原创 2014-12-03 21:14:16 · 724 阅读 · 0 评论 -
50电话拦截
电话拦截需要得到电话管理器:tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);然后调用tm的listen方法:tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);private class MyListener extends PhoneStateListe原创 2014-12-15 22:19:17 · 632 阅读 · 0 评论 -
53 java.io.IOException: open failed: EACCES (Permission denied)问题解决
1. 问题描述:在Android中,用程序访问Sdcard时,有时出现“java.io.IOException: open failed: EACCES (Permission denied)", 这是由于没有增加sdcard对应权限而导致的。2. 解决办法:在mainfest文件中,增加以下权限: android:name="android.permi原创 2014-12-18 22:19:40 · 788 阅读 · 0 评论 -
52ContentObserver的用法
ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。注册/取消注册ContentObserver方法,抽象类ContentResolver类中的方法原型如下: public final void原创 2014-12-18 20:40:59 · 454 阅读 · 0 评论 -
Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class com.dy.fragmen
要注意的是fragment其实是有两个版本的,一个是import android.support.v4.app.Fragment;另外一个是import android.app.Fragment;这两个版本的fragment是不会兼容的。也就是说要不就全用fragment,要不就全用v4 fragment,不能混搭着用。在这里我强烈建议初学者用第二个原创 2014-12-19 09:56:09 · 2895 阅读 · 0 评论 -
Service和Activity之间的通信
Service的启动方式有两种,一种是通过start方式,一种是通过bind方式,通过start方式启动服务后,启动服务的组件和服务便没有多大联系了。所以为了能和Service通信,只能通过bind的方式。下面分几步介绍下:(demo里面的Service提供一个下载的功能,然后在Activity中决定何时开始下载,以及随时查看下载进度)第一步:在Service类中创建一个内部类继承自Bin原创 2015-01-08 20:53:17 · 696 阅读 · 0 评论 -
Intent传递数据的方式
方式一:使用putExtra,在MainActivity中传输数据,在SecondActivity中输出数据:package com.dystu.intentdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;原创 2015-01-09 11:11:12 · 1991 阅读 · 0 评论 -
58程序管理器的简单UI
最终实现的效果如图:实现了:1.获取了手机内存可用空间和SD卡可用空间2.获得了手机安装的应用程序的信息,比如应用程序的名称,应用程序的图标。开始加载数据的时候,有个ProgressBar提示用户当前正在加载数据:布局代码如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi原创 2014-12-20 22:15:38 · 476 阅读 · 0 评论 -
60遍历获取手机安装的应用程序的图标、应用名称等信息的方法
通过使用PackageManager的getInstalledPackages得到已经安装程序,通过PackageInfo得到应用程序的包名和图标和应用程序名字:package com.ustc.mobilemanager.engine;import java.util.ArrayList;import java.util.List;import android.content.Co原创 2014-12-20 22:28:37 · 956 阅读 · 0 评论 -
61应用程序管理器的复杂UI显示
实现后的效果图如下:需要做的事情:1.需要两个集合,一个集合放用户应用程序,一个集合放系统应用程序;/* * 用户应用程序的集合 */ private List userAppInfos; /* * 系统应用程序的集合 */ private List systemAppinfos;2.通过应用程序信息的标记获知应用程序是用户程序还是系统,是安装在原创 2014-12-21 09:38:33 · 523 阅读 · 0 评论 -
57ListView的分批和分页的加载数据
分批加载数据是为了解决用户体验的问题,而分页加载是为了解决OOM的问题。QQ的聊天记录就是采用分页加载数据的,新数据会覆盖旧的数据,而分批加载数据,比如一次加载20条数据,加载20条之后再去加载新的数据。我们这里是在黑名单列表处理的这种情况,采用分批加载数据:数据库分批查询:/** * 查询部分黑名单是否存在 * @param offset 从哪个位置开始获取数据 * @p原创 2014-12-20 14:49:29 · 849 阅读 · 0 评论 -
55接口和回调函数
在上面的短信备份中,我们把短信备份放在主线程中进行,而且没有任何的提示,那么当实际中用户的短信数量很多的时候,会导致程序用户体验极差,为了模拟备份短信消耗很多时间,我们每次备份短信的时候,开个线程,备份一次短信,线程睡眠500毫秒。并且让备份短信的操作在子线程中进行,由于备份成功和备份失败我们会有Toast提示,而Toast是在主线程中操作的,所以,我们需要把Toast放在runOnU原创 2014-12-19 20:48:58 · 485 阅读 · 0 评论 -
13四个设置向导页面的完成和跳转事件
实现后的效果如下:第一个设置向导页面:第二个:第三个:第四个:布局和跳转事件的代码如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"原创 2014-12-03 22:23:16 · 1153 阅读 · 0 评论 -
56短信的还原
短信的还原,由于Android4.4需要设置默认短信,所以还原短信的时候,插入不到短信的数据库中,我没有实现。另外还有一个问题就是如何在还原短信的时候,获取短信的数量,这样在还原短信的时候,可以设置一个进度条提示用户还原的进度。如果有知道的朋友,请指导!原创 2014-12-20 10:20:42 · 473 阅读 · 0 评论 -
59获取手机内存可用空间和SD卡可用空间的方法
主要通过使用:StatFs/** * 获取某个目录的可用空间 * * @param path * @return */ private long getAvailSpace(String path) { StatFs statFs = new StatFs(path); // 获取分区的个数 // int blockCount = statFs.getBlo原创 2014-12-20 22:25:44 · 542 阅读 · 0 评论 -
15Activity跳转的动画
手机屏幕如下:tran_in的动画:<translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromXDelta="100%p" android:fromYDelta="0" android:toXDel原创 2014-12-05 19:45:49 · 454 阅读 · 0 评论 -
17屏幕滑动的切换以及抽取到父类
当手指在设置向导的页面上滑动时,那么可以滑向上一页和滑向下一页。那么在四个设置向导页面均有重复的代码,所以我们把处理的代码放到一个公共的抽象类中。package com.ustc.mobilemanager;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import原创 2014-12-05 20:50:45 · 515 阅读 · 0 评论 -
21读取联系人的结构
在设置向导的第三个页面,点击选择联系人的时候,进入选择联系人的页面。/** * 选择联系人的按钮的点击事件 * * @param view */ public void selectContact(View view) { Intent intent = new Intent(Setup3Activity.this, SelectContactA原创 2014-12-05 22:36:57 · 571 阅读 · 0 评论