【问题标题】:Intent for <activity-alias> fails with ActivityNotFoundException<activity-alias> 的意图因 ActivityNotFoundException 而失败
【发布时间】:2023-04-01 19:46:01
【问题描述】:

我为一个活动写了一个活动别名:

<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, 之后,我正在尝试启动该活动别名:

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?

【问题讨论】:

    标签: android android-manifest android-activity-alias


    【解决方案1】:

    对于这样声明的&lt;activity-alias&gt;

    <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();
        }
    

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多