做产品留存很重要,做变现小白很重要, 如何让自己的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