当前位置:首页>安卓APP>安卓端快速接入AI与地图API攻略

安卓端快速接入AI与地图API攻略

  • 2026-10-30 02:39:05
安卓端快速接入AI与地图API攻略

前情提要:笔者目前学识尚浅,文中若有疏漏,恳请大家海涵与指正。

文章中的视频及图片请勿未经作者允许使用,谢谢。本篇文章无任何商业行为,仅供个人学习使用。

一、阿里百炼平台AI集成

先上效果图,这里以安卓端为例

1.第一步:先配置好网络权限和相关依赖项

<!--允许程序访问网络连接--><uses-permission android:name="android.permission.INTERNET"/><!--允许程序获取网络信息状态--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--允许改变WLAN状态的开关--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!-- 检查WiFi状态 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

这里的网络权限可以按需增加

implementation("com.alibaba:dashscope-sdk-java:2.13.0"){exclude(group = "com.google.guava")exclude(group = "com.google.code.findbugs", module = "jsr305")}// 显式添加兼容的guava版本implementation("com.google.guava:guava:32.1.2-android")// ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")//让 ViewModel 能在 Compose 中使用
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.7.0")
//将生命周期状态转换为 Compose 的 State

这里我使用了排除部分配置,大家可以根据自己的项目进行选择

2.需要文件:

两个接口:

// data/ai/AIService.ktpackage [包名].data.ai
interface AIService {suspend fun sendMessage(message: String): Result<String>fun setApiKey(apiKey: String)// 新增流式响应方法//    suspend fun sendMessageStream(//        message: String,//        onChunk: (String) -> Unit,//        onComplete: () -> Unit,//        onError: (Throwable) -> Unit//    )}
// data/ai/AIMessage.ktpackage [包名].data.aiimport java.util.*data class AIMessage(val id: String = UUID.randomUUID().toString(),val content: String,val isUser: Boolean, // true表示用户消息,false表示AI消息val timestamp: Long = System.currentTimeMillis())
我这里并没有用流式,因为有专门的打字机特效,可以先接受全部字符后再打字机输出[狗头]
一个AITab界面,一个AIViewModel和一个AIService(取名任意)
AITab界面的UI设计我就不过多描述,网上很多,这里主要讲一下我自己是如何集成的
3.AI前端服务层的架构
首先需要进入阿里百炼平台获取一个免费的key,然后就可以开始集成工作了。
AIService服务层的架构
首先最熟悉的import
import com.alibaba.dashscope.aigc.generation.Generationimport com.alibaba.dashscope.aigc.generation.GenerationParamimport com.alibaba.dashscope.aigc.generation.GenerationResultimport com.alibaba.dashscope.common.Messageimport com.alibaba.dashscope.common.Roleimport com.alibaba.dashscope.exception.ApiExceptionimport com.alibaba.dashscope.exception.InputRequiredExceptionimport com.alibaba.dashscope.exception.NoApiKeyExceptionimport com.alibaba.dashscope.utils.Constants
然后在class里override显式重写我们的接口方法,其中最关键的就是将APIkey设置到SDK
Constants.apiKey = apiKey
然后在AIViewModel调用
aiService.setApiKey("xx-xxxxx...xxxxxxx")
方法设置自己的key即可
其次设置系统提示语、用户消息和消息数组
val systemMessage = Message.builder()    .role(Role.SYSTEM.getValue())    .content("你是...应用的AI助手...")    .build()val userMsg = Message.builder()    .role(Role.USER.getValue())    .content(userMessage)    .build()return listOf(systemMessage, userMsg)
创建实例,调用API
// 构建对话消息val conversationHistory = buildMessageHistory(message)// 创建Generation实例val gen = Generation()// 构建参数val param = GenerationParam.builder()    .apiKey(apiKey)    .model("qwen-plus") // 可以使用qwen-turbo降低成本.messages(conversationHistory)    .resultFormat(GenerationParam.ResultFormat.MESSAGE)    .build()// 调用APIval result: GenerationResult = gen.call(param)
这里用了协程,用异步也是可以的
解析结果
val aiResponse = result.output.choices[0].message.content
成功返回
Result.success(aiResponse)
最后再加上一点try-catch防止程序报错崩溃即可
这样就可以直接在viewmodel里面调用AI服务层啦,最后再搞一个美观的UITab,一个简单的AI集成就搞定了。
二、地图集成(这里以华为地图为例)
先上效果图
地图的集成我就不展开叙述了,
地图的坑很多,我踩了不知道多少次,
有异步无响应用实例才能解决等等,
这里就展示一下最简单的集成,其实初始化一行
就行,由于华为地图在非华为手机上(没有
HMScore服务)导致可能会有一定的内存增加,
各位调用前三思

AndroidView(

    factory = { context ->

        // 1️⃣ 初始化地图SDK

        MapsInitializer.initialize(context)

        MapView(context).apply {

            onCreate(null)

            getMapAsync { map ->

                // 2️⃣ 基础地图配置

                with(map.uiSettings) {

                    isZoomControlsEnabled = true

                    isScrollGesturesEnabled = true

                    isZoomGesturesEnabled = true

                    isMyLocationButtonEnabled = true // 显示定位按钮

                }

                // 3️⃣ 初始视角(以上海为例)

                map.moveCamera(

                    CameraUpdateFactory.newLatLngZoom(

                        LatLng(31.2304, 121.4737), 

                        12f

                    )

                )

                // 4️⃣ 添加当前位置标记

                addMyLocationMarker(map)

                // 5️⃣ 添加业务数据标记

                addCustomMarkers(map, getCapsulesData())

            }

        }

    },

    modifier = Modifier.fillMaxSize()

)

完[敬礼][狗头]

最新文章

随机文章