如何实现开机启动、清缓存、杀进程、悬浮窗口单双击区分,附源码

来源:互联网 发布:spycall软件 编辑:程序博客网 时间:2024/05/18 02:59

一、开机启动

  很多手机软件具备开机启动的功能,有时候让软件开机启动会非常实用。那么是如何实现开机启动的呢?通过查找我们了解到开机后系统会发送一个启动完毕的广播,Intent.ACTION_BOOT_COMPLETED,那么我们只需要自定义一个BroadcastReciever接收这个广播,在接收到广播后启动我们的程序就可以实现开机启动了。

      以本程序中的MyBroadcastReceiver为例:

复制代码
public class MyBroadcastReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        String action = intent.getAction();        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {            // 是否选择了开机启动            boolean start = PreferenceManager.getDefaultSharedPreferences(                    context).getBoolean(                    CleanerActivity.KEY_START_WHEN_BOOT_COMPLETED, true);            if (start) {                Intent i = new Intent();                i.setClass(context, FloatService.class);                context.startService(i);            }        }    }}
复制代码

  AndroidManifest.xml中的声明如下:

 <receiver android:name="MyBroadcastReceiver" >            <intent-filter>                <action  android:name="android.intent.action.BOOT_COMPLETED" />            </intent-filter></receiver>

二、清除缓存

  在Android中Settings的源码中使用了PackageManager的deleteApplicationCacheFiles()方法清除缓存,但是作为第三方软件使用这个函数难度很大,我们在PackageManager中还发现freeStorageAndNotify()方法亦可实现清除缓存,而且第三方软件使用时难度相对较小。因此,我们使用freeStorageAndNotify()方法来实现缓存的清理。

  使用freeStorageAndNotify()时需要在AndroidManifest.xml中声明permission

<!-- 清除缓存时需要此权限 --><uses-permission android:name="android.permission.CLEAR_APP_CACHE" />

  该函数的具体使用可以参考源码MyFloatView.java中的clearCache()函数。

三、杀进程

  在ActivityManager.java中为我们提供了killBackgroundProcesses(String packageName)函数来杀死进程具体如何杀死进程可以参考源码MyFloatView.java中的killBackgroundProcess()函数。杀进程需要在AndroidManifest中声明如下权限

<!-- 杀死进程时需要该权限 --><uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

四、悬浮窗口的单双击

  网上有很多实现悬浮窗口的教程,但是很少有人实现悬浮窗口的单击和双击事件。在本程序中我们通过添加标志位、记录用户点击悬浮窗口时的时间、单击和双击的响应使用多线程(使用Timer和TimerTask)等方式来判断单击和双击。在MyFloatView.java中的onTouchEvent()函数中对单双击进行判断。

  区分单双击,是通过判断两次单击的间隔来实现的。单击事件的相应线程在执行前先进行一定时间的休眠等待判断是否为双击,根据标志位判断执行是否执行单击响应线程的函数。

五、统计RAM可用内存大小

  A:Android中的MemInfoReader类通过读取/proc/meminfo实现了内存大小相关的函数,但第三方程序无法调用,我们将直接将MemInfoReader.java直接拷贝到项目中,作适当修改即可使用。

  B:通过MemoryInfo和ActivityManager获得可用Ram内存大小

    ActivityManager am = (ActivityManager) this                .getSystemService(Context.ACTIVITY_SERVICE);        MemoryInfo mi = new MemoryInfo();        am.getMemoryInfo(mi); // mi.availMem; 当前系统的可用内存        Log.e("tag", "getMemoryInfo: " + mi.availMem);
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 货车横拉杆弯怎么办 拉杆轮子坏了怎么办 外拉杆球头旷了怎么办 古早味蛋糕回缩怎么办 孩子迷上嘻哈怎么办 吃扇贝过敏了怎么办 海鲜和杨梅一起怎么办 我买东西没眼光怎么办 兔子身上有跳蚤怎么办 物业不提供发票怎么办 购房发票 不给怎么办 新锐大灯光散不聚怎么办 网络碰到垃圾人怎么办 有人侮辱我家人怎么办 亲人欠网贷还不上现在病重怎么办 亲人欠网贷现在病重怎么办 小孩子大嘴巴病怎么办 小孩子有心胀病怎么办 小孩子有胃痛病怎么办 大修基金用完了怎么办 基金买错了怎么办 基金公司倒闭了怎么办 桔子分期有风险怎么办 想买vivox21没钱怎么办 中介收钱不办事怎么办 手机应用程序几个运行怎么办 网上彩票是骗局怎么办 辞职后不想辞职怎么办 口头辞职后悔了怎么办 纸质承兑丢了怎么办 天天利财倒闭怎么办 网络理财平台诈骗怎么办 银行理财产品到期后怎么办 30岁没工作怎么办 理财投资被骗了怎么办 支付宝不想收钱怎么办 信融财富逾期怎么办 拼多多砍价上限怎么办 肺功能只有50%怎么办 办小商店营业执照怎么办 悉尼退税未到账怎么办