关键词:
根据功能模块划分(Android开发推荐此方法)
- Activity mobilesafe.activty
- 后台服务 mobilesafe.service
- 广播接受者 mobilesafe.receiver
- 数据库 mobilesafe.db.dao
- 对象(java bean) mobilesafe.domain/bean
- 自定义控件 mobilesafe.view
- 工具类 mobilesafe.utils
- 业务逻辑 mobilesafe.engine
闪屏页面(Splash)作用:
- 展示logo,公司品牌
- 项目初始化,数据库copy
- 检测版本更新
- 校验程序合法性(比如:判断是否有网络,有的话才运行)
AndroidMinifest.xml 四大组件都需要在这里配置
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.mxn.mobilesafe" 4 android:versionCode="1" //版本号 5 android:versionName="1.0" > //版本名 6 7 <uses-sdk 8 android:minSdkVersion="16" 9 android:targetSdkVersion="21" /> 10 //项目所需的权限 11 <uses-permission android:name="android.permission.INTERNET" /> 12 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 13 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 14 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 15 <uses-permission android:name="android.permission.READ_CONTACTS" /> 16 <uses-permission android:name="android.permission.SEND_SMS" /> 17 <uses-permission android:name="android.permission.RECEIVE_SMS" /> 18 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 19 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 20 <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 21 <uses-permission android:name="android.permission.VIBRATE" /> 22 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 23 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> 24 <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/> 25 <uses-permission android:name="android.permission.CLEAR_APP_CACHE"/> 26 27 <application 28 android:allowBackup="true" 29 android:icon="@drawable/ic_launcher" 30 android:label="@string/app_name" 31 android:theme="@style/AppTheme" > //主题
//activity的注册 32 <activity 33 android:name="com.mxn.mobilesafe.activity.SplashActivity" 34 android:label="@string/app_name" > 35 <intent-filter> //起始的activity 36 <action android:name="android.intent.action.MAIN" /> 38 <category android:name="android.intent.category.LAUNCHER" /> 39 </intent-filter> 40 </activity> 41 <activity android:name="com.mxn.mobilesafe.activity.HomeActivity" /> 42 <activity android:name="com.mxn.mobilesafe.activity.SettingActivity" /> 43 <activity android:name="com.mxn.mobilesafe.activity.LostFindActivity" > 44 </activity> 45 <activity android:name="com.mxn.mobilesafe.activity.Setup1Activity" > 46 </activity> 47 <activity android:name="com.mxn.mobilesafe.activity.Setup2Activity" > 48 </activity> 49 <activity android:name="com.mxn.mobilesafe.activity.Setup3Activity" > 50 </activity> 51 <activity android:name="com.mxn.mobilesafe.activity.Setup4Activity" > 52 </activity> 53 <activity android:name="com.mxn.mobilesafe.activity.ContactActivity" > 54 </activity> 55 <activity android:name="com.mxn.mobilesafe.activity.AtoolsActivity" > 56 </activity> 57 <activity android:name="com.mxn.mobilesafe.activity.AddressActivity" > 58 </activity> 59 <activity android:name="com.mxn.mobilesafe.activity.CallSafeActivity" > 60 </activity> 61 <activity android:name="com.mxn.mobilesafe.activity.AppManagerActivity" > 62 </activity> 63 <activity android:name="com.mxn.mobilesafe.activity.TaskManagerActivity"> 64 </activity> 65 <activity android:name="com.mxn.mobilesafe.activity.TaskManagerSettingActivity"> 66 </activity> 67 <activity android:name="com.mxn.mobilesafe.activity.AntivirusActivity"></activity> 68 <activity android:name="com.mxn.mobilesafe.activity.AppLockActivity"></activity> 69 <activity android:name="com.mxn.mobilesafe.activity.CleanCacheActivity"></activity> 70 //广播接收者的 注册 71 <receiver android:name=".receiver.BootCompleteReceiver" > 72 <intent-filter> 73 <action android:name="android.intent.action.BOOT_COMPLETED" /> 74 </intent-filter> 75 </receiver> 76 <receiver android:name=".receiver.SmsReceiver" > 77 <intent-filter android:priority="2147483647" > 78 <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 79 </intent-filter> 80 </receiver> 81 <!-- 82 <receiver android:name=".receiver.OutCallReceiver" >静态注册的广播 83 <intent-filter> 84 <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 85 </intent-filter> 86 </receiver> 87 --> 88 //服务的注册 89 <service android:name="com.mxn.mobilesafe.service.LocationService" > 90 </service> 91 <service android:name="com.mxn.mobilesafe.service.AddressService" > 92 </service> 93 <service android:name="com.mxn.mobilesafe.service.KillProcessService"></service> 94 <service android:name="com.mxn.mobilesafe.service.WatchDogService"></service>
95 </application> 96 97 </manifest>
activity_splash.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.mxn.mobilesafe.SplashActivity"
android:background="@drawable/launcher_bg"
android:id="@+id/rl_root">
<TextView
android:id="@+id/tv_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="202dp"
android:textSize="22sp"
android:textColor="#000"
android:shadowColor="#f00" //对版本号设置阴影
android:shadowDx="1" //关于x轴偏移量
android:shadowDy="1"
android:shadowRadius="1" //偏移的角度
android:text="版本号:1.0" />
<ProgressBar
android:id="@+id/progressBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/tv_version"
android:layout_centerHorizontal="true"
android:layout_marginTop="54dp" />
<TextView
android:id="@+id/tv_progress"//给控件id命名采用驼峰式命名: 控件类型_控件的所在位置_控件表示的逻辑内容
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:textColor="#f00"
android:textSize="16sp"
android:text="下载进度" />
</RelativeLayout>
去除标题栏
1.在values目录的styles.xml文件中增加属性
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- 去除标题栏 -->
<item name="android:windowNoTitle">true</item>
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
2.在清单文件中的application中设置theme属性是我们工程的AppTheme
android:theme="@style/AppTheme"
SplashActivity.java
1 public class SplashActivity extends Activity { 2 3 protected static final int CODE_UPDATE_DIALOG; 4 protected static final int CODE_URL_ERROR; 5 protected static final int CODE_NET_ERROR; 6 protected static final int CODE_JSON_ERROR; 7 protected static final int CODE_ENTER_HOME; 8 9 private TextView tvVersion; 10 private TextView tvProgress;// 下载进度展示 11 // 服务器返回的信息 12 private String mversionName;// 版本名 13 private int mversionCode;// 版本号 14 private String mDesc;// 版本描述 15 private String mdowmloadurl;// 下载地址 16 17 private Handler mHandler = new Handler() { 18 public void handleMessage(android.os.Message msg) { 19 switch (msg.what) { 20 case CODE_UPDATE_DIALOG: 21 showUpdateDialog();//显示升级对话框 22 break; 23 case CODE_URL_ERROR: 24 Toast.makeText(SplashActivity.this, "url错误", Toast.LENGTH_SHORT).show(); 25 enterHome(); 26 break; 27 case CODE_NET_ERROR: 28 Toast.makeText(SplashActivity.this, "网络错误", Toast.LENGTH_SHORT).show(); 29 enterHome(); 30 break; 31 case CODE_JSON_ERROR: 32 Toast.makeText(SplashActivity.this, "json数据解析解析错误", Toast.LENGTH_SHORT).show(); 33 enterHome(); 34 break; 35 case CODE_ENTER_HOME: 36 enterHome(); 37 break; 38 default: 39 break; 40 } 41 }; 42 }; 43 private SharedPreferences sp; 44 private RelativeLayout rlRoot; 45 46 @Override 47 protected void onCreate(Bundle savedInstanceState) { 48 super.onCreate(savedInstanceState); 49 setContentView(R.layout.activity_splash); 50 51 tvVersion = (TextView) findViewById(R.id.tv_version); 52 tvProgress = (TextView) findViewById(R.id.tv_progress);// 默认隐藏 53 tvVersion.setText("版本号:" + getVersionCode());//给版本号设置内容,动态获取的值 54 55 rlRoot = (RelativeLayout) findViewById(R.id.rl_root); 56 57 58 //判断是否需要自动更新 59 sp = getSharedPreferences("config", MODE_PRIVATE); 60 boolean autoUpdate = sp.getBoolean("auto_update", true); 61 62 copyDB("address.db");//拷贝归属地查询数据库 63 copyDB("antivirus.db");//拷贝病毒库 64 //更新病毒库 65 updateVirus(); 66 67 if(autoUpdate){ 68 checkVersion(); 69 }else{ 70 mHandler.sendEmptyMessageDelayed(CODE_ENTER_HOME, 2000);//发送一个延时2s的消息 71 } 72 73 //闪屏页渐变动画效果 74 AlphaAnimation anim = new AlphaAnimation(0.3f, 1f);//从哪个度数到哪个度数。。。是0-1的值。从0.3的透明度到完全不透明 75 anim.setDuration(2000);//延时2s 76 rlRoot.startAnimation(anim); 77 } 78 79 80 //更新病毒数据库 81 private void updateVirus() { 82 //联网从服务器获取到最近数据的MD5的特征码 83 HttpUtils httputils = new HttpUtils(); 84 String url = "http://172.28.3.112:8080/virus.json"; 85 httputils.send(HttpMethod.GET, url, new RequestCallBack<String>(){ 86 87 @Override 88 public void onFailure(HttpException arg0, String arg1) { 89 // TODO Auto-generated method stub 90 91 } 92 93 @Override 94 public void onSuccess(ResponseInfo<String> arg0) { 95 // TODO Auto-generated method stub 96 //System.out.println(arg0.result); 97 98 // JSONObject jsonobject = new JSONObject(arg0.result); 99 // String md5 = jsonobject.getString("md5"); 100 // String desc = jsonobject.getString("desc"); 101 102 } 103 104 105 106 }); 107 108 } 109 110 111 112 // 获取本地版本号 113 private int getVersionCode() { 114 PackageManager packgeManager = getPackageManager();//拿到包的管理者。。包管理器,获取手机里面每个apk的信息(清单文件信息) 115 try {// 获取包的信息。。 getPackageName()当前应用程序的包名 等于 package="com.mxn.mobilesafe"
//根据包名获取清单文件中的信息,其实就是返回一个保存有清单文件信息的javabean
//packageName :应用程序的包名
//flags : 指定信息的标签,0:获取基础的信息,比如包名,版本号,要想获取权限等等信息,必须通过标签来指定,才能去获取
//GET_PERMISSIONS : 标签的含义:处理获取基础信息之外,还会额外获取权限的信息
//getPackageName() : 获取当前应用程序的包名 116 PackageInfo packageInfo = packgeManager.getPackageInfo(getPackageName(), 0); 117 int versionCode = packageInfo.versionCode; 118 String versionName = packageInfo.versionName; 119 System.out.println("versionname=" + versionName + ";" + "versioncode=" + versionCode); 120 return versionCode; 121 } catch (NameNotFoundException e) { 122 // 没有找到包名时 123 e.printStackTrace(); 124 } 125 return -1; 126 127 }
128 //连接服务器 129 // 从服务器获取版本信息进行校验 130 private void checkVersion() { 131 final long startTime = System.currentTimeMillis(); 132 133 new Thread() {// 网络访问在分线程异步加载数据
////1.连接服务器,查看是否有最新版本, 联网操作,耗时操作,4.0以后不允许在主线程中执行的,放到子线程中执行 134 public void run() { 135 Message msg = Message.obtain(); 136 HttpURLConnection con = null; 137 try {// 本机地址:localhost 如果用模拟器加载本机的地址:用10.0.0.2来替换
//1.1连接服务器
//1.1.1设置连接路径
//spec:连接路径 138 URL url = new URL("http://10.0.2.2:8080/update.json"); 139 ////1.1.2获取连接操作 140 con = (HttpURLConnection) url.openConnection();//http协议,httpClient
//1.1.3设置请求方式 141 con.setRequestMethod("GET");//设置请求方法
//1.1.4设置超时时间 142 con.setConnectTimeout(5000);// 设置连接超时,5S 143 con.setReadTimeout(5000);// 设置响应超时,链接上了,但服务器迟迟没有响应 144 con.connect();// 链接服务器 145 //1.1.5获取服务器返回的状态码,200,404,500 146 int responseCode = con.getResponseCode();//获取响应码 147 if (responseCode == 200) {
// 解析json 148 //1.获取服务器返回的流信息 149 InputStream inputStream = con.getInputStream(); 150 // 2.流转化为字符串 151 String result = StreamUtils.readFormStream(inputStream);//自己定义的StreamUtils工具类 152 System.out.println("网络结果返回:" + result); 153 //3.result是一个json字符串,进行解析 154 155 JSONObject jo = new JSONObject(result);
//4.获取数据 156 mversionName = jo.getString("versionName");//拿到服务器端的版本名 157 mversionCode = jo.getInt("versionCode");//拿到服务器端的版本号 158 mDesc = jo.getString("description");//拿到服务器端的版本描述 159 mdowmloadurl = jo.getString("downloadUrl");//拿到服务器端的下载链接windowbackground闪屏页无法填充屏幕参考技术A答案:要让闪屏页能够填充屏幕,您需要将您的图片设置为能够填充屏幕的尺寸,并且应该按照设备的分辨率来调整图片的尺寸大小。另外,您还需要确保图片的比例与屏幕的比例一致,这样才能保证图片能够填满屏... 查看详情
app闪屏页如何实现?告别白屏!看这一篇就够了!
...之后登陆界面会很突兀地跳出来布局,最好的做法是实现闪屏页,由闪屏页跳转到MainActivity去,再跳转完成后finish掉闪屏页,这样就很优雅地完成了app启动——>启动完成的效果。 本期,我们就来模仿微信来实现微信... 查看详情
闪屏页+引导页
实现原理:用SharedPreferences实现。创建一个boolean的变量,默认值为true。当判断这个变量是true的时候,说明是第一次运行,就跳转到另一个引导页面,否则进入主页面。引导页面跳转到最后一张图片时,点击某按钮发生跳转事件... 查看详情
闪屏页和右上角的倒计时跳转
效果图:闪屏页用到了handler和CountDownTimer类,还需配置一下Activity的主题,这里是:android:theme="@android:style/Theme.NoTitleBar.Fullscreen"全屏主题的意思。实现源码:1packagecom.example.shanping;23importjava.lang.ref.WeakReference;45import 查看详情
这交互炸了:闪屏页是像云一样消失的
《交互炸了》或许是一系列高端特效教程,文中会介绍一些比较炫酷的特效,以及实现的思路。特效实现本身也许不会有太大的难度。难点在于实现的思路。一旦思路被打开,特效将很简单实现。效果项目地址:https://github.com/github... 查看详情
手机安全卫士——流量管理
首先先看一下界面布局文件都很简单,就不贴代码了!贴出主要的代码 每一个不同的程序只能有一个UId,但是一个应用里面可以有多个PId,所以我们获取每个应用程序的uid所以我们在软件管理里面用到的AppInfo实体类和AppInfos... 查看详情
这交互炸了:闪屏页是像云一样消失的(代码片段)
《交互炸了》或许是一系列高端特效教程,文中会介绍一些比较炫酷的特效,以及实现的思路。特效实现本身也许不会有太大的难度。难点在于实现的思路。一旦思路被打开,特效将很简单实现。效果项目地址:https://github.... 查看详情
手机安全卫士——通讯卫士-黑名单的管理
CallSafeActivity.javapublicclassCallSafeActivityextendsActivity{privateListViewlist_view;privateList<BlackNumberInfo>blackNumberInfos;privateLinearLayoutll_pb;privateBlackNumberDaodao;privateCal 查看详情
手机安全卫士——缓存清理
CleanCacheActivity.java/***缓存清理*/publicclassCleanCacheActivityextendsActivity{privatePackageManagerpackageManager;privateList<CacheInfo>cacheLists;privateListViewlist_view;@Overrideprotectedvoid 查看详情
手机安全卫士——进程管理
首先看一下界面:TaskManagerActivity.java//進程管理publicclassTaskManagerActivityextendsActivity{@ViewInject(R.id.tv_task_process_count)privateTextViewtv_task_process_count;@ViewInject(R.id.tv_task_memory)privateT 查看详情
为啥手机会闪屏,总是闪屏怎么办?
若您使用的是荣耀70手机,在使用时出现闪屏问题,可以根据以下情况进行排查:1、如果屏幕显示突然出现闪屏。可能是由于环境干燥时人体静电对显示信号产生干扰,手机系统有自动纠错功能,在数秒内显示将恢复正常,若未... 查看详情
手机安全卫士——主界面的开发
activity_home.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_par 查看详情
手机安全卫士——软件管理-用户程序和系统程序
首先看一下界面:AppManagerActivity.java//软件管理publicclassAppManagerActivityextendsActivityimplementsView.OnClickListener{List<AppInfo>appinfos;ListViewlv;privateList<AppInfo>userAppInfos;privateLis 查看详情
遭遇垃圾短信?安全卫士帮你拦截
手机安全问题一度成为用户关注的焦点。在开展的“用户最关注的手机安全隐患”调研中显示,不少手机用户遭遇了手机吸费和流量等问题,垃圾短信、骚扰电话更是防不胜防。被央视曝光的几款APP仅是冰山一角,运行在手机终... 查看详情
360手机问题
...角的抢红包啥意思没地方关谁能告诉我怎么关这个是360f4手机,安装有360安全卫士,找到悬浮窗的设置已经是关的 @360杀毒 @360安全社区 @360安全卫士 @360手机助手 @360技术支持 ... 查看详情
360安全卫士推出“极速版”:永久免费无弹窗广告!
2021年7月20日,360安全卫士正式对外发布新产品——360安全卫士“极速版”。据悉,“极速版”主打“永久免费、无弹窗广告”,聚焦简单操作与纯净视觉体验,是360安全卫士的一次革新。目前,该版本已在官... 查看详情
如何制作一个闪屏页面
...号【小蚂蚁教你做游戏】,学习更多游戏开发原创教程。闪屏(Splash)指的是当你打开一个应用时,首先映入眼帘的那个界面。通常闪屏页面都会比较简单,因为要一闪而过(这大概就是为什么叫做闪屏了),一般都会放置产品的LOGO... 查看详情
pythonplugin是恶意程序吗?
我的手机是诺基亚N95,360手机卫士老是扫描到一款叫pythonplugin的软件是伪装成系统组件的恶意程序,但是它也卸载不了,请教大虾应该怎么办?安装安全管家1.91版在安全管家中选择安全模式,然后在安全管家的程序管理中删除... 查看详情