android隐藏桌面图标

  做产品留存很重要,做变现小白很重要, 如何让自己的app一直处于活跃状态,这里另辟蹊径,在手机息屏的时候创建一个和系统图标一样的快捷方式。然后将自己的应用的图标隐藏。下面我们来看具体步骤:

1.如何监听手机息屏.

   一般产品集成工具类时都会有相关类似的方法,

public class ScreenStatusChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (BuildConfig.DEBUG) LogUtil.d("ScreenStatusChangeReceiver", "onreceive");

        String action = intent.getAction();
        if(Intent.ACTION_SCREEN_ON.equals(action)){
            if (BuildConfig.DEBUG) {
                LogUtil.d("ScreenStatusChangeReceiver", "OnScreenOn");
            }
            EventBus.getDefault().post(new OnScreenOn());
        }
        else if(Intent.ACTION_SCREEN_OFF.equals(action)){
            if(BuildConfig.DEBUG) {
                LogUtil.d("ScreenStatusChangeReceiver", "OnScreenOff");
            }
            EventBus.getDefault().post(new OnScreenOff());
        }
        else if (Intent.ACTION_USER_PRESENT.equals(action)) {
            if(BuildConfig.DEBUG) {
                LogUtil.d("ScreenStatusChangeReceiver", "OnUserPresent");
            }
            EventBus.getDefault().post(new OnUserPresent());
        }
    }
}


在应用程序启动时动态注册该广播:

ScreenStatusChangeReceiver mScreenReceiver = new ScreenStatusChangeReceiver();
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.setPriority(90000);
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
screenStateFilter.addAction(Intent.ACTION_USER_PRESENT);
ApplicationEx.getInstance().registerReceiver(mScreenReceiver, screenStateFilter);

最后通过EventBus 将该事件发送出来,

2.如何创建快捷方式

因为快捷方式国内众多ROM厂商定制各不相同,版本api也有区别,这里我将我封装好的工具类,仅供大家参考,里面包含了8.0快捷方式的处理,Build.MODEL为SM-G9508的处理,以及快捷方式是否创建成功的判断,欢迎大家下载。

3.如何隐藏桌面图标?如何恢复?如何判断桌面隐藏图标是否成功?

隐藏桌面图标:

public static void magicHide() {
        try {
            Context context = ApplicationEx.getInstance();
            PackageManager pm = context.getPackageManager();
            ComponentName cn = new ComponentName(context, SplashActivity.class);
            pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        } catch (Exception e) {
            LogUtil.error(e);
        }
    }

恢复桌面图标:

public static void magicShow() {
        try {
            Context context = ApplicationEx.getInstance();
            PackageManager pm = context.getPackageManager();
            ComponentName cn = new ComponentName(context, SplashActivity.class);
            pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
        } catch (Exception e) {
            LogUtil.error(e);
        }
    }

判断是否隐藏成功:

public static int getMagicStats() {
        try {
            PackageManager pm = ApplicationEx.getInstance().getPackageManager();
            ComponentName cn = new ComponentName(ApplicationEx.getInstance(), SplashActivity.class);
            int enableStatus = pm.getComponentEnabledSetting(cn);
            if (BuildConfig.DEBUG) {
                Log.d("magic_feature", "getMagicStats:" + (enableStatus == PackageManager.COMPONENT_ENABLED_STATE_ENABLED ? "enabled" : enableStatus == PackageManager.COMPONENT_ENABLED_STATE_DISABLED ? "disable" : ("unknown(" + enableStatus + ")")));
            }
            return enableStatus;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
    }

所有的准备工作完成了,这一套保活,用户卸载不掉的思路,就是在息屏时候,创建一个和系统图标一样的快捷方式,将系统图标隐藏,快捷方式的Activity extends SplashActivity, 用户只能通过快捷方式进入产品内部,对于小白来说,卸载快捷方式只有移除选项,卸载应用程序只能在设置中处理。这点已经足够了,还需指出的时是隐藏图标的方法会延迟几秒钟生效,隐藏时若当前Activity是我们产品的会明显的看到界面缩放回去,所以在息屏的时候触发,这样就把这些不足掩藏过去。

附上创建快捷方式工具类下载地址:https://download.csdn.net/download/ljyly525/10650634

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值