如何在Flutter应用中编程选择切换Android设备的桌面launcher应用
Flutter 安卓端指定默认启动器实现方案
注意:Android 10(API 29)及以上系统为了安全限制,禁止第三方应用直接静默修改默认启动器,仅能通过唤起系统自带的默认应用选择弹窗,引导用户手动确认完成设置,无合法绕过方案。
实现逻辑
- Flutter 层通过
MethodChannel调用安卓原生层 API - 原生层构造匹配桌面启动器的 Intent,唤起系统选择界面,可预选指定包名的启动器应用
- 用户在弹窗中确认后即可完成默认启动器的设置
步骤1:Flutter 层实现
先声明方法通道,调用原生能力:
import 'package:flutter/services.dart'; // 自定义通道名,需和安卓原生层保持一致 const _channel = MethodChannel('com.your_app/custom_channel'); // 调用该方法传入目标启动器的包名,唤起设置流程 Future<void> selectDefaultLauncher(String targetLauncherPackage) async { try { await _channel.invokeMethod( 'setDefaultLauncher', {'target_package': targetLauncherPackage}, ); } on PlatformException catch (e) { print('设置失败:${e.message}'); } }
步骤2:安卓原生层实现
打开安卓项目下的 MainActivity,添加方法通道的处理逻辑:
import android.content.Intent import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterActivity() { // 和Flutter层保持一致的通道名 private val CHANNEL = "com.your_app/custom_channel" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -> if (call.method == "setDefaultLauncher") { val targetPkg = call.argument<String>("target_package") if (targetPkg.isNullOrEmpty()) { result.error("PARAM_ERROR", "目标启动器包名不能为空", null) return@setMethodCallHandler } // 唤起系统默认启动器选择弹窗 val homeIntent = Intent(Intent.ACTION_MAIN).apply { addCategory(Intent.CATEGORY_HOME) addCategory(Intent.CATEGORY_DEFAULT) `package` = targetPkg } startActivity(Intent.createChooser(homeIntent, "设置默认桌面")) result.success("SUCCESS") } else { result.notImplemented() } } } }
补充说明
- 若需要展示可选的启动器列表供用户选择,可以在原生层新增方法查询所有符合桌面启动器规则的应用信息(包名、名称、图标),回传给 Flutter 层渲染列表即可
- Android 9(API 28)及以下版本可申请
android.permission.SET_PREFERRED_APPLICATIONS权限,通过PackageManager直接修改默认启动器,无需用户手动确认,但该权限在高版本系统已被废弃 - 设置完成后可新增原生查询逻辑,获取当前系统默认启动器的包名,校验是否设置成功
内容的提问来源于stack exchange,提问作者Sakibul Haque
相关产品推荐
相关产品推荐

