<activity-alias> 的意图因 ActivityNotFoundException 而失败
Intent for <activity-alias> fails with ActivityNotFoundException
我为Activity写了一个activity别名:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.htmlapp">
<application
android:name=".AppController">
<activity
android:name=".main.MainActivity" />
<activity-alias
android:name=".main.MainActivityAlias"
android:targetActivity=".main.MainActivity">
</application>
</manifest>
关注 this answer, 我正在尝试启动 activity-别名:
void goToMainActivity(String server) {
Intent i;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
i = new Intent();
String activityPackage = MainActivity.class.getPackage().getName();
ComponentName componentName = new ComponentName(activityPackage, ".MainActivityAlias");
i.setComponent(componentName);
} else {
i = new Intent(this, MainActivity.class);
}
i.putExtra( ... );
startActivity(i);
}
MainActivity.class.getPackage().getName()
的结果名称是 com. company.htmlapp.main
。
但是它在 startActivity(i) 行失败了 ActivityNotFoundException:
android.content.ActivityNotFoundException: Unable to find explicit activity class
{com.company.htmlapp.main/.MainActivityAlias}; have you declared this
activity in your AndroidManifest.xml?
编辑:
尝试使用 ComponentName(activityPackage, ".main.MainActivityAlias");结果错误与不同的包相同:
android.content.ActivityNotFoundException: Unable to find
explicit activity class {com.company.htmlapp.main/.main.MainActivityAlias};
have you declared this activity in your AndroidManifest.xml?
对于这样声明的 <activity-alias>
:
<activity-alias
android:name=".main.MainActivityAlias"
android:targetActivity=".main.MainActivity">
ComponentName
可以这样创建:
ComponentName componentName = new ComponentName("com.company.htmlapp", "com.company.htmlapp.main.MainActivityAlias");
在我的例子中,我也可以动态地进行:
try {
PackageManager pm = getPackageManager();
PackageInfo packageInfo = pm.getPackageInfo(this.getPackageName(), 0);
ComponentName componentName = new ComponentName(packageInfo.packageName,
MainActivity.class.getPackage().getName() + ".MainActivityAlias");
i.setComponent(componentName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
我为Activity写了一个activity别名:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.htmlapp">
<application
android:name=".AppController">
<activity
android:name=".main.MainActivity" />
<activity-alias
android:name=".main.MainActivityAlias"
android:targetActivity=".main.MainActivity">
</application>
</manifest>
关注 this answer, 我正在尝试启动 activity-别名:
void goToMainActivity(String server) {
Intent i;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
i = new Intent();
String activityPackage = MainActivity.class.getPackage().getName();
ComponentName componentName = new ComponentName(activityPackage, ".MainActivityAlias");
i.setComponent(componentName);
} else {
i = new Intent(this, MainActivity.class);
}
i.putExtra( ... );
startActivity(i);
}
MainActivity.class.getPackage().getName()
的结果名称是 com. company.htmlapp.main
。
但是它在 startActivity(i) 行失败了 ActivityNotFoundException:
android.content.ActivityNotFoundException: Unable to find explicit activity class
{com.company.htmlapp.main/.MainActivityAlias}; have you declared this
activity in your AndroidManifest.xml?
编辑:
尝试使用 ComponentName(activityPackage, ".main.MainActivityAlias");结果错误与不同的包相同:
android.content.ActivityNotFoundException: Unable to find
explicit activity class {com.company.htmlapp.main/.main.MainActivityAlias};
have you declared this activity in your AndroidManifest.xml?
对于这样声明的 <activity-alias>
:
<activity-alias
android:name=".main.MainActivityAlias"
android:targetActivity=".main.MainActivity">
ComponentName
可以这样创建:
ComponentName componentName = new ComponentName("com.company.htmlapp", "com.company.htmlapp.main.MainActivityAlias");
在我的例子中,我也可以动态地进行:
try {
PackageManager pm = getPackageManager();
PackageInfo packageInfo = pm.getPackageInfo(this.getPackageName(), 0);
ComponentName componentName = new ComponentName(packageInfo.packageName,
MainActivity.class.getPackage().getName() + ".MainActivityAlias");
i.setComponent(componentName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}