activity-alias是android里为了重复使用Activity而设计的。
当在Activity的onCreate()方法里,执行getIntent().getComponent().getClassName();得到的可能不是这个Activity的名字,有可能是别名的名字,例如:在AndroidMenifest.xml有如下配置:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.broadcastdemo.TestMainActivity"
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-alias //activity-alias配置
android:name="com.example.broadcastdemo.TestMainActivityAlias"
android:targetActivity="TestMainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
...
</application>
运行这个应用demo时,这个应用会在桌面上创建两个快捷图标,点击这两个图标都能进入到TestMainActivity应用。
这时getIntent().getComponent().getClassName() 得到的名字就不一样,一个是com.example.broadcastdemo.TestMainActivity,一个是com.example.broadcastdemo.TestMainActivityAlias。
TestMainActivity.java
...
//onCreate()方法里面写getIntent().getComponent().getClassName()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String name = getIntent().getComponent().getClassName();
Log.d("TestMainActivity", "name : " + name);
...