Flutter接入just_audio_background插件启动Activity报错如何解决?
可行解决方案
1. 先修正AndroidManifest.xml配置
接入just_audio_background后,不要直接修改原有MainActivity的类名,需按如下规则配置启动页:
<!-- 配置AudioServiceActivity为启动页 --> <activity android:name="com.ryanheise.audioservice.AudioServiceActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/你的启动页主题"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 配置meta-data指向你自己的MainActivity --> <meta-data android:name="com.ryanheise.audioservice.DEFAULT_ACTIVITY" android:value="你的应用包名.MainActivity" /> </activity> <!-- 保留原有MainActivity配置,不需要加LAUNCHER过滤器 --> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/你的普通主题" />
2. 替换跳转逻辑(优先选这个方案,不会出现类找不到异常)
不要硬编码类名跳转,直接通过包管理器获取应用的启动Intent:
Intent launchIntent = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName()); if (launchIntent != null) { // 根据需求加对应的启动flag launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); activity.startActivity(launchIntent); }
这个方案不管启动页配置的是哪个类,都可以正常跳转,不需要关心类名变更,也不需要处理混淆问题。
3. 如果必须硬编码AudioServiceActivity跳转
先在proguard-rules.pro中添加混淆规则,防止插件类被编译时移除:
-keep class com.ryanheise.audioservice.** { *; }
之后再使用反射跳转即可:
try { Class<?> targetClass = Class.forName("com.ryanheise.audioservice.AudioServiceActivity"); Intent intent = new Intent(activity, targetClass); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); activity.startActivity(intent); } catch (ClassNotFoundException e) { e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者Ajit Satam
相关产品推荐
相关产品推荐

