Android使用activity-alias切换应用图标后快捷方式失效及调试启动失败问题求助
Android使用activity-alias切换应用图标后快捷方式失效及调试启动失败问题求助
大家好,我最近在实现Android应用的图标切换功能,现在遇到了两个头疼的问题,想请教一下各位大佬:
我通过点击按钮切换应用图标,点击后应用会关闭,图标确实能正常切换,但随之出现了以下问题:
- 桌面快捷方式完全无法启动,点击就报错
- 调试时应用无法自动启动,必须手动点桌面快捷方式,但还是会失败
项目相关信息
核心类与配置:
- 主Activity类是
MainActivity - 配置了两个
activity-alias:默认启用的MainActivityDefault,切换后启用的MainActivitySecond - 我曾误以为是找不到别名对应的类,特意在
MainActivity同目录下创建了空的MainActivityDefault类,但问题依然存在
- 主Activity类是
具体错误表现
调试启动时的错误
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




