You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Flutter应用在Android设备的「默认数字助手应用」中显示?

如何通过Flutter开发让应用加入Android「默认数字助手应用」列表

要让Flutter应用出现在Android系统的「默认数字助手应用」列表中,核心在于完成Android原生端的系统服务声明与配置,Flutter端主要负责实现交互逻辑。以下是具体步骤:

一、Android端核心配置(AndroidManifest.xml)

修改android/app/src/main/AndroidManifest.xml,这是让应用被系统识别为数字助手的关键:

  1. 添加必要权限
<uses-permission android:name="android.permission.BIND_VOICE_INTERACTION" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 若需语音输入则添加 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 若需联网功能则添加 -->
  1. 注册VoiceInteractionService
    在<application>标签内添加服务声明,其中android:label会显示在系统助手列表中:
<service
    android:name=".MyVoiceInteractionService"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_VOICE_INTERACTION">
    <intent-filter>
        <action android:name="android.service.voice.VoiceInteractionService" />
    </intent-filter>
    <meta-data
        android:name="android.voice_interaction_session"
        android:value=".MyVoiceInteractionSession" />
    <meta-data
        android:name="android.voice_interaction_session_show_settings"
        android:value="true" /> <!-- 允许在系统设置中显示助手配置项 -->
</service>
  1. 创建原生服务类
    在Android项目的java/com/your/package/(或Kotlin对应目录)下创建两个类:
  • MyVoiceInteractionService:继承系统VoiceInteractionService
package com.your.package;

import android.service.voice.VoiceInteractionService;

public class MyVoiceInteractionService extends VoiceInteractionService {
    @Override
    public void onCreate() {
        super.onCreate();
        // 可在此初始化服务基础逻辑
    }
}
  • MyVoiceInteractionSession:处理助手唤起后的会话逻辑
package com.your.package;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.service.voice.VoiceInteractionSession;

public class MyVoiceInteractionSession extends VoiceInteractionSession {
    public MyVoiceInteractionSession(Context context) {
        super(context);
    }

    @Override
    public void onShow(Bundle args, int showFlags) {
        super.onShow(args, showFlags);
        // 唤起Flutter主界面
        Intent intent = new Intent(getContext(), MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getContext().startActivity(intent);
    }
}

二、Flutter端交互实现

如果需要将系统唤起参数传递给Flutter,可通过MethodChannel实现:

  1. 原生端(MainActivity)设置通道
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "voice_assistant_channel";

    @Override
    public void configureFlutterEngine(FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
                .setMethodCallHandler((call, result) -> {
                    if (call.method.equals("getInvocationArgs")) {
                        // 可传递唤起时的系统参数
                        result.success("助手被系统唤起");
                    } else {
                        result.notImplemented();
                    }
                });
    }
}
  1. Flutter端接收数据
import 'package:flutter/services.dart';
import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final MethodChannel _channel = const MethodChannel('voice_assistant_channel');
  String? _invocationMsg;

  @override
  void initState() {
    super.initState();
    _getInvocationMsg();
  }

  void _getInvocationMsg() async {
    String? msg = await _channel.invokeMethod('getInvocationArgs');
    setState(() {
      _invocationMsg = msg;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("我的数字助手")),
      body: Center(child: Text(_invocationMsg ?? "等待唤起")),
    );
  }
}

三、测试与设置默认助手

  1. 安装应用后,进入系统设置→应用→默认应用→数字助手应用,即可看到你的应用出现在列表中,选择即可设为默认
  2. 也可通过adb命令快速设置:
adb shell cmd role set-role-holder android.app.role.VOICE_INTERACTION com.your.package

注意事项

  • BIND_VOICE_INTERACTION是系统级权限,无需用户手动授权,由系统自动授予
  • 部分品牌定制Android系统可能对第三方数字助手有额外限制,需确保设备支持第三方助手设置
  • 若需语音识别、唤醒等功能,需额外集成Android原生SpeechRecognizer或第三方语音服务

内容的提问来源于stack exchange,提问作者reasrt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:10:49