You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android使用activity-alias切换应用图标后快捷方式失效及调试启动失败问题求助

Android使用activity-alias切换应用图标后快捷方式失效及调试启动失败问题求助

大家好,我最近在实现Android应用的图标切换功能,现在遇到了两个头疼的问题,想请教一下各位大佬:

我通过点击按钮切换应用图标,点击后应用会关闭,图标确实能正常切换,但随之出现了以下问题:

  • 桌面快捷方式完全无法启动,点击就报错
  • 调试时应用无法自动启动,必须手动点桌面快捷方式,但还是会失败

项目相关信息

  1. 核心类与配置:

    • 主Activity类是MainActivity
    • 配置了两个activity-alias:默认启用的MainActivityDefault,切换后启用的MainActivitySecond
    • 我曾误以为是找不到别名对应的类,特意在MainActivity同目录下创建了空的MainActivityDefault类,但问题依然存在
  2. 具体错误表现

调试启动时的错误

Activity class {com.myproject.myapp/com.myproject.myapp.MainActivityDefault} does not exist

点击桌面快捷方式时的完整错误日志

Unable to launch. tag=WorkspaceItemInfo(id=-1 type=DEEPSHORTCUT container=# com.android.launcher3.logger.LauncherAtom$ContainerInfo@1a1bf6a targetComponent=ComponentInfo{com.myproject.myapp/com.myproject.myapp.MainActivityDefault} screen=-1 cell(-1,-1) span(1,1) minSpan(1,1) rank=0 user=UserHandle{0} title=Pokaż na mapie) intent=Intent { act=android.intent.action.MAIN cat=[com.android.launcher3.DEEP_SHORTCUT] flg=0x10200000 pkg=com.myproject.myapp cmp=com.myproject.myapp/.MainActivityDefault bnds=[359,640][1115,836] (has extras) } 
android.content.ActivityNotFoundException: Shortcut could not be started
at android.content.pm.LauncherApps.startShortcut(LauncherApps.java:1556)
at android.content.pm.LauncherApps.startShortcut(LauncherApps.java:1521)
at com.android.launcher3.BaseActivity.startShortcut(SourceFile:1)
at com.android.launcher3.BaseDraggingActivity.startShortcutIntentSafely(SourceFile:8)
at com.android.launcher3.BaseDraggingActivity.startActivitySafely(SourceFile:9)
at com.android.launcher3.Launcher.startActivitySafely(SourceFile:6)
at com.android.launcher3.uioverrides.QuickstepLauncher.startActivitySafely(SourceFile:2)
at com.android.launcher3.touch.ItemClickHandler.startAppShortcutOrInfoActivity(SourceFile:14)
at com.android.launcher3.touch.ItemClickHandler.onClickAppShortcut(SourceFile:8)
at com.android.launcher3.touch.ItemClickHandler.onClick(SourceFile:6)
at com.android.launcher3.touch.ItemClickHandler.b(Unknown Source:0)
at O0.f.onClick(Unknown Source:0)
at com.android.launcher3.popup.PopupContainerWithArrow.lambda$getItemClickListener$0(SourceFile:1)
at com.android.launcher3.popup.PopupContainerWithArrow.d(Unknown Source:0)
at F0.e.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7441)
at com.android.launcher3.shortcuts.DeepShortcutTextView.performClick(SourceFile:3)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

我的AndroidManifest.xml配置

<application 
    android:allowBackup="true" 
    android:enabled="true" 
    android:dataExtractionRules="@xml/data_extraction_rules" 
    android:fullBackupContent="@xml/backup_rules" 
    android:icon="@mipmap/app_icon" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/app_icon_round" 
    android:supportsRtl="true" 
    android:theme="@style/Theme.MyApp" 
    android:usesCleartextTraffic="true" 
    tools:targetApi="31" >

    <activity android:name=".FirstTimeActivity" android:exported="false" />

    <activity 
        android:name=".MainActivity" 
        android:enabled="false" 
        android:exported="true" 
        android:label="@string/app_name" 
        android:theme="@style/Theme.MyApp.NoActionBar" >
        <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
    </activity>

    <activity-alias 
        android:name=".MainActivityDefault" 
        android:enabled="true" 
        android:exported="true" 
        android:icon="@mipmap/app_icon_round" 
        android:label="@string/app_name" 
        android:roundIcon="@mipmap/app_icon_round" 
        android:targetActivity=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
    </activity-alias>

    <activity-alias 
        android:name=".MainActivitySecond" 
        android:enabled="false" 
        android:exported="true" 
        android:icon="@mipmap/app_icon_second_round" 
        android:label="@string/app_name_second" 
        android:roundIcon="@mipmap/app_icon_second_round" 
        android:targetActivity=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
    </activity-alias>
</application>

我已经给所有activity-alias设置了android:exported="true",也指定了正确的targetActivity,但切换图标后,不管是调试启动还是点击快捷方式,都提示找不到MainActivityDefault这个组件。我甚至特意创建了空的MainActivityDefault类,但问题还是没解决。

有没有大佬遇到过类似的问题?或者能帮我分析一下可能的原因?万分感谢!

内容来源于stack exchange

火山引擎 最新活动