Android 一个apk多个ICON执行入口方法总结

某些情况下,我们需要为我们的apk设置多个执行入口,也就是安装后在应用程序列表中出现多个ICON图标,各个ICON是APP不同模块的入口点,并且各个模块运行在不同的进程中。

可能这种需求很少见,但还是有一个现实的例子:系统中的联系人和电话这两个程序。表面看来这是两个独立的应用程序,但实际上它们只是一个应用程序的两个执行入口而已,点击联系人图标就会进入联系人界面,点击电话图标就会进入拨号界面,这都是通过设置该项目下Activity的属性来实现的。

Android一个应用多个入口有以下三种实现方式:

  • 使用intent-filter
  • 使用process属性
  • 使用别名(activity-alias)

方法一:直接在Activity节点中添加intent-filter

 <intent-filter>
          <actionandroid:name="android.intent.action.MAIN"/>
          <categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>

方法二:使用Activity的属性process,不同的Activity是运行在不同的进程中

需要注意的是,为Activity指定process属性后,还必须为其指定launchMode为singleInstance,这样才有效。

<activity
     android:name=".MainActivity"
     android:label="@string/app_name"
android:process=”:process.main”>
     <intent-filter>
         <actionandroid:name="android.intent.action.MAIN"/>
         <categoryandroid:name="android.intent.category.LAUNCHER"/>
     </intent-filter>
</activity> 
 
<activity
    android:name=".MainActivityB"
android:label="@string/app_nameB"
android:process=”:process.sub”
android:icon=”@drawable/icon1”
android:launchMode = “singleInstance”>
    <intent-filter>
       <actionandroid:name="android.intent.action.MAIN"/>
       <categoryandroid:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

**方法三:使用activity-alias **

activity-alias是android里为了重复使用Activity而设计的。 当在Activity的onCreate()方法里,执行getIntent().getComponent().getClassName();得到的可能不是这个Activity的名字,有可能是别名的名字

创建两个图标:

<activity
     android:name=".MainActivityB"
     android:exported="true" 
     android:label="@string/app_nameB">
     <intent-filter>
         <actionandroid:name="android.intent.action.MAIN"/>
         <categoryandroid:name="android.intent.category.LAUNCHER"/>
     </intent-filter>
 </activity>
       
 <activity-alias
    android:name="ActivityB_copy"
    android:icon="@drawable/icon1"   
    android:screenOrientation="landscape"
    android:targetActivity=".MainActivityB">
    <intent-filter>
        <actionandroid:name="android.intent.action.MAIN"/>
        <categoryandroid:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity-alias>

备注:

· 因为多个图标共用一个包名,所以只要卸载一个程序,与这个APK包名相同的程序也都会在桌面上消失;

· 从其它应用跳转到该APK时,需要通过ACTION区分跳转到具体哪一个模块(比如从资源管理器选择一个数据时,到底打开哪一个应用,需要通过action加以区分);

· 由于多个图标、splash、标题等需要区分的资源都放在一个APK中,这增加了APK的大小。

参考连接:http://blog.csdn.net/netwalk/article/details/50949287

转载于:https://my.oschina.net/fltsp/blog/826295

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值