- 这是一个手机安全管家的软件,模拟手机管家软件。
- 创建项目
-
创建splash活动
//获取版本号等信息 PackageManager packageManager = getPackageManager(); //得到包的信息 try { packageInfo = packageManager.getPackageInfo(getPackageName(),0); //得到包的信息 } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } versionName = packageInfo.versionName; //版本名
-
沉浸任务栏的实现
//透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
-
沉浸任务栏只需在加载layout之后添加上述代码就可以了。
-
检测更新
使用json请求服务器中的versionCode,如果大于本地的,就弹出窗口提示要更新。
-
开进程进行数据请求
new Thread(){ @Override public void run() { Message message = Message.obtain(); HttpURLConnection connection = null; try{ URL url = new URL(UPDATEURL); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET");//设置请求方法 connection.setConnectTimeout(5000); //设置连接超时 connection.setReadTimeout(5000); //设置响应超时 connection.connect(); //连接服务器 int responseCode = connection.getResponseCode(); //获得响应码 if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); //获取输入流
-
把获得的数据转成string,并进行解析
String result = StreamUtils.readFromStream(inputStream); //把输入流转成字符串 //解析json JSONObject jsonObject = new JSONObject(result); versionNameFromInternet = jsonObject.getString("versionName"); versionCodeFromInternet = jsonObject.getInt("versionCode"); descriptionFromInternet = jsonObject.getString("description"); downloadUrlFromInternet = jsonObject.getString("downloadUrl");
-
然后通过Handler更新ui
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 0: showUpdateDialog();
-
通过上述过程实现从服务器检查软件的更新信息。
-
-
使用 MaterialNavigationDrawer 开源框架
- 使用过程
- 添加支持
- 新建类继承自 MaterialNavigationDrawer,重写 init 方法
- setDrawerHeaderImage(R.drawable.title); 设置图片
- this.addSection(newSection("流量统计", R.drawable.netmanager_home, new FragmentButton()));
- 添加一项,里面有多个参数,可以打开活动或者Fragment ,但是第一个必须是一个 Fragment,否则会抛异常
- this.addBottomSection(newSection("设置中心", R.drawable.ic_settings_black_24dp, new Intent(this, SettingActivity.class)));
- 添加底部设置按钮。
- 在style中添加一个style
-
- <style name="MyNavigationDrawerTheme" parent="MaterialNavigationDrawerTheme.Light">
<item name="colorPrimary">#03a9f4</item>
<!--<item name="colorPrimaryDark">#558b2f</item>-->
<item name="colorPrimaryDark">#ff286b8b</item>
<item name="colorAccent">#ffffff</item>
<item name="drawerType">@integer/DRAWERTYPE_IMAGE</item>
</style>
- 将Activity的主题设置成刚刚添加的主题。
- 基本步骤如上。。。
完成了手机防盗功能的开发。
- 通过设置安全手机号码,绑定手机卡序列号,收听开机广播等方式,达到开机检测手机卡是否更换,如果更换,则向安全手机号码发送短息,提示手机卡已经更换。
- 接收短信拦截,通过设置比系统短信权限更高的广播接收器,拦截特定的短信,然后阻拦其继续传播,达到接收短信指令的目的(然而4.4已经不能用了)。
- 判断短信指令,通过不同的指令来进行不同的动作。
-
短信控制报警声音,接收到信息后进行判断,通过
//播放报警音乐 MediaPlayer player = MediaPlayer.create(context, R.raw.ylzs); player.setVolume(1f,1f); player.setLooping(true); player.start();
-
来进行循环播放报警音乐
-
定位
-
通过位置服务来获取位置,发送位置给安全号码。
-
一键锁屏和清除数据。
- 通过Administered来注册设备,达到控制系统的目的。
-
完成高级工具里的号码归属地查询和来去电归属地显示
-
来电归属地查询
通过查询数据库来显示号码的归属地
-
数据库的导入,复制到/data/data/文件夹下。
-
来去电归属地显示,通过之前的号码归属地查询功能,通过服务和广播接收器来监听系统的来去电信息,并在来电或者去电的过程中显示号码的归属地。
-
自定义窗口的显示。
private void showToast(String string) { windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.height = WindowManager.LayoutParams.WRAP_CONTENT; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; params.format = PixelFormat.TRANSLUCENT; params.type = WindowManager.LayoutParams.TYPE_TOAST; params.setTitle("Toast"); textView = new TextView(this); textView.setText(string); textView.setTextColor(Color.BLUE); windowManager.addView(textView,params); }
-
通过上述代码显示一个显示在窗口的视图。
初步完成通讯卫士中的黑名单列表
-
黑名单数据的创建。
-
数据库的增删改查。
-
数据库测试用例的编写。
-
使用RecyclerView展示数据。
-
在xml文件中使用
<android.support.v7.widget.RecyclerView xmlns:android="http:// schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > </android.support.v7.widget.RecyclerView>
-
设置参数在Activity中
recyclerView = (RecyclerView) findViewById(R.id.recycle_view);//设置下拉新 swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager); //设置下拉刷新监听 swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() //设置滑动监听 recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() recyclerView.setAdapter(adapter);
-
编写adapter。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.SimpleViewHolder>
在内部类 SimpleViewHolder 中初始化Item中的各个控件。 在 nBindViewHolder 方法中完成数据的加载。
-
-
RecyclerView 下拉刷新和上拉加载更多
-
下拉刷新
在 xml 文件中 使用SwipeRefreshLayout 包裹 RecyclerView
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/recycle_view" layout="@layout/view_recycler_view"> </include> </android.support.v4.widget.SwipeRefreshLayout>
java代码中
swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh); //设置下拉刷新监听 swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new Thread() { @Override public void run() { blackNumberDb = new BlackNumberDb(CallSafeActivity.this); blackNumberInfos = blackNumberDb.findPar2(0, 20); handler.sendEmptyMessage(1); } }.start(); } });
上拉加载更多
//设置滑动监听 recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener()
使用滑动监听实现。
-
##2015-12-13##
- 软件管理页面的实现
- 内存剩余的获取,系统提供API可供调用。
- 软件信息的管理,使用软件信息对象接收所有的软件信息,并使用RecyclerView展示信息。
- 表头的实现。
- 使用开源框架 sticky-headers-recyclerview 实现。
- 图标右侧弹窗为 popupWindow 。
##2016-1-3##
- 进程管理的实现
- 使用系统API查看当前运行的进程,并对进程进行关闭等操作。
- 软件杀毒功能的实现
- 通过轮训手机上安装软件的 MD5值 并和病毒数据库中的样本做比较,从而进行软件的杀毒功能。
##2016-1-5##
- 项目总结: 通过编写软件,对安卓系统的基本运行机制有了初步的了解,对一些软件功能的具体实现也有了初步的认识,并且认识到了面向对象编程的思想。加强了编码能力,认识到规范编码的重要性,巩固了安卓基础。由于时间原因无法对项目进行进一步的完善,希望以后能更好的写出更规范的代码。。。