zoukankan      html  css  js  c++  java
  • 多个Icon的APk——实现多程序入口总结

    某些情况下,我们需要为我们的apk设置多个执行入口,也就是安装后在应用程序列表中出现多个ICON图标,各个ICONAPP不同模块的入口点。有一个现实的例子:系统中的联系人和电话这两个程序(如下图所示)

    现在越来越多的应用也具备这样的设置,比如百度应用(百度应用+应用管理),腾讯应用宝等。
    下面我们来总结一下网上流传广泛的3种实现方式。

                                   

    实现方式1intent-filter
                                   
    给相应的Activity增加intent-filter
    <ativity android:name="A2" android:label="@string/app_name2">
       <intent-filter>
          <action android:name="android.intent.action.MAIN" />  
          <category android:name="android.intent.category.LAUNCHER" />  
       </intent-filter>  
    </activity>  
    

      

    实现方式2process属性

                                   

    Activity有一个重要的属性process,这个属性是指定Activity运行时所在的进程。没有指定此属性的话,所有程序组件运行在应用程序默认的进程中,这个进程名跟应用程序的包名一致。中所有组建元素的process属性能够为该组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将你的程序放在多进程中运行。如果这个属性被分配的名字以:开头,当这个activity运行时,一个新的专属于这个程序的进程将会被创建。
    实现如下:
    <activity android:name=".A1"
        android:label="@string/app_name"
        android:process=":process.main">
       <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
    </activity>
        
    <activity android:name=".A2"
        android:label="@string/app_name2"
        android:process=":process.sub"
        android:icon="@drawable/icon2"
        android:launchMode ="singleInstance">
       <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
    </activity> 
    

      

    实现方式3activity-alias
    alias => 别名
                                   
    实现如下:
    <activity-alias
       android:name="A3"
       android:icon="@drawable/icon2"
       android:label="@string/app_name2"
       android:targetActivity=".A2" >
       <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
    </activity-alias>
    

      这里targetActivity作用是让A3A2公用一个界面,也就是给A2起了个“小名”叫A3A2Manifest.xml中只是一个正常注册的Activity,但是A3却在桌面上有一个程序图标,单击图标可以进入A2了。完整的Manifest.xml如下:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.wang.multiicon"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="10" />
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".A1"
                android:icon="@drawable/ic_launcher_contacts"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".A2"
                android:label="@string/app_name2" >
            </activity>
            <activity-alias
                android:name="A3"
                android:icon="@drawable/ic_launcher_phone"
                android:label="@string/app_name2"
                android:targetActivity=".A2" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity-alias>
        </application>
    
    </manifest>
    

      需要说明的一点:系统Contacts应用就是使用第三种方式实现的多程序入口的。

    总结:上面三种实现方式其实原理都是一样的,都是为第二个Activity添加
    "<action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />"
    intent-filter为程序增加入口图标。
    第三种实现方式的源码:https://files.cnblogs.com/feifei1010/MultiIconDemo.zip

    参考资料:
    http://www.apkbus.com/android-18785-1-1.html                              

     

  • 相关阅读:
    10.$和#的区别 | 11.添加对象时如何把生成的id返回
    9. Mybatis的分页助手(pageHelper):
    8.逆向工程
    7.动态Sql语句
    6.关联查询
    5.解决列名与属性名不一致的情况
    4.接口与映射文件结合使用
    3.优化Mybatis
    2、Mybatis的编程Demo
    阿帕奇ab测试
  • 原文地址:https://www.cnblogs.com/feifei1010/p/2647327.html
Copyright © 2011-2022 走看看