经常看到有App提供多个入口,就是桌面上显示有多种图标,点不同图标进入不同的功能页。

基本实现很简单,以下是步骤。

1. AndroidManifest.xml里注册别名。

在 里添加

                

说明一下:

android:name 参数就是这个入口的名称。

android:enabled 打开和关闭的参数。

android:icon 入口显示的图标,这样就可以给不同的入口设置不同的图标了。

android:label 就是桌面上显示的名称。

android:targetActivity 是重点,就是你点击了不同的入口会选择进入的页面。通过这个就能设置不同入口的不同功能了。

搞定,So easy!。

不要急,我们拓展一下。

2.动态更新入口。

刚才我们设置了``````,通过名称,我们就可以使用 PackageManager 对他进行操作了。

假设我们有个主要的 LAUNCHER ,像这样名叫 splashActivity :

                

以及一个上面这样的 activity-alias

我们通过 PackageManager 的 setComponentEnabledSetting 方法就可以关闭和打开入口:

private ComponentName mDefault = getComponentName(); private ComponentName mDoubleSpring = new ComponentName(getBaseContext(),"com.boosj.boosjapp.test"); private PackageManager mPm = getApplicationContext().getPackageManager(); disableComponent(mDefault); enableComponent(mDoubleSpring);  private void enableComponent(ComponentName componentName) {  mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP); } private void disableComponent(ComponentName componentName) {  mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP); }

这个例子中就关闭了主入口,仅仅保留了test入口。执行后查看桌面就会发现只剩下test的入口图标了。

当然,也可以给他加上条件,实现动态自动更新。

private ComponentName mDefault = getComponentName(); private ComponentName mDoubleSpring = new ComponentName(getBaseContext(),"com.boosj.boosjapp.test"); private PackageManager mPm = getApplicationContext().getPackageManager();  /**   * 计算是否在日期范围内   */  try {   Date date = new Date();   Log.d("LOGCAT",mathFactory.Date2ms("2018-03-01 00:00:00")+"_"+date.getTime());   if (mathFactory.Date2ms("2018-03-01 00:00:00")>date.getTime()) {    disableComponent(mDefault);    enableComponent(mDoubleSpring);   }else {    enableComponent(mDefault);    disableComponent(mDoubleSpring);   }  }catch (Exception e){   enableComponent(mDefault);   disableComponent(mDoubleSpring);  } private void enableComponent(ComponentName componentName) {  mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP); } private void disableComponent(ComponentName componentName) {  mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP); }

这个例子中,实现了2018.3.1日前桌面会显示 activity-alias 的图标,而原来的主要图标被隐藏了。等到2018.3.1过完,图标又回复原样,

3.一个小问题。

这个方法有个问题,就是在主 LAUNCHER disable后,如果要更新,就会报找不到 LAUNCHER 文件的错误而使App崩溃。而不让更新显然是不可能的。所以那种只显示一个图标,按条件动态更新的需求,用此方法是恐怕不能做到了。

(或者有什么更好的主意,欢迎探讨。)

这个方法其实本来是想做App图标的动态更新的。(然而最终失败了,具体原因就是上面说的崩溃问题。)

还是把他作为多入口的方法记录一下吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. Android 项目导入eclipse中报错但找不到错误地方的解决方法
  2. Linux ubuntu repo安装方法
  3. 为android开放类增加自定义成员方法
  4. Android测试方法总结汇总
  5. Android项目源码混淆问题解决方法
  6. (转)Android从服务器端获取数据的几种方法
  7. Android socket通信 readline方法阻塞
  8. android usb主从设备模式解析,网络连接调试方法
  9. Android SDK Samples,学习Android的好方法

随机推荐

  1. android property
  2. META-INF Files - Digests, Signature an
  3. android异步加载图片
  4. Android(安卓)工具类
  5. Android(安卓)studio 53 文件下载
  6. Android(安卓)全屏显示实例
  7. android的一个编译问题
  8. android java.util.ConcurrentModificati
  9. Android(安卓)CTS Debug
  10. Android(安卓)zip文件压缩解压缩