500 lines
10 KiB
Markdown
Raw Normal View History

2025-07-18 13:14:28 +08:00
---
title: 小智手机端
description: 基于Flutter的跨平台小智客户端支持iOS、Android、Web等多平台
---
# 小智手机客户端
<div class="project-header">
<div class="project-logo">
<img src="https://avatars.githubusercontent.com/u/196275872?s=48&v=4" alt="小智手机客户端">
</div>
<div class="project-badges">
<span class="badge platform">多平台</span>
<span class="badge language">Flutter/Dart</span>
<span class="badge status">活跃开发中</span>
</div>
</div>
## 项目简介
小智手机客户端是基于Flutter框架开发的跨平台应用为小智AI生态系统提供了移动端接入能力。通过一套代码实现了在iOS、Android、Web、Windows、macOS和Linux等多个平台的部署让用户随时随地都能与小智AI进行实时语音交互和文字对话。
<div class="app-showcase">
<div class="showcase-image">
<img src="./images/界面1.jpg" alt="应用展示" onerror="this.src='./images/界面1.jpg'; this.onerror=null;">
<div class="overlay">
<a href="https://www.bilibili.com/video/BV1fgXvYqE61" target="_blank" class="watch-demo">观看演示视频</a>
</div>
</div>
<div class="showcase-description">
<p>最新版本客户端已全面升级支持iOS与Android平台并可自行打包为Web、PC版本。通过精心设计的UI和流畅的交互体验为用户提供随时随地与小智AI交流的能力。</p>
</div>
</div>
## 核心功能
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">📱</div>
<h3>跨平台支持</h3>
<p>使用Flutter开发一套代码支持iOS、Android、Web、Windows、macOS和Linux等多平台</p>
</div>
<div class="feature-card">
<div class="feature-icon">🤖</div>
<h3>多AI模型集成</h3>
<p>支持小智AI服务、Dify、OpenAI等多种AI服务可随时切换不同模型</p>
</div>
<div class="feature-card">
<div class="feature-icon">💬</div>
<h3>丰富交互方式</h3>
<p>支持实时语音对话、文字消息、图片消息,以及通话中手动打断功能</p>
</div>
<div class="feature-card">
<div class="feature-icon">🔊</div>
<h3>语音优化技术</h3>
<p>实现安卓设备AEC+NS回音消除提升语音交互质量</p>
</div>
<div class="feature-card">
<div class="feature-icon">🎨</div>
<h3>精美界面设计</h3>
<p>轻度拟物化设计、流畅动画效果、自适应UI布局</p>
</div>
<div class="feature-card">
<div class="feature-icon">⚙️</div>
<h3>灵活配置选项</h3>
<p>支持多种AI服务配置管理可添加多个小智到聊天列表</p>
</div>
</div>
## 功能亮点
### 实时语音交互
<div class="feature-highlight">
<div class="highlight-image">
<img src="./images/界面1.jpg" alt="实时语音交互" onerror="this.src='./images/界面1.jpg'; this.onerror=null;">
</div>
<div class="highlight-content">
<h3>流畅的语音对话体验</h3>
<ul>
<li>实时语音识别和响应</li>
<li>支持持续对话模式</li>
<li>语音交互过程中支持手动打断</li>
<li>按住说话快捷模式</li>
<li>语音会话历史记录</li>
</ul>
</div>
</div>
### 多AI服务支持
<div class="feature-highlight reverse">
<div class="highlight-content">
<h3>灵活切换不同AI服务</h3>
<ul>
<li>集成小智WebSocket实时语音对话</li>
<li>支持Dify平台接入</li>
<li>支持OpenAI图文消息和流式输出</li>
<li>支持官方小智服务一键设备注册</li>
<li>可同时添加多个AI服务到对话列表</li>
</ul>
</div>
<div class="highlight-image">
<img src="./images/界面2.jpg" alt="多AI服务支持" onerror="this.src='./images/界面2.jpg'; this.onerror=null;">
</div>
</div>
## 系统要求
- **Flutter**: ^3.7.0
- **Dart**: ^3.7.0
- **iOS**: 12.0+
- **Android**: API 21+ (Android 5.0+)
- **Web**: 现代浏览器
## 安装与使用
### 安装方法
1. 克隆项目仓库:
```bash
git clone https://github.com/TOM88812/xiaozhi-android-client.git
```
2. 安装依赖:
```bash
flutter pub get
```
3. 运行应用:
```bash
flutter run
```
### 构建发布版本
```bash
# Android应用
flutter build apk --release
# iOS应用
flutter build ios --release
# Web应用
flutter build web --release
```
> **注意**: iOS编译完成后需要在设置-APP中打开网络权限
## 配置说明
应用支持灵活的服务配置管理,包括:
### 小智服务配置
- 支持配置多个小智服务地址
- WebSocket URL设置
- Token认证
- 自定义MAC地址
### Dify API配置
- 支持配置多个Dify服务
- API密钥管理
- 服务器URL配置
### OpenAI配置
- API密钥设置
- 模型选择
- 参数调整
## 开发计划
<div class="roadmap">
<div class="roadmap-item done">
<div class="status-dot"></div>
<div class="item-content">
<h4>已实现功能</h4>
<ul>
<li>支持多种AI服务提供商</li>
<li>支持OTA自动注册设备</li>
<li>增强语音识别准确性</li>
<li>实现文字和语音混合会话</li>
<li>支持OpenAI接口图文交互</li>
</ul>
</div>
</div>
<div class="roadmap-item progress">
<div class="status-dot"></div>
<div class="item-content">
<h4>正在开发</h4>
<ul>
<li>深色/浅色主题适配</li>
<li>iOS平台回音消除实现</li>
<li>本地ASR语音识别支持</li>
<li>本地唤醒词功能</li>
</ul>
</div>
</div>
<div class="roadmap-item planned">
<div class="status-dot"></div>
<div class="item-content">
<h4>计划实现</h4>
<ul>
<li>支持IoT映射手机操作</li>
<li>本地TTS实现</li>
<li>支持MCP_Client</li>
<li>OpenAI接口联网搜索功能</li>
</ul>
</div>
</div>
</div>
## 项目贡献
欢迎为小智手机客户端贡献代码或提交问题反馈:
- 目前iOS端回音消除尚未实现欢迎有经验的开发者PR
- 提交Bug、功能请求或改进建议
- 分享您使用小智手机客户端的经验和案例
## 相关链接
- [项目GitHub仓库](https://github.com/TOM88812/xiaozhi-android-client)
- [演示视频](https://www.bilibili.com/video/BV1fgXvYqE61)
- [问题反馈](https://github.com/TOM88812/xiaozhi-android-client/issues)
<style>
.project-header {
display: flex;
align-items: center;
margin-bottom: 2rem;
}
.project-logo {
width: 100px;
height: 100px;
margin-right: 1.5rem;
}
.project-logo img {
width: 100%;
height: 100%;
object-fit: contain;
}
.project-badges {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 1rem;
font-size: 0.85rem;
font-weight: 500;
}
.badge.platform {
background-color: var(--vp-c-brand-soft);
color: var(--vp-c-brand-dark);
}
.badge.language {
background-color: rgba(59, 130, 246, 0.2);
color: rgb(59, 130, 246);
}
.badge.status {
background-color: rgba(16, 185, 129, 0.2);
color: rgb(16, 185, 129);
}
.app-showcase {
margin: 2rem 0;
background-color: var(--vp-c-bg-soft);
border-radius: 12px;
overflow: hidden;
border: 1px solid var(--vp-c-divider);
}
.showcase-image {
position: relative;
width: 100%;
height: 300px;
}
.showcase-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.3);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity 0.3s ease;
}
.showcase-image:hover .overlay {
opacity: 1;
}
.watch-demo {
padding: 0.75rem 1.5rem;
/*background-color: var(--vp-c-brand);*/
color: white;
border-radius: 4px;
text-decoration: none;
font-weight: 500;
transition: background-color 0.1s ease;
}
.watch-demo:hover {
background-color: var(--vp-c-brand-dark);
}
.showcase-description {
padding: 1.5rem;
font-size: 1.1rem;
line-height: 1.6;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
margin: 2rem 0;
}
.feature-card {
background-color: var(--vp-c-bg-soft);
border-radius: 8px;
padding: 1.5rem;
transition: transform 0.3s ease, box-shadow 0.3s ease;
border: 1px solid var(--vp-c-divider);
height: 100%;
}
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.feature-icon {
font-size: 2rem;
margin-bottom: 1rem;
}
.feature-card h3 {
color: var(--vp-c-brand);
margin-top: 0;
margin-bottom: 0.5rem;
}
.feature-highlight {
display: flex;
margin: 3rem 0;
background-color: var(--vp-c-bg-soft);
border-radius: 12px;
overflow: hidden;
border: 1px solid var(--vp-c-divider);
}
.feature-highlight.reverse {
flex-direction: row-reverse;
}
.highlight-image {
flex: 1;
min-width: 40%;
}
.highlight-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.highlight-content {
flex: 1;
padding: 2rem;
}
.highlight-content h3 {
color: var(--vp-c-brand);
margin-top: 0;
margin-bottom: 1rem;
}
.highlight-content ul {
padding-left: 1.5rem;
}
.highlight-content li {
margin-bottom: 0.5rem;
}
.roadmap {
position: relative;
margin: 3rem 0;
padding-left: 2rem;
}
.roadmap:before {
content: "";
position: absolute;
left: 7px;
top: 0;
bottom: 0;
width: 2px;
background-color: var(--vp-c-divider);
}
.roadmap-item {
position: relative;
margin-bottom: 2rem;
}
.status-dot {
position: absolute;
left: -2rem;
top: 0;
width: 16px;
height: 16px;
border-radius: 50%;
z-index: 1;
}
.roadmap-item.done .status-dot {
background-color: rgb(16, 185, 129);
}
.roadmap-item.progress .status-dot {
background-color: rgb(245, 158, 11);
}
.roadmap-item.planned .status-dot {
background-color: rgb(99, 102, 241);
}
.item-content {
background-color: var(--vp-c-bg-soft);
border-radius: 8px;
padding: 1.5rem;
border: 1px solid var(--vp-c-divider);
}
.item-content h4 {
margin-top: 0;
margin-bottom: 1rem;
}
.roadmap-item.done h4 {
color: rgb(16, 185, 129);
}
.roadmap-item.progress h4 {
color: rgb(245, 158, 11);
}
.roadmap-item.planned h4 {
color: rgb(99, 102, 241);
}
@media (max-width: 768px) {
.feature-highlight,
.feature-highlight.reverse {
flex-direction: column;
}
.highlight-image {
height: 200px;
}
.project-header {
flex-direction: column;
align-items: flex-start;
}
.project-logo {
margin-bottom: 1rem;
}
}
</style>