# 网约车 **Repository Path**: daxiaa/online_car_hailing ## Basic Information - **Project Name**: 网约车 - **Description**: 网约车 - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 4 - **Created**: 2020-07-30 - **Last Updated**: 2025-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mylink-netcar-client-android #### 介绍 Mylink网约车android客户端 #### 软件架构 约车SDK包括司机端aar、乘客端aar和共享库aar 司机端和乘客端采用了相同的架构,其中共享库提供了一些两端都需要的一些方法和工具类 项目采用了MVVM架构,Activity,Fragment,Dialog、Widget以及XML文件共同称为View,用于UI显示。ViewModel用作View和Model交互的桥梁。Model作为数据的具象化载体,封装了网络请求和访问本地数据的方法。 大致来说,每个View对应一个ViewModel,ViewModel持有零个至多个LiveData,View通过监听LiveData中的数据而做出相应的UI上的改变。其中DataRepository类中提供了共享的LiveData,用于ViewModel与ViewModel之间共享数据。DataBinding用于绑定数据和设置监听事件。 网络请求采用Retrofit+OkHttp实现,异步请求使用的是协程。 #### 安装教程 1,将sdk拷贝到主模块的libs目录下 2,复制version.gralde到项目的根目录中,并在build.gradle中添加如下代码: apply from:"version.gradle" buildscript { ext.kotlin_version = '1.3.50' repositories { google() jcenter() maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.google.gms:google-services:4.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'io.fabric.tools:gradle:1.31.0' // Crashlytics plugin // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { mavenCentral() google() jcenter() } } 在模块的根目录的build.gradle中添加相关依赖: repositories { flatDir { dirs'libs' } } dependencies { // ... implementation(name:'shared-release', ext:'aar') implementation(name:'driver-release', ext:'aar') implementation(name:'passenger-release', ext:'aar') implementation "com.google.android.material:material:$rootProject.ext.versions.material" implementation "androidx.constraintlayout:constraintlayout:$rootProject.ext.versions.constraintLayout" //glide implementation "com.github.bumptech.glide:glide:$rootProject.ext.versions.glide" kapt "com.github.bumptech.glide:compiler:$rootProject.ext.versions.glide" // // implementation 'com.google.guava:guava:27.0.1-jre' //google map implementation "com.google.android.gms:play-services-maps:$rootProject.ext.versions.playService" implementation "com.google.android.gms:play-services-location:$rootProject.ext.versions.playService" implementation "com.google.maps.android:android-maps-utils:$rootProject.ext.versions.mapUtil" implementation "com.google.android.libraries.places:places:$rootProject.ext.versions.places" //recyclerview implementation "androidx.recyclerview:recyclerview:$rootProject.ext.versions.recyclerview" //retrofit implementation "com.squareup.retrofit2:retrofit:$rootProject.ext.versions.retrofit2" implementation "com.squareup.retrofit2:converter-gson:$rootProject.ext.versions.retrofit2" implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:$rootProject.ext.versions.coroutinesAdapter" implementation "com.squareup.okhttp3:okhttp:$rootProject.ext.versions.okhttp" implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.ext.versions.logginginterceptor" //lifecycle implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.ext.versions.lifecycle" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$rootProject.ext.versions.lifecycle" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$rootProject.ext.versions.lifecycle" //kotlin implementation "androidx.core:core-ktx:$rootProject.ext.versions.ktx" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" //coroutines implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.ext.versions.coroutines" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.ext.versions.coroutines" //firebase implementation "com.google.firebase:firebase-messaging:$rootProject.ext.versions.firebaseMessage" implementation "com.crashlytics.sdk.android:crashlytics:$rootProject.ext.versions.crashlytics" //ARouter implementation "com.alibaba:arouter-api:$rootProject.ext.versions.arouter" kapt rootProject.ext.arouterAnnotation api ("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:$rootProject.ext.versions.wheelPicker") { exclude group: 'com.android.support' } api "org.greenrobot:eventbus:$rootProject.ext.versions.eventBus" implementation ("com.google.android:flexbox:$rootProject.ext.versions.flexbox"){ exclude group: 'org.jetbrains.kotlin', module: 'kotlin-gradle-plugin' exclude group: 'com.android.tools.build', module: 'gradle' } } apply plugin: 'com.google.gms.google-services' 3,初始化 添加google_maps_key到strings.xml文件中,name必须为google_maps_key 在Application中进行初始化 ARouter.init(this) SdkManager.setApplicationContext(this) 获取到FirebaseId后设置 SdkManager.setFireBaseId(fireBaseToken) #### 使用说明 1,接入卡片 根据需要在xml中引入 2,登入卡片 用户登录APP后或者重新登录后,调用 SdkManager.setMyLinkToken(myLinkToken) 同时,调用乘客卡片的 passengerFragment?.passengerLogin() 进行登入 如果当前用户是司机,需要调用: driverCardFragment?.setCoordinate(Coordinates(location.latitude, location.longitude)) 传入司机当前坐标 3,FCM调用 复制以下代码到FirebaseMessagingService的onMessageReceived的方法中 SdkManager.onMessageReceived(this, remoteMessage) 同时,在项目入口页加入以下代码: private fun onBroadcastReceiverClick() { var bundle = intent.extras if (bundle != null) { var messageType = bundle?.get("messageType") if (messageType != null) { val orderId = bundle?.get("orderId").toString() val status = bundle?.get("status").toString().toInt() when (messageType.toString().toInt()) { 1 -> //司机 ARouter.getInstance().build(ARouterPath.DRIVER_MAIN) .withString("orderId", orderId) .withInt("status", status) .navigation() 2 -> //乘客收到推送 ARouter.getInstance().build(ARouterPath.PASS_MAIN) .withString("orderId", orderId) .withInt("status", status) .navigation() } } } } 并在onCreate时调用 4,多语言 SdkManager.setLangueage(LANGUAGE_EN) #### 生成aar并测试sdk使用 执行 gradlew asR 命令 去driver、passenger、shared 3个module中的build/outputs目录下拿到aar文件 将aar文件放到APP module中libs目录 更改APP module中的build.gradle,具体如下: 注释掉 dependencies中 api project(':passenger') api project(':driver') 同时,打开dependencies中其他注释 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) 7. 打包命令 gradlew uploadArchives